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.
@@ -1,18 +1,18 @@
1
- "use strict";var zB=Object.create;var Ta=Object.defineProperty;var JB=Object.getOwnPropertyDescriptor;var XB=Object.getOwnPropertyNames;var jB=Object.getPrototypeOf,ZB=Object.prototype.hasOwnProperty;var a=(e,t)=>Ta(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),Qe=(e,t)=>{for(var r in t)Ta(e,r,{get:t[r],enumerable:!0})},eg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of XB(t))!ZB.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=JB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?zB(jB(e)):{},eg(t||!e||!e.__esModule?Ta(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>eg(Ta({},"__esModule",{value:!0}),e);var sg=T((fse,rg)=>{var eH=require("fast-glob"),{statSync:eE,existsSync:tE,readFileSync:tH,writeFileSync:rH}=require("fs"),{spawnSync:sH,spawn:nH,execFileSync:dse}=require("child_process"),{isMainThread:iH}=require("worker_threads"),{join:Ln,relative:tg}=require("path"),{PACKAGE_ROOT:es}=b(),{tmpdir:oH,platform:aH}=require("os");require("source-map-support").install();var cH=["resources","server","dataLayer","components"],Ra="ts-build",rE,uH=__filename.endsWith("tsBuild.js");if(uH){if(iH){let r;try{eE(Ln(es,Ra)),r=!0}catch{}if(r)for(let s of eH.sync(cH.map(n=>n+"/**/*.ts"),{cwd:es})){let n=0,i=0;try{n=eE(Ln(es,s)).mtimeMs-5e3,i=eE(Ln(es,Ra,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."),rE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),rE=!0;if(rE){let s=Ln(es,"node_modules/.bin/tsc");aH()==="win32"&&(s+=".cmd");let n=sH(s,{cwd:es});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Ln(oH(),"harperdb-tsc.pid"),o;if(tE(i))try{process.kill(+tH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=nH(s,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});rH(i,c.pid.toString()),c.unref()}}}}let e=rg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(es)&&!s[0].includes("node_modules")){let i=tg(es,s[0]),o;i.startsWith(Ra)?o=Ln(es,tg(Ra,i)):o=Ln(es,Ra,i);let c=Ln(o,r),u=c+".js";if(tE(u))return u;if(c.includes(".")&&tE(c))return c}return t(r,s,n)}}});var b=T((mse,pg)=>{"use strict";var Dr=require("path"),lH=require("fs"),{relative:Ese,join:hse}=Dr,{existsSync:_H}=lH;function dH(){let e=__dirname;for(;!_H(Dr.join(e,"package.json"));){let t=Dr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(dH,"getHDBPackageRoot");var Dn=dH(),ng="js",Ku=ng,fH="harperdb-config.yaml",EH="defaultConfig.yaml",hH="hdb",ig=`harperdb.${Ku}`,og=`customFunctionsServer.${Ku}`,mH=`restartHdb.${Ku}`,nE="HarperDB",Yu="Custom Functions",Wu="Clustering Hub",Qu="Clustering Leaf",pH="Clustering Ingest Service",SH="Clustering Reply Service",TH="foreground.pid",RH="hdb.pid",gH="data",AH={HDB:nE,CLUSTERING_HUB:Wu,CLUSTERING_LEAF:Qu,CLUSTERING_INGEST_SERVICE:pH,CLUSTERING_REPLY_SERVICE:SH,CUSTOM_FUNCTIONS:Yu,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"},OH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},NH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},bH={harperdb:nE,"clustering hub":Wu,"clustering leaf":Qu,"custom functions":Yu,custom_functions:Yu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},yH={CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu},sE={HDB:Dr.join(Dn,"server/harperdb"),CUSTOM_FUNCTIONS:Dr.join(Dn,"server/customFunctions"),CLUSTERING_HUB:Dr.join(Dn,"server/nats"),CLUSTERING_LEAF:Dr.join(Dn,"server/nats")},IH={HDB:Dr.join(sE.HDB,ig),CUSTOM_FUNCTIONS:Dr.join(sE.CUSTOM_FUNCTIONS,og)},wH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Dr.join(Dn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Dr.join(Dn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Dr.join(Dn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},CH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ag="support@harperdb.io",LH="customer-success@harperdb.io",cg=1,DH=4141,ug="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",UH="https://www.harperdb.io/product",MH=`For support, please submit a request at ${ug} or contact ${ag}`,lg=`For license support, please contact ${LH}`,PH="None of the specified records were found.",vH="hash attribute not found",BH=`Your current license only supports ${cg} role. ${lg}`,HH="Your current license only supports 3 connections to a node.",qH="127.0.0.1",FH=1,GH=/^\.$/,xH=/^\.\.$/,kH="U+002E",VH=/\//g,$H="U+002F",YH=/U\+002F/g,KH=/^U\+002E$/,WH=/^U\+002EU\+002E$/,QH="d",zH=999999,JH="*",XH="--max-old-space-size=",jH="system",ZH="__hdb_hash",eq=".harperdb",tq=".hdb",rq="keys",sq="hdb_boot_properties.file",nq=".updateConfig.json",iq="SIGTSTP",oq=24,aq=6e4,cq=448,uq="blob",lq="trash",_q="database",dq="schema",fq="transactions",Eq=".count",hq="id",mq="PROCESS_NAME",_g={SETTINGS_PATH_KEY:"settings_path"},dg=require("lodash"),pq={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"},Sq={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},Tq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Rq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},gq={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"},_r="hdb_internal:",Aq={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},Oq={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"},Nq="060493.ks",bq=".license",yq={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"},Iq={CSV:".csv",JSON:".json"},wq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Cq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ga={};ga[J.INSERT]=J.INSERT;ga[J.UPDATE]=J.UPDATE;ga[J.UPSERT]=J.UPSERT;ga[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 Lq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Dq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Uq=dg.invert(fg),Mq={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"},O={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"},Eg={settings_path:_g.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];Eg[t.toLowerCase()]=t}var Pq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},vq={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"},Bq={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"},Hq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},qq={VERSION_DEFAULT:"2.2.0"},Fq={DEVELOPMENT:8192,DEFAULT:512},Gq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},xq={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"},kq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Vq=Symbol("metadata"),$q="__clustering__",Yq=Object.values(hg),Kq=15984864e5,mg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Wq=dg.invert(mg),Qq={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"},zq=111,Jq=`\r
2
- `,Xq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},jq=["*","%"],Zq="unauthorized_access",eF="func_val",tF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sF={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"},nF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iF={HTTP:"http"},oF={STOPPED:"stopped",ONLINE:"online"},aF="3.x.x",cF={SUCCESS:"success",FAILURE:"failure"},uF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:ag,HDB_SUPPORT_URL:ug,HDB_PRICING_URL:UH,SUPPORT_HELP_MSG:MH,LICENSE_HELP_MSG:lg,HDB_PROC_NAME:ig,HDB_PROC_DESCRIPTOR:nE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu,CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,SYSTEM_SCHEMA_NAME:jH,HASH_FOLDER_NAME:ZH,HDB_HOME_DIR_NAME:eq,UPDATE_FILE_NAME:nq,LICENSE_KEY_DIR_NAME:rq,BOOT_PROPS_FILE_NAME:sq,JOB_TYPE_ENUM:vq,JOB_STATUS_ENUM:yq,SYSTEM_TABLE_NAMES:Rq,SYSTEM_TABLE_HASH_ATTRIBUTES:gq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:Iq,S3_BUCKET_AUTH_KEYS:wq,VALID_SQL_OPS_ENUM:Cq,GEO_CONVERSION_ENUM:Dq,HDB_SETTINGS_NAMES:fg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Uq,SERVICE_ACTIONS_ENUM:Lq,CLUSTER_MESSAGE_TYPE_ENUM:Bq,CLUSTER_CONNECTION_DIRECTION_ENUM:Hq,CLUSTER_EVENTS_DEFS_ENUM:Gq,PERIOD_REGEX:GH,DOUBLE_PERIOD_REGEX:xH,UNICODE_PERIOD:kH,FORWARD_SLASH_REGEX:VH,UNICODE_FORWARD_SLASH:$H,ESCAPED_FORWARD_SLASH_REGEX:YH,ESCAPED_PERIOD_REGEX:KH,ESCAPED_DOUBLE_PERIOD_REGEX:WH,REG_KEY_FILE_NAME:Nq,RESTART_TIMEOUT_MS:aq,HDB_FILE_PERMISSIONS:cq,DATABASES_DIR_NAME:_q,LEGACY_DATABASES_DIR_NAME:dq,TRANSACTIONS_DIR_NAME:fq,LIMIT_COUNT_NAME:Eq,ID_ATTRIBUTE_STRING:hq,INSERT_MODULE_ENUM:Sq,UPGRADE_JSON_FIELD_NAMES_ENUM:Tq,RESTART_CODE:iq,RESTART_CODE_NUM:oq,CLUSTER_OPERATIONS:ga,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Oq,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:Aq,CLUSTERING_MESSAGE_TYPES:Qq,HDB_FILE_SUFFIX:tq,BLOB_FOLDER_NAME:uq,HDB_TRASH_DIR:lq,ORIGINATOR_SET_VALUE:zq,LICENSE_VALUES:qq,RAM_ALLOCATION_ENUM:Fq,TIME_STAMP_NAMES_ENUM:hg,TIME_STAMP_NAMES:Yq,PERMS_UPDATE_RELEASE_TIMESTAMP:Kq,SEARCH_NOT_FOUND_MESSAGE:PH,SEARCH_ATTRIBUTE_NOT_FOUND:vH,LICENSE_ROLE_DENIED_RESPONSE:BH,LICENSE_MAX_CONNS_REACHED:HH,BASIC_LICENSE_MAX_NON_CU_ROLES:cg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:DH,VALUE_SEARCH_COMPARATORS:mg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Wq,LICENSE_FILE_NAME:bq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:xq,NEW_LINE:Jq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:FH,MOMENT_DAYS_TAG:QH,API_TURNOVER_SEC:zH,LOOPBACK:qH,CODE_EXTENSION:Ku,WILDCARD_SEARCH_VALUE:JH,NODE_ERROR_CODES:kq,JAVASCRIPT_EXTENSION:ng,PERMS_CRUD_ENUM:Xq,UNAUTHORIZED_PERMISSION_NAME:Zq,SEARCH_WILDCARDS:jq,FUNC_VAL:eF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tF,JWT_ENUM:rF,CLUSTERING_FLAG:$q,ITC_EVENT_TYPES:sF,CUSTOM_FUNCTION_PROC_NAME:og,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Yu,SERVICES:nF,THREAD_TYPES:iF,MEM_SETTING_KEY:XH,HDB_RESTART_SCRIPT:mH,PROCESS_DESCRIPTORS:AH,SERVICE_SERVERS:IH,SERVICE_SERVERS_CWD:sE,PROCESS_DESCRIPTORS_VALIDATE:bH,LAUNCH_SERVICE_SCRIPTS:wH,LOG_LEVELS:NH,PROCESS_NAME_ENV_PROP:mq,LOG_NAMES:OH,PM2_PROCESS_STATUSES:oF,CONFIG_PARAM_MAP:Eg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:fH,HDB_DEFAULT_CONFIG_FILE:EH,ROLE_TYPES_ENUM:CH,BOOT_PROP_PARAMS:_g,INSTALL_PROMPTS:pq,HDB_ROOT_DIR_NAME:hH,CLUSTERING_PROCESSES:yH,FOREGROUND_PID_FILE:TH,PACKAGE_ROOT:Dn,PRE_4_0_0_VERSION:aF,DATABASES_PARAM_CONFIG:Pq,METADATA_PROPERTY:Vq,AUTH_AUDIT_STATUS:cF,AUTH_AUDIT_TYPES:uF,HDB_PID_FILE:RH,DEFAULT_DATABASE_NAME:gH,LEGACY_CONFIG_PARAMS:Mq};sg()});var iE=T((Sse,Rg)=>{"use strict";var Sg=require("minimist");Rg.exports=lF;function lF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Tg(process.env),s=Tg(Sg(process.argv))):(r=process.env,s=Sg(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(lF,"assignCMDENVVariables");function Tg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Tg,"objKeysToLowerCase")});var G=T((Rse,dE)=>{"use strict";var ai=require("fs-extra"),{workerData:_F,threadId:dF}=require("worker_threads"),js=require("path"),Og=require("yaml"),Ng=require("properties-reader"),ct=b(),gg=iE(),fF=require("os"),{PACKAGE_ROOT:aE}=b(),{_assignPackageExport:EF}=require("../index"),Oa={};for(let e in console)Oa[e]||(Oa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},bg={STDOUT:"stdOut",STDERR:"stdErr"},hF=js.join(aE,"logs"),mF=js.join(aE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),pF=1e4,Xs,ys,$t,zu,Ju,Na,ji,Aa;Aa===void 0&&yg();dE.exports={notify:Cg,fatal:Lg,error:ba,warn:_E,info:Xu,debug:lE,trace:uE,setLogLevel:NF,log_level:$t,loggerWithTag:SF,suppressLogging:TF,initLogSettings:yg,setupConsoleLogging:Ig,logCustomLevel:AF,closeLogFile:cE,getLogFilePath:()=>Na,OUTPUTS:bg,AuthAuditLog:IF};EF("logger",dE.exports);function yg(e=!1){try{if(Aa===void 0||e){cE();let t=OF(),r=gg(["ROOTPATH"]);try{Aa=Ng(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ai.pathExistsSync(js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:Ju,to_file:Xs,to_stream:ys}=bF(r.ROOTPATH?js.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Aa.get("settings_path"))),zu=ct.LOG_NAMES.HDB,Na=js.join(Ju,zu)}}catch(t){if(Aa=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=gg(Object.keys(ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ct.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(Xs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=yF();Xs=Xs===void 0?n:Xs,Xs=Ag(Xs),ys=ys===void 0?i:ys,ys=Ag(ys),$t=$t===void 0?s:$t,Ju=hF,zu=ct.LOG_NAMES.INSTALL,Na=js.join(Ju,zu);return}throw ba("Error initializing log settings"),ba(t),t}process.env.DEV_MODE&&(ys=!0),Ig()}a(yg,"initLogSettings");var oE=!0;function Ig(){Xi("error",ba),Xi("warn",_E),Xi("log",Xu),Xi("info",Xu),Xi("debug",lE),Xi("trace",uE)}a(Ig,"setupConsoleLogging");function Xi(e,t){console[e]=function(...r){if(oE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Oa[e](...r)}}a(Xi,"logConsole");function SF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Cg),fatal:r(Lg),error:r(ba),warn:r(_E),info:r(Xu),debug:r(lE),trace:r(uE)};function r(s){return function(...n){return s(t,...n)}}}a(SF,"loggerWithTag");function TF(e){try{oE=!1,e()}finally{oE=!0}}a(TF,"suppressLogging");var RF=_F?.name?.replace(/ /g,"-")||"main";function Zs(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||RF+"/"+dF);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(Zs,"createLogRecord");function ya(e){Xs&&wg(e),ys&&process.stdout.write(e)}a(ya,"logStdOut");function ju(e){Xs&&wg(e),ys&&process.stderr.write(e)}a(ju,"logStdErr");function wg(e){gF(),ji?ai.appendFileSync(ji,e):Oa.log(e)}a(wg,"logToFile");function cE(){try{ai.closeSync(ji)}catch{}ji=null}a(cE,"closeLogFile");function gF(){if(!ji){try{if(!Na)debugger;ji=ai.openSync(Na,"a")}catch(e){Oa.error(e)}setTimeout(()=>{cE()},pF).unref()}}a(gF,"openLogFile");function Xu(...e){Yt[$t]<=Yt.info&&ya(Zs("info",e))}a(Xu,"info");function uE(...e){Yt[$t]<=Yt.trace&&ya(Zs("trace",e))}a(uE,"trace");function ba(...e){Yt[$t]<=Yt.error&&ju(Zs("error",e))}a(ba,"error");function lE(...e){Yt[$t]<=Yt.debug&&ya(Zs("debug",e))}a(lE,"debug");function Cg(...e){Yt[$t]<=Yt.notify&&ya(Zs("notify",e))}a(Cg,"notify");function Lg(...e){Yt[$t]<=Yt.fatal&&ju(Zs("fatal",e))}a(Lg,"fatal");function _E(...e){Yt[$t]<=Yt.warn&&ju(Zs("warn",e))}a(_E,"warn");function AF(e,t,...r){t===bg.STDERR?ju(Zs(e,r)):ya(Zs(e,r))}a(AF,"logCustomLevel");function OF(){let e;try{e=fF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=js.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return ai.existsSync(t)||(t=js.join(aE,"utility/hdb_boot_properties.file")),t}a(OF,"getPropsFilePath");function NF(e){$t=e}a(NF,"setLogLevel");function Ag(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ag,"autoCastBoolean");function bF(e){try{if(e.includes("config/settings.js")){let o=Ng(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:js.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Og.parseDocument(ai.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===ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(bF,"getLogConfig");function yF(){try{let e=Og.parseDocument(ai.readFileSync(mF,"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(yF,"getDefaultConfig");function IF(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(IF,"AuthAuditLog")});var Ug=T((Ase,Dg)=>{"use strict";var wF=require("util"),CF=require("path"),LF=require("child_process"),DF=wF.promisify(LF.execFile),UF=1e3*1e3*10;Dg.exports={findPs:MF};async function MF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await DF("ps",["wwxo",`pid,${r}`],{maxBuffer:UF});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:CF.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(MF,"findPs")});var ze=T((Nse,Pg)=>{"use strict";var PF="__dbis__",vF="__txns__",BF="__environment_name__",HF="__dbi_defintion__",qF={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"},FF=["__createdtime__","__updatedtime__"],GF="\uFFFF",Mg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},xF=Object.values(Mg);Pg.exports={AUDIT_STORE_NAME:vF,INTERNAL_DBIS_NAME:PF,DBI_DEFINITION_NAME:HF,SEARCH_TYPES:qF,TIMESTAMP_NAMES:FF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:BF,TRANSACTIONS_DBI_NAMES_ENUM:Mg,TRANSACTIONS_DBIS:xF,OVERFLOW_MARKER:GF}});var dr=T((bse,Vg)=>{"use strict";var vg=b(),Bg=ze(),Hg={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},qg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:qg("There was an error processing your request."),400:"Invalid request"},kF=Fg[Hg.INTERNAL_SERVER_ERROR],VF={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.`},$F={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},YF={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"},KF={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 ${Bg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Bg.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"},WF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vg.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 ${vg.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"},Gg={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"},QF={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."},zF={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`},JF={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"},XF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},jF={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`},xg={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.`},kg={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}`},ZF={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."},eG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tG={...Gg,...YF,...VF,...QF,...zF,...JF,...XF,...jF,...WF,...xg,...kg,...ZF,...eG,...$F};Vg.exports={CHECK_LOGS_WRAPPER:qg,HDB_ERROR_MSGS:tG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:kF,HTTP_STATUS_CODES:Hg,LMDB_ERRORS_ENUM:KF,AUTHENTICATION_ERROR_MSGS:Gg,VALIDATION_ERROR_MSGS:xg,ITC_ERRORS:kg}});var j=T((Ise,Kg)=>{"use strict";var Zi=dr(),rG=G(),sG=b(),Zu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$g),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.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&&rG[n](i)}},fE=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}},EE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $g(e,t,r,s=sG.LOG_LEVELS.ERROR,n=null,i=!1){if(Yg(e))return e;let o=new Zu(e,t,r,s,n);return i&&delete o.stack,o}a($g,"handleHDBError");function Yg(e){return e.__proto__.constructor.name===Zu.name}a(Yg,"isHDBError");Kg.exports={isHDBError:Yg,handleHDBError:$g,ClientError:fE,ServerError:EE,hdb_errors:Zi}});var Qg=T((Cse,Wg)=>{"use strict";var nG={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))},iG="certificate.pem",oG="privateKey.pem",aG="ca.pem";Wg.exports={CERTIFICATE_VALUES:nG,CERTIFICATE_PEM_NAME:iG,PRIVATEKEY_PEM_NAME:oG,CA_PEM_NAME:aG}});var Fe=T((Lse,zg)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.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};zg.exports={validateObject:cG,validateObjectAsync:uG,validateBySchema:lG};function cG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(cG,"validateObject");async function uG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(uG,"validateObjectAsync");function lG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lG,"validateBySchema")});var mE=T((Mse,eA)=>{"use strict";var Zg=require("fs-extra"),ue=require("joi"),_G=require("os"),{boolean:Ie,string:Is,number:At,array:hE}=ue.types(),{totalmem:Jg}=require("os"),eo=require("path"),dG=G(),tl=$(),Use=Qg(),Xg=b(),fG=Fe(),jg="log",EG="components",hG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",mG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",TG="rootPath config parameter is undefined",RG="clustering.enabled config parameter is undefined",ci=At.min(0).required(),rl=hE.items({host:Is.required(),port:ci}).empty(null),en;eA.exports={configValidator:gG,routesValidator:IG,route_constraints:rl};function gG(e){if(en=e.rootPath,tl.isEmpty(en))throw TG;let t=Ie.required(),r=At.min(0).max(1e3).empty(null).default(yG),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(el),c=ue.custom(OG).empty(null).default(el),u=e.clustering?.enabled;if(tl.isEmpty(u))throw RG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ci,routes:rl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ci}).required()}).required(),network:ue.object({port:ci}).required()}).required(),leafServer:ue.object({network:ue.object({port:ci,routes:rl}).required(),streams:ue.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Is.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:At.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Is.custom(bG).optional().empty(null),maxSize:Is.custom(NG).optional().empty(null),path:Is.optional().empty(null).default(el)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:hE.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ci,securePort:ci}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.object({compressionThreshold:At.optional(),cors:Ie.optional(),corsAccessList:hE.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gG,"configValidator");function AG(e){return Zg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AG,"doesPathExist");function OG(e,t){ue.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AG(e);if(r)return t.message(r)}a(OG,"validatePath");function NG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(hG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pG):e}a(NG,"validateRotationMaxSize");function bG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(mG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(SG):e}a(bG,"validateRotationInterval");function yG(e,t){let r=t.state.path.join("."),s=_G.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jg();return i=Math.round(Math.min(i,Jg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),dG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(yG,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(en))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(en,EG);case"logging.root":return eo.join(en,jg);case"clustering.leafServer.streams.path":return eo.join(en,"clustering","leaf");case"storage.path":let s=eo.join(en,Xg.LEGACY_DATABASES_DIR_NAME);return Zg.existsSync(s)?s:eo.join(en,Xg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(en,jg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function IG(e){let t=ue.object({routes:rl});return fG.validateBySchema({routes:e},t)}a(IG,"routesValidator")});var to={};Qe(to,{server:()=>ut});var tA,ut,Ur=Te(()=>{tA=require("../index"),ut={};(0,tA._assignPackageExport)("server",ut)});var Er=T((Bse,lA)=>{"use strict";var fr=b(),ht=$(),lt=G(),{configValidator:wG,routesValidator:rA}=mE(),Wt=require("fs-extra"),CG=require("yaml"),ts=require("path"),LG=require("is-number"),nA=require("properties-reader"),DG=require("lodash"),{handleHDBError:UG}=j(),{HTTP_STATUS_CODES:MG,HDB_ERROR_MSGS:sl}=dr(),vse=require("minimist"),{server:PG}=(Ur(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:tn,CONFIG_PARAM_MAP:rs}=fr,vG="Unable to get config value because config is uninitialized",BG="Config successfully initialized",HG="Error backing up config file",qG="Empty parameter sent to getConfigValue",iA=ts.join(fr.PACKAGE_ROOT,"config","yaml",fr.HDB_DEFAULT_CONFIG_FILE),FG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sA={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"},nl,Ot,il;lA.exports={createConfigFile:GG,getDefaultConfig:xG,getConfigValue:aA,initConfig:SE,flattenConfig:ro,updateConfigValue:cA,updateConfigObject:VG,getConfiguration:KG,setConfiguration:WG,readConfigFile:RE,getClusteringRoutes:QG,initOldConfig:uA,getConfigFromFile:zG,getConfigFilePath:ui,addConfig:JG,deleteConfigFromFile:XG,getConfigObj:jG};function GG(e){let t=Un(iA);nl=ro(t.toJSON());let r;for(let o in e){let c=rs[o.toLowerCase()];if(c===tn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=pE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&oA(t,r),TE(t);let s=t.toJSON();Ot=ro(s);let n=t.getIn(["rootPath"]),i=ts.join(n,fr.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(GG,"createConfigFile");function oA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ht.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ia.TABLES))for(let i in s[n][Ia.TABLES])for(let o in s[n][Ia.TABLES][i]){let c=s[n][Ia.TABLES][i][o],u=[tn.DATABASES,n,Ia.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=[tn.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(oA,"setSchemasConfig");function xG(e){if(nl===void 0){let r=Un(iA);nl=ro(r.toJSON())}let t=rs[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(xG,"getDefaultConfig");function aA(e){if(e==null){lt.error(qG);return}if(Ot===void 0){lt.trace(vG);return}let t=rs[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(aA,"getConfigValue");function ui(e=ht.getPropsFilePath()){let t=ht.getEnvCliRootPath();return t?ts.join(t,fr.HDB_CONFIG_FILE):nA(e).get(fr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ui,"getConfigFilePath");function SE(e=!1){if(Ot===void 0||e){let t;if(!ht.noBootFile()){t=ht.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.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{uA(r);return}catch(i){if(i.code!==fr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Un(r)}catch(i){if(i.code===fr.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}`)}kG(s,r),TE(s);let n=s.toJSON();if(PG.config=n,Ot=ro(n),Ot.logging_rotation_rotate)for(let i in sA)Ot[i]&&lt.error(`Config ${sA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(BG)}}a(SE,"initConfig");function kG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ts.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.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"),Wt.writeFileSync(t,String(e)))}a(kG,"checkForUpdatedConfig");function TE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=wG(t);if(r.error)throw sl.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(TE,"validateConfig");function VG(e,t){Ot===void 0&&(Ot={});let r=rs[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(VG,"updateConfigObject");function cA(e,t,r=void 0,s=!1,n=!1,i=!1){Ot===void 0&&SE();let o=aA(rs.hdb_root),c=ts.join(o,fr.HDB_CONFIG_FILE),u=Un(c),_;if(r===void 0&&e.toLowerCase()===tn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=rs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=pE(f,t);u.setIn([...E],h)}else for(let f in r){let E=rs[f.toLowerCase()];if(E===tn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=fr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=pE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&oA(u,_),TE(u);let l=u.getIn(["rootPath"]),d=ts.join(l,fr.HDB_CONFIG_FILE);s===!0&&$G(c,l),Wt.writeFileSync(d,String(u)),n&&(Ot=ro(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cA,"updateConfigValue");function $G(e,t){try{let r=ts.join(t,"backup",`${fr.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(HG),lt.error(r)}}a($G,"backupConfigFile");var YG=["databases"];function ro(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)),il=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])&&!YG.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;!tn[u.toUpperCase()]&&rs[u]&&(n[rs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(ro,"flattenConfig");function pE(e,t){if(e===tn.CLUSTERING_NODENAME||e===tn.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(LG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ht.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 ht.autoCast(t)}a(pE,"castConfigValue");function KG(){let e=ht.getPropsFilePath(),t=ui(e);return Un(t).toJSON()}a(KG,"getConfiguration");async function WG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cA(void 0,void 0,n,!0),FG}catch(i){throw typeof i=="string"||i instanceof String?UG(i,i,MG.BAD_REQUEST,void 0,void 0,!0):i}}a(WG,"setConfiguration");function RE(){let e=ht.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!ht.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ui(e);return Un(t).toJSON()}a(RE,"readConfigFile");function Un(e){return CG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Un,"parseYamlDoc");function QG(){let e=RE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ht.isEmptyOrZeroLength(t)?[]:t;let r=rA(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ht.isEmptyOrZeroLength(s)?[]:s;let n=rA(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!ht.isEmptyOrZeroLength(s)&&!ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(QG,"getClusteringRoutes");function uA(e){let t=nA(e);Ot={};for(let r in rs){let s=t.get(r.toUpperCase());if(ht.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=rs[r].toLowerCase();n===tn.LOGGING_ROOT?Ot[n]=ts.dirname(s):Ot[n]=s}return Ot}a(uA,"initOldConfig");function zG(e){let t=RE();return DG.get(t,e.replaceAll("_","."))}a(zG,"getConfigFromFile");async function JG(e,t){let r=Un(ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ui(),String(r))}a(JG,"addConfig");function XG(e){let t=ui(ht.getPropsFilePath()),r=Un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ts.join(s,fr.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a(XG,"deleteConfigFromFile");function jG(){return il||(SE(),il)}a(jG,"getConfigObj")});var X=T((qse,fA)=>{"use strict";var gE=require("fs-extra"),ss=require("path"),_A=require("os"),ZG=require("properties-reader"),wa=G(),li=$(),ee=b(),ol=Er(),ex="Error initializing environment manager",al="BOOT_PROPS_FILE_PATH",dA=!1,tx={[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},rn={};fA.exports={BOOT_PROPS_FILE_PATH:al,getHdbBasePath:rx,setHdbBasePath:sx,get:nx,initSync:ox,setProperty:he,initTestEnvironment:ax};function rx(){return rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(rx,"getHdbBasePath");function sx(e){rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(sx,"setHdbBasePath");function nx(e){let t=ol.getConfigValue(e);return t===void 0?rn[e]:t}a(nx,"get");function he(e,t){tx[e]&&(rn[e]=t),ol.updateConfigObject(e,t)}a(he,"setProperty");function ix(){let e;try{e=li.getPropsFilePath(),gE.accessSync(e,gE.constants.F_OK|gE.constants.R_OK),dA=!0;let t=ZG(e);return rn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),rn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rn[al]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(ix,"doesPropFileExist");function ox(e=!1){try{(dA||ix()||li.noBootFile())&&(ol.initConfig(e),rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ol.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wa.error(ex),wa.error(t),console.error(t),process.exit(1)}}a(ox,"initSync");function ax(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");rn[al]=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,_A.userInfo()?_A.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,li.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,li.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,li.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,li.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,li.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 ${al}. Please check your boot props and settings files`;wa.fatal(r),wa.error(t)}}a(ax,"initTestEnvironment")});var ve=T((Gse,RA)=>{"use strict";var Ma=b(),cx=$(),Qt=X(),Pa=require("path"),ux=require("minimist"),EA=require("fs-extra"),hA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Mn,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:cl}=Ma,La,Da,Ua;function mA(){if(La!==void 0)return La;if(Qt.getHdbBasePath()!==void 0)return La=Qt.get(Mn.STORAGE_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(mA,"getBaseSchemaPath");function pA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=TA(cl),Da}a(pA,"getSystemSchemaPath");function SA(){if(Ua!==void 0)return Ua;if(Qt.getHdbBasePath()!==void 0)return Ua=Qt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(SA,"getTransactionAuditStoreBasePath");function lx(e,t){let r=Qt.get(Mn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(SA(),e.toString())}a(lx,"getTransactionAuditStorePath");function TA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(mA(),e)}a(TA,"getSchemaPath");function _x(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ux(process.argv));let s=r[Mn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!cx.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Qt.get(Mn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return hA.set(u,[cl,Ca.TABLES,t,Ca.PATH],_),Qt.setProperty(Mn.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return hA.set(u,[cl,Ca.PATH],l),Qt.setProperty(Mn.DATABASES,u),l}}let n=r[Mn.STORAGE_PATH.toUpperCase()];if(n){if(!EA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return EA.mkdirsSync(i),Qt.setProperty(Mn.STORAGE_PATH,n),i}return pA()}a(_x,"initSystemSchemaPaths");function dx(){La=void 0,Da=void 0,Ua=void 0}a(dx,"resetPaths");RA.exports={getBaseSchemaPath:mA,getSystemSchemaPath:pA,getTransactionAuditStorePath:lx,getTransactionAuditStoreBasePath:SA,getSchemaPath:TA,initSystemSchemaPaths:_x,resetPaths:dx}});var hr=T(($se,bA)=>{"use strict";var fx=dr().LMDB_ERRORS_ENUM,kse=require("lmdb"),Ex=ze(),Vse=require("buffer").Buffer,{OVERFLOW_MARKER:gA,MAX_SEARCH_KEY_LENGTH:ul}=Ex,AA=["number","string","symbol","boolean","bigint"];function hx(e){if(e=e?.primaryStore||e,!e)throw new Error(fx.ENV_REQUIRED)}a(hx,"validateEnv");function mx(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(mx,"stringifyData");function px(e){return e instanceof Date?e.valueOf():e}a(px,"convertKeyValueToWrite");function Sx(e){if(e==null)return;if(AA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+gA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+gA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Sx,"getIndexedValues");var ll=0,OA=0;function NA(){OA=Date.now()-performance.now()}a(NA,"adjustStartTime");NA();var Tx=6e4;setInterval(NA,Tx).unref();function Rx(){let e=performance.now()+OA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(Rx,"getNextMonotonicTime");bA.exports={validateEnv:hx,stringifyData:mx,convertKeyValueToWrite:px,getNextMonotonicTime:Rx,getIndexedValues:Sx}});var yA,ns,AE,va=Te(()=>{yA=require("events"),ns=class extends yA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new AE;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)}},AE=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 Mr(e){return e[Bt]||(e[Bt]=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 is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a number, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Mr(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 is.ClientError(`${c} must be a Date, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Mr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be an object, attempt to assign ${l}`);Mr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=IA(d,o);if(f)return l||(l=this[Bt]=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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");Mr(this)[o]=c}),i("deleteProperty",function(o){Mr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function IA(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[Re]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));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[Re])),Object.assign(r,e)),r||e[Re]}function Ba(e){let t;if(e[Re]&&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=Ba(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_i]||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?.[Re]===n){if(dl(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var is,Bt,_l,_i,fl,ml=Te(()=>{os();is=D(j()),Bt=Symbol("own-data");a(Mr,"getChanges");a(El,"assignTrackedAccessors");a(IA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};El(_l,{});a(hl,"collapseData");a(Ba,"deepFreeze");a(dl,"hasChanges");_i=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[_i];constructor(t){super(t)}splice(...t){return this[_i]=!0,super.splice(...t)}push(...t){return this[_i]=!0,super.push(...t)}pop(){return this[_i]=!0,super.pop()}unshift(...t){return this[_i]=!0,super.unshift(...t)}shift(){return this[_i]=!0,super.shift()}};fl.prototype.constructor=Array});function Nx(){Ox=setInterval(function(){for(let e of OE)if(e.stale){let t=e[me]?.url;wA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Ax).unref()}var NE,wA,gx,OE,di,pl,Ax,Ox,bE=Te(()=>{NE=D(hr()),wA=D(G());os();gx=100,OE=new Set,di=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(),OE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(OE.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,NE.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 A=S();E?E.push?E.push(A):E=[E,A]:E=A}}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<gx>>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 di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,NE.getNextMonotonicTime)())}getReadTxn(){}},Ax=3e4;a(Nx,"startMonitoringTxns");Nx()});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 di;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 CA,fi=Te(()=>{CA=require("../index");os();bE();a(Ge,"transaction");(0,CA._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 IE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new so.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(UA[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 so.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 so.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=wE(e);if(!S)throw new so.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:DA.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 wE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),UA[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 so.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 yE,r,s,n,i,o,c=LA;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=bx[_],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?yx:LA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,mt,Cs,DA,bx,UA,LA,yx,yE,Tl=Te(()=>{so=D(j()),mt=D(ze()),Cs=require("ordered-binary"),DA=require("lmdb"),bx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(IE,"idsForCondition");UA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(wE,"filterByType");a(ws,"attributeComparator");LA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,yx=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");yE=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 DE={};Qe(DE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>as,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>wx});function wx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MA(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 LE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(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=_[we]??_[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[qA]=!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 Rl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Rl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function vr(e,t){let r=new HA.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 CE(e){let t=e[Re];if(t){let r=e[Bt];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 PA(e){if(typeof e=="string")return t=>CE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=CE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=CE(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 vA,BA,HA,me,we,as,qA,Re,Ix,Nt,Rl,LE,os=Te(()=>{vA=require("crypto");va();BA=require("../index"),HA=D(j());ml();fi();Tl();me=Symbol.for("context"),we=Symbol.for("primary-key"),as=Symbol("is-collection"),qA=Symbol("save-updates"),Re=Symbol("stored-record"),Ix={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[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Pr(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 _=PA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[as]){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):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vA.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):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):vr(t,"delete")},{hasContent:!1,type:"update"});static post=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(n,r):vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(r):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=PA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(n,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(n,r):vr(t,"move")},{type:"delete"});post(t){if(this[as])return this.constructor.create(this[we],t,this[me]);vr(this,"post")}static isCollection(t){return t?.[as]}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&&Ix[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:MA(t,this)}}return MA(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(_=>_[we]===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[we],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[as]=!0),n}subscribe(t){return new ns}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ns}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[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,BA._assignPackageExport)("Resource",Nt);a(wx,"snake_case");Rl=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(MA,"pathToId");LE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(CE,"selectFromObject");a(PA,"transformForSelect")});var ME={};Qe(ME,{loadGQLSchema:()=>Dx,start:()=>UE,startOnMainThread:()=>Lx});function UE({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 A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,I.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)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):Cx.includes(S.type)||(0,FA.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 A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,gl.dirname)(s),S.tableClass):i.set((0,gl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,gl.dirname)(s)+"/"+S.name,A.tableClass)}}}var gl,FA,Cx,Lx,Dx,GA=Te(()=>{gl=require("path");fe();FA=D(Ze()),Cx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(UE,"start");Lx=UE,Dx=UE({ensureTable:et}).handleFile});async function Al(e){return Ux?(Ha||(Ha=Mx(vx)),(await(await Ha).import(e)).namespace):import(e)}async function Mx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ha=new Compartment({console,Math,Date,fetch:Px,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,kA.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:mr,databases:xe})}};let s=await(0,xA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function Px(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 vx(){return{Resource:Nt,tables:mr}}var xA,kA,Ux,Ha,PE=Te(()=>{os();fe();xA=require("fs/promises"),kA=require("path"),Ux=!1;a(Al,"secureImport");a(Mx,"getCompartment");a(Px,"secureOnlyFetch");a(vx,"getGlobalVars")});var BE={};Qe(BE,{handleFile:()=>Bx});async function Bx(e,t,r,s){let n=new Map,i=(0,VA.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,vE.dirname)(t),o.default),c(o,(0,vE.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 VA,vE,$A=Te(()=>{VA=require("url");PE();vE=require("path");a(Bx,"handleFile")});var qE={};Qe(qE,{start:()=>Hx});function Hx({resources:e}){e.set("login",HE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HE,YA=Te(()=>{os();a(Hx,"start");HE=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 GE=T((Ane,QA)=>{"use strict";var{Readable:qx}=require("stream"),Fx=1e4;QA.exports={streamAsJSON(e){return new FE({value:e})}};var FE=class extends qx{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),KA)}catch(n){yield KA(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);WA(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>Fx?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 WA(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 KA(e){return console.error(e),JSON.stringify(e.toString())}a(KA,"handleError");function WA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(WA,"when")});var aO=T((bne,oO)=>{"use strict";var xE=require("recursive-iterator"),Gx=require("alasql"),kE=require("clone"),zA=$(),{handleHDBError:JA,hdb_errors:xx}=j(),{HDB_ERROR_MSGS:XA,HTTP_STATUS_CODES:jA}=xx,{getDatabases:kx}=(fe(),Z(Ce)),Vx=["DISTINCT_ARRAY"],ZA=Symbol("validateTables"),VE=Symbol("validateTable"),Nne=Symbol("getAllColumns"),eO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),tO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),$E=Symbol("validateColumn"),rO=Symbol("setColumnsForTable"),sO=Symbol("checkColumnsForAsterisk"),nO=Symbol("validateGroupBy"),iO=Symbol("hasColumns"),YE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ZA](),this[sO](),this[eO]()}[ZA](){if(this[iO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[VE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[VE](t.table)})}}[iO](){let t=!1,r=new xE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[VE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=kx();if(!r[t.databaseid])throw JA(new Error,XA.SCHEMA_NOT_FOUND(t.databaseid),jA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw JA(new Error,XA.TABLE_NOT_FOUND(t.databaseid,t.tableid),jA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=kE(n);i.table=kE(t),this.attributes.push(i)})}[Ol](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)}[sO](){let t=new xE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[rO](r.tableid)}[rO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Gx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[eO](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[nO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new xE(t),n=[];for(let{node:i,path:o}of s)!zA.isEmpty(i)&&!zA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tO](i):n.push(this[$E](i)));return n}[nO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Vx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=kE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ol](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[Ol](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`}[tO](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[$E](t)}[$E](t){let r=this[Ol](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]}};oO.exports=YE});var uO=T((Ine,cO)=>{"use strict";var KE=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")}};cO.exports=KE});var _O=T((Cne,lO)=>{"use strict";var WE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};lO.exports=WE});var OO={};Qe(OO,{AUDIT_STORE_OPTIONS:()=>gO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>pr,setAuditRetention:()=>$x,transactionKeyEncoder:()=>RO});function bl(e){let t=e.auditStore=e.openDB(mO.AUDIT_STORE_NAME,gO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,SO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-QE})){if((n[0]&15)===JE){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},QE/10).unref())}),t}function $x(e){clearTimeout(Fa),Fa=null,QE=e}function yl(e,t,r,s,n,i,o){let c=AO[i],u=1;s&&(s>1?no.setFloat64(0,s):Br.set(ZE),u=9),f(0),f(t),d(r),no.setFloat64(u,e),u+=8,n?d(n):Br[u++]=0,Br[s?8:0]=c;let l=Br.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,io.writeKey)(E,Br,u);let p=u-h-1;p>127?p>16383?(jE.error("Key or username was too large for audit entry",E),u=h+1,Br[h]=0):(Br.copyWithin(h+2,h+1,u),no.setUint16(h,p|32768),u++):Br[h]=p}function f(E){E<128?Br[u++]=E:E<16384?(no.setUint16(u,E|32768),u+=2):E<1056964608?(no.setUint32(u,E|3221225472),u+=4):(Br[u]=255,no.setUint32(u+1,E),u+=5)}}function pr(e){try{let t=e.dataView||(e.dataView=new XE(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:AO[s&7],tableId:i,get recordId(){return hO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?hO(e,l,d):void 0},getValue(f){return s&zE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return jE.error("Reading audit entry error",e),{}}}function hO(e,t,r){let s=e.subarray(t,r);return(0,io.readKey)(s,0,r-t)}var io,Nl,mO,pO,SO,TO,jE,Br,no,RO,gO,QE,Fa,zE,dO,JE,fO,EO,AO,XE,oo=Te(()=>{io=require("ordered-binary"),Nl=D(X()),mO=D(ze()),pO=D(b()),SO=D(Ze()),TO=D($());xa();jE=D(G());(0,Nl.initSync)();Br=Buffer.alloc(1024),no=new DataView(Br.buffer,Br.byteOffset,1024),RO={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,io.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,io.readKey)(e,t,r)}},gO={encoding:"binary",keyEncoder:RO},QE=(0,TO.convertToMS)((0,Nl.get)(pO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(bl,"openAuditStore");a($x,"setAuditRetention");zE=16,dO=1,JE=2,fO=3,EO=4,AO={put:dO|zE,[dO]:"put",delete:JE,[JE]:"delete",message:fO|zE,[fO]:"message",invalidate:EO,[EO]:"invalidate"};a(yl,"createAuditEntry");a(pr,"readAuditEntry");XE=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(hO,"readKeySafely")});var CO={};Qe(CO,{HAS_EXPIRATION:()=>ih,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Yx,METADATA:()=>ka,NO_TIMESTAMP:()=>eh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ZE,RecordEncoder:()=>nh,TIMESTAMP_ASSIGN_LAST:()=>Wx,TIMESTAMP_ASSIGN_NEW:()=>yO,TIMESTAMP_ASSIGN_PREVIOUS:()=>IO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>th,getUpdateRecord:()=>oh,handleLocalTimeForGets:()=>Ll});function wO(){return co[0]=co[0]^64,Kx.getFloat64(0)}function Ll(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];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?.[ka]>=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[ka];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=Qx.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=wO())}}}}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,Ei.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ei.length;u++){let _=Ei[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ei.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function oh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?th|IO:eh:ao=u?i?.localTime?th|16384:yO|16384:eh,l>0&&(c|=ih),Cl=c,sh=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 A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=rh,A.timestampOffset=rh.start||0))}if(u){let A=_?.user?.username;if(E&&(wl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=pr(N).previousLocalTime;return r.put(I,yl(o,t,s,Y,A,d,wl),{ifVersion:p}),S}}r.put(Ga,yl(o,t,s,i?.localTime?1:0,A,d,wl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var NO,bO,Il,Ga,ZE,Yx,ka,co,Kx,eh,yO,Wx,IO,th,ih,rh,wl,ao,Cl,sh,nh,Qx,Ei,xa=Te(()=>{NO=require("msgpackr");oo();bO=D(G()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),ZE=new Uint8Array([1,1,1,1,3,64,0,0]),Yx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),Kx=new DataView(co.buffer,0,8),eh=0,yO=0,Wx=1,IO=3,th=4,ih=16,ao=0,Cl=-1,sh=0,nh=class extends NO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Cl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Cl,u=sh;c>=0&&(i+=2,Cl=-1,u&&(i+=8,sh=0));let _=rh=r.call(this,s,n|2048|i);wl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Il[4]=o,Il[5]=o>>8,_.set(Il,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=wO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ih&&(_=(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,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(wO,"getTimestamp");Qx=Map.prototype.get;a(Ll,"handleLocalTimeForGets");Ei=[];setInterval(()=>{for(let e=0;e<Ei.length;e++){let t=Ei[e].deref();!t||t.isDone||t.isCommitted?Ei.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&bO.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(oh,"getUpdateRecord")});var Dl=T((vne,LO)=>{"use strict";var ch=X(),uh=b(),{RecordEncoder:zx}=(xa(),Z(CO));ch.initSync();var Jx=ch.get(uh.CONFIG_PARAMS.STORAGE_COMPRESSION),Xx=ch.get(uh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,jx=uh.UPDATES_PROPERTY,ah=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Jx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Xx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:zx},this.alwaysLazyProperty=s=>s===jx)}};LO.exports=ah});var Ml=T((Hne,UO)=>{"use strict";var uo=X(),Va=b();uo.initSync();var Zx=uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",DO=uo.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ek=uo.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ul=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=Zx,this.noFSAccess=!0,DO!==void 0&&(this.overlappingSync=DO),this.noReadAhead=ek}};UO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((Fne,kO)=>{"use strict";var _h=require("lmdb"),cs=require("fs-extra"),Sr=require("path"),Pl=hr(),vO=G(),zt=dr().LMDB_ERRORS_ENUM,vl=_O(),dh=Dl(),BO=Ml(),Pn=ze(),MO=b(),{table:tk,resetDatabases:rk}=(fe(),Z(Ce)),PO=X(),us=Pn.INTERNAL_DBIS_NAME,HO=Pn.DBI_DEFINITION_NAME,sk="data.mdb",nk="lock.mdb",$a=".mdb",ik="-lock",lh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Hr(t,r),this.key_type=this.dbi[Pn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Pn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _h.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bl(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Bl,"pathEnvNameValidation");async function fh(e,t,r=!0){try{await cs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+$a);return await cs.access(s,cs.constants.R_OK|cs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await cs.access(Sr.join(e,t,sk),cs.constants.R_OK|cs.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(fh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function ok(e,t,r=!1,s=!1){Bl(e,t);let n=Sr.basename(e);t=t.toString();let i=PO.get(MO.CONFIG_PARAMS.DATABASES);i||PO.setProperty(MO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fh(e,t,s),qO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await cs.mkdirp(s?c:e);let u=new BO(s?c:c+$a,!1),_=_h.open(u);_.dbis=Object.create(null);let l=new dh(!1);_.openDB(us,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Eh(e,t,r);return _[Pn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ok,"createEnvironment");async function ak(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Sr.join(e,t);return tk({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ak,"copyEnvironment");async function qO(e,t,r=!1){Bl(e,t),t=t.toString();let s=Eh(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 fh(e,t),i=Sr.join(e,t+$a),o=n!=i,c=new BO(n,o),u=_h.open(c);u.dbis=Object.create(null);let _=GO(u);for(let l=0;l<_.length;l++)Hr(u,_[l]);return u[Pn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(qO,"openEnvironment");async function ck(e,t,r=!1){Bl(e,t),t=t.toString();let s=Sr.join(e,t+$a),n=await fh(e,t);if(global.lmdb_map!==void 0){let i=Eh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await FO(o),delete global.lmdb_map[i]}}await cs.remove(n),await cs.remove(n===s?n+ik:Sr.join(Sr.dirname(n),nk))}a(ck,"deleteEnvironment");async function FO(e){Pl.validateEnv(e);let t=e[Pn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function Eh(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Eh,"getCachedEnvironmentName");function uk(e){Pl.validateEnv(e);let t=Object.create(null),r=Hr(e,us);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==us)try{t[s]=Object.assign(new vl,n)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(uk,"listDBIDefinitions");function GO(e){Pl.validateEnv(e);let t=[],r=Hr(e,us);for(let{key:s}of r.getRange({start:!1}))s!==us&&t.push(s);return t}a(GO,"listDBIs");function lk(e,t){let s=Hr(e,us).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(lk,"getDBIDefinition");function xO(e,t,r,s=!r){if(Hl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Hr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new dh(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[HO]=c,Hr(e,us).putSync(t,c),e.dbis[t]=o,o}throw n}}a(xO,"createDBI");function Hr(e,t){if(Hl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==us?r=lk(e,t):r=new vl,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new dh(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(zt.DBI_DOES_NOT_EXIST):n}return s[HO]=r,e.dbis[t]=s,s}a(Hr,"openDBI");function _k(e,t){Hl(e,t),t=t.toString();let r=Hr(e,t),s=r.getStats();return r[Pn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(_k,"statDBI");async function dk(e,t){try{let r=Sr.join(e,t+$a);return(await cs.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(dk,"environmentDataSize");function fk(e,t){if(Hl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);Hr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Hr(e,us).removeSync(t)}a(fk,"dropDBI");function Ek(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Hr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)xO(e,i,i!==t,i===t),s=!0;else throw o}}s&&rk()}a(Ek,"initializeDBIs");kO.exports={openDBI:Hr,openEnvironment:qO,createEnvironment:ok,listDBIs:GO,listDBIDefinitions:uk,createDBI:xO,dropDBI:fk,statDBI:_k,deleteEnvironment:ck,initializeDBIs:Ek,TransactionCursor:lh,environmentDataSize:dk,copyEnvironment:ak,closeEnvironment:FO}});var $O=T((xne,VO)=>{"use strict";var hh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};VO.exports=hh});var KO=T((Vne,YO)=>{"use strict";var mh=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}};YO.exports=mh});var QO=T((Yne,WO)=>{"use strict";var ph=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};WO.exports=ph});var lo=T((Jne,XO)=>{"use strict";var hk=Ue(),mk=$O(),pk=KO(),Sk=QO(),Ls=hr(),Ya=dr().LMDB_ERRORS_ENUM,Tk=ze(),sn=b(),Rk=$(),gk=require("uuid"),Wne=require("lmdb"),{handleHDBError:Ak,hdb_errors:Ok}=j(),{OVERFLOW_MARKER:Qne,MAX_SEARCH_KEY_LENGTH:zne}=Tk,zO=X();zO.initSync();var ql=zO.get(sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sh=sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Nk(e,t,r,s,n=Ls.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new mk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];JO(_,!0,n);let l=bk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Rh(o,c,s,i,n)}a(Nk,"insertRecords");function bk(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][sn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Fl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Fl),e.dbis[t].put(n,s,s[hi])})}a(bk,"insertRecord");function yk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(yk,"removeSkippedRecords");function JO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sh]))&&(e[Sh]=r||Ls.getNextMonotonicTime()):delete e[Sh]}a(JO,"setTimestamps");function Th(e,t,r){r.indexOf(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),hk.initializeDBIs(e,t,r)}a(Th,"initializeTransaction");async function Ik(e,t,r,s,n=Ls.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new pk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=gh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Rh(c,u,s,i,n,o)}a(Ik,"updateRecords");async function wk(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Ah(e,t,r,s)}catch(u){throw Ak(u,u.message,Ok.HTTP_STATUS_CODES.BAD_REQUEST)}Th(e,t,r);let i=new Sk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Rk.isEmpty(_[t])?(l=gk.v4(),_[t]=l):l=_[t];let d=gh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Rh(o,c,s,i,n)}a(wk,"upsertRecords");async function Rh(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(),yk(r,i),s}a(Rh,"finalizeWrite");function gh(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(JO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])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 A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][sn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[hi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:gh(e,t,r,s,n,i,o))}a(gh,"updateUpsertRecord");function Ck(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ck,"validateBasic");function Ah(e,t,r,s){if(Ck(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(Ah,"validateWrite");function Fl(){}a(Fl,"noop");XO.exports={insertRecords:Nk,updateRecords:Ik,upsertRecords:wk}});var mi=T((jne,Lk)=>{Lk.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 Ds=T((Zne,eN)=>{"use strict";var ZO=$(),jO=b(),_o=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,nn=require("joi"),vn={schema_format:{pattern:_o,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Dk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required(),Uk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()),Mk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required();function Pk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>vn.schema_length.maximum?`'${e}' maximum of 250 characters`:_o.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Pk,"checkValidTable");function vk(e,t){return ZO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(vk,"validateSchemaExists");function Bk(e,t){let r=t.state.ancestors[0].schema;return ZO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Bk,"validateTableExists");function Hk(e,t){return e.toLowerCase()===jO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${jO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Hk,"validateSchemaName");eN.exports={common_validators:vn,schema_regex:_o,hdb_schema_table:Dk,validateSchemaExists:vk,validateTableExists:Bk,validateSchemaName:Hk,checkValidTable:Pk,hdb_database:Uk,hdb_table:Mk}});var Gl=T((tie,tN)=>{var{common_validators:Us}=Ds(),Wa=Fe(),Ka="is required",tt={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 Qa(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(Qa,"makeAttributesStrings");function qk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(qk,"schema_object");function Fk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Fk,"table_object");function Gk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(Gk,"create_table_object");function xk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence={message:Ka},tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(xk,"attribute_object");function kk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(kk,"describe_table");function Vk(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(Vk,"validateTableResidence");tN.exports={schema_object:qk,create_table_object:Gk,table_object:Fk,attribute_object:xk,describe_table:kk,validateTableResidence:Vk}});var sN=T((sie,rN)=>{"use strict";var $k=require("uuid"),Oh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||$k.v4(),this.schema_table=`${this.schema}.${this.table}`}};rN.exports=Oh});var xl=T((iie,nN)=>{"use strict";var Yk=sN(),Nh=class extends Yk{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}};nN.exports=Nh});var oN=T((aie,iN)=>{"use strict";iN.exports=Wk;var Kk="inserted";function Wk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Kk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Wk,"returnObject")});var kl=T((uie,_N)=>{"use strict";var Qk=b(),bh=Ue(),zk=lo(),{getSystemSchemaPath:Jk,getSchemaPath:Xk}=ve(),jk=mi(),Zk=Gl(),eV=xl(),tV=oN(),{handleHDBError:aN,hdb_errors:uN}=j(),cN=$(),{HTTP_STATUS_CODES:rV}=uN,yh=jk.hdb_attribute,lN=[];for(let e=0;e<yh.attributes.length;e++)lN.push(yh.attributes[e].attribute);var sV="inserted";_N.exports=nV;async function nV(e){let t=Zk.attribute_object(e);if(t)throw aN(new Error,t.message,uN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aN(new Error,r,rV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cN.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 eV(e.schema,e.table,e.attribute,e.id);try{let i=await bh.openEnvironment(Xk(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}`);bh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await bh.openEnvironment(Jk(),Qk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await zk.insertRecords(o,yh.hash_attribute,lN,[n]);return tV(sV,c,{records:[n]},u)}catch(i){throw i}}a(nV,"lmdbCreateAttribute")});var wh=T((_ie,fN)=>{var{hdb_table:iV,hdb_database:dN}=Ds(),oV=Fe(),Ih=require("joi"),aV={undefined:"undefined",null:"null"},cV=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||aV[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"),uV=Ih.object({database:dN,schema:dN,table:iV,records:Ih.array().items(Ih.object().custom(cV)).required()});fN.exports=function(e){return oV.validateBySchema(e,uV)}});var za=T((Eie,hN)=>{"use strict";var on=$(),EN=G(),fie=wh(),{getDatabases:lV}=(fe(),Z(Ce)),{ClientError:pi}=j();hN.exports=_V;function _V(e){if(on.isEmpty(e))throw new pi("invalid update parameters defined.");if(on.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(on.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=lV()[e.schema]?.[e.table];if(on.isEmpty(t))throw new pi(`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&&on.isEmptyOrZeroLength(o[r]))throw EN.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!on.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw EN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!on.isEmpty(o[r])&&o[r]!==""&&s.has(on.autoCast(o[r]))&&(o.skip=!0),s.add(on.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(_V,"insertUpdateValidate")});var Ja=T((mie,mN)=>{"use strict";var dV=b().OPERATIONS_ENUM,Ch=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=dV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};mN.exports=Ch});var ec=T((Tie,pN)=>{"use strict";var Sie=Ja(),Vl=b(),Dh=$(),Lh=G(),fV=require("uuid"),{handleHDBError:Xa,hdb_errors:EV}=j(),{HDB_ERROR_MSGS:ja,HTTP_STATUS_CODES:Za}=EV;pN.exports=hV;function hV(e,t,r){for(let n=0;n<t.length;n++)mV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];pV(i,r,e.operation)}}a(hV,"processRows");function mV(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xa(new Error,ja.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmptyOrZeroLength(e)||Dh.isEmpty(e.trim()))throw Xa(new Error,ja.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(mV,"validateAttribute");function pV(e,t,r){if(!e.hasOwnProperty(t)||Dh.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=fV.v4();return}throw Lh.error("Update transaction aborted due to record with no hash value:",e),Xa(new Error,ja.RECORD_MISSING_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Lh.error(e),Xa(new Error,ja.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Lh.error(e),Xa(new Error,ja.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(pV,"validateHash")});var TN=T((gie,SN)=>{"use strict";var Uh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};SN.exports=Uh});var AN=T((Oie,gN)=>{"use strict";var Mh=Ue(),SV=G(),RN=dr().LMDB_ERRORS_ENUM;gN.exports=TV;async function TV(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 Mh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==RN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mh.closeEnvironment(global.lmdb_map[s]),await Mh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==RN.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){SV.error(t)}}a(TV,"cleanLMDBMap")});var an=T((bie,yN)=>{"use strict";var tc=require("crypto"),RV=X(),{CONFIG_PARAMS:gV}=b(),NN="aes-256-cbc",AV=32,OV=16,Ph=64,bN=32,NV=Ph+bN,ON=new Map;yN.exports={encrypt:bV,decrypt:yV,createNatsTableStreamName:IV};function bV(e){let t=tc.randomBytes(AV),r=tc.randomBytes(OV),s=tc.createCipheriv(NN,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(bV,"encrypt");function yV(e){let t=e.substr(0,Ph),r=e.substr(Ph,bN),s=e.substr(NV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(NN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(yV,"decrypt");function IV(e,t){let r=RV.get(gV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ON.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),ON.set(r,s)),s}a(IV,"createNatsTableStreamName")});var Si=T((wie,wN)=>{"use strict";var Iie=qr(),$l=G(),IN=Gl(),wV=an(),Yl=$(),{handleHDBError:Kl,hdb_errors:CV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:vh}=CV,LV=X();LV.initSync();var{getDatabases:Bh}=(fe(),Z(Ce));wN.exports={describeAll:DV,describeTable:Ql,describeSchema:UV};async function DV(e){try{let t=Yl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Bh(),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 Ql({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 Ql({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){$l.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 $l.error("Got an error in describeAll"),$l.error(t),Kl(new Error,Wl.DESCRIBE_ALL_ERR)}}a(DV,"describeAll");async function Ql(e,t){Yl.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=IN.describe_table(e);if(i)throw i;let c=Bh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),vh.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=wV.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){$l.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ql,"descTable");async function UV(e){Yl.transformReq(e);let t=IN.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=Bh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yl.isEmpty(u)||u.describe){let _=await Ql({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(UV,"describeSchema")});var cn=T((Uie,MN)=>{var MV=mi(),{callbackify:LN,promisify:PV}=require("util"),{getDatabases:DN}=(fe(),Z(Ce));MN.exports={setSchemaDataToGlobal:CN,getTableSchema:vV,getSystemSchema:BV,setSchemaDataToGlobalAsync:PV(CN)};var UN=Si(),Lie=LN(UN.describeAll),Die=LN(UN.describeTable);function CN(e){global.hdb_schema=DN(),e&&e()}a(CN,"setSchemaDataToGlobal");function vV(e,t,r){let s=DN()[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(vV,"getTableSchema");function BV(){return MV}a(BV,"getSystemSchema")});var Fr=T((Pie,HN)=>{"use strict";var Jl=wh(),bt=$(),HV=require("util"),Xl=ls(),qV=cn(),PN=G(),{handleHDBError:Ti,hdb_errors:FV}=j(),{HTTP_STATUS_CODES:Ri}=FV,GV=HV.promisify(qV.getTableSchema),xV="updated",vN="inserted",BN="upserted";HN.exports={insert:VV,update:$V,upsert:YV,validation:kV,flush:KV};async function kV(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 GV(e.schema,e.table),r=Jl(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 PN.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 PN.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(kV,"validation");async function VV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.createRecords(e);return zl(vN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(VV,"insertData");async function $V(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.updateRecords(e);return bt.isEmpty(s.existing_rows)?zl(xV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a($V,"updateData");async function YV(e){if(e.operation!=="upsert")throw Ti(new Error,"invalid operation, must be upsert",Ri.INTERNAL_SERVER_ERROR);let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.upsertRecords(e);return zl(BN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(YV,"upsertData");function zl(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===vN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function KV(e){return bt.transformReq(e),Xl.flush(e.schema,e.table)}a(KV,"flush")});var qh=T((Bie,GN)=>{var WV=Fe(),Hh=require("joi"),{hdb_table:QV,hdb_database:qN}=Ds(),FN={schema:qN,database:qN,table:QV},zV={date:Hh.date().iso().required()},JV={timestamp:Hh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GN.exports=function(e,t){let r=t==="timestamp"?{...FN,...JV}:{...FN,...zV},s=Hh.object(r);return WV.validateBySchema(e,s)}});var VN=T((Hie,kN)=>{var XV=Fe(),Fh=require("joi"),{hdb_table:jV,hdb_database:xN}=Ds(),ZV=Fh.object({schema:xN,database:xN,table:jV,hash_values:Fh.array().required(),ids:Fh.array()});kN.exports=function(e){return XV.validateBySchema(e,ZV)}});var YN=T((qie,$N)=>{"use strict";var Gh=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}},xh=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}},kh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$N.exports={InsertObject:Gh,NoSQLSeachObject:xh,DeleteResponseObject:kh}});var Oi=T((Gie,JN)=>{"use strict";var WN=qh(),e$=VN(),gi=$(),KN=require("moment"),QN=G(),{promisify:t$,callbackify:r$}=require("util"),Ai=b(),s$=cn(),Vh=t$(s$.getTableSchema),$h=ls(),{DeleteResponseObject:n$}=YN(),{handleHDBError:Bn,hdb_errors:i$}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Hn}=i$,o$="records successfully deleted",a$=r$(zN);JN.exports={delete:a$,deleteRecord:zN,deleteFilesBefore:c$,deleteAuditLogsBefore:u$};async function c$(e){let t=WN(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),!KN(e.date,KN.ISO_8601).isValid())throw Bn(new Error,jl.INVALID_DATE,Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_DATE,!0);let s=gi.checkSchemaTableExist(e.schema,e.table);if(s)throw Bn(new Error,s,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,s,!0);let n=await $h.deleteRecordsBefore(e);if(await Vh(e.schema,e.table),QN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(c$,"deleteFilesBefore");async function u$(e){let t=WN(e,"timestamp");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),isNaN(e.timestamp))throw Bn(new Error,jl.INVALID_VALUE("Timestamp"),Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_VALUE("Timestamp"),!0);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);let s=await $h.deleteAuditLogsBefore(e);return await Vh(e.schema,e.table),QN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(u$,"deleteAuditLogsBefore");async function zN(e){e.ids&&(e.hash_values=e.ids);let t=e$(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);gi.transformReq(e);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);try{await Vh(e.schema,e.table);let s=await $h.deleteRecords(e);return gi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${o$}`),s}catch(s){if(s.message===Ai.SEARCH_NOT_FOUND_MESSAGE){let n=new n$;return n.message=Ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(zN,"deleteRecord")});var Zl=T((kie,ZN)=>{var l$=require("crypto"),XN=9;function _$(e){let t=f$(XN),r=jN(e+t);return t+r}a(_$,"createHash");function d$(e,t){let r=e.substr(0,XN),s=r+jN(t+r);return e===s}a(d$,"validateHash");function f$(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(f$,"generateSalt");function jN(e){return l$.createHash("md5").update(e).digest("hex")}a(jN,"md5");ZN.exports={hash:_$,validate:d$}});var tb=T(($ie,eb)=>{var Yh=Fe(),Ht={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 E$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Yh.validateObject(e,Ht)}a(E$,"addUserValidation");function h$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Yh.validateObject(e,Ht)}a(h$,"alterUserValidation");function m$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Yh.validateObject(e,Ht)}a(m$,"dropUserValidation");eb.exports={addUserValidation:E$,alterUserValidation:h$,dropUserValidation:m$}});var ke=T((Wie,sb)=>{"use strict";var{platform:Kie}=require("os"),p$="nats-server.zip",Kh="nats-server",S$=process.platform==="win32"?`${Kh}.exe`:Kh,Wh="HDB",T$=/^[^\s.,*>]+$/,rb="__request__",R$=a(e=>`${e}.${rb}`,"REQUEST_SUBJECT"),g$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},A$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},O$={HUB:"hub.pid",LEAF:"leaf.pid"},N$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},b$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Wh,deliver_subject:"__HDB__.WORKQUEUE"},y$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Wh,deliver_subject:"HDB.SCHEMAQUEUE"},I$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Wh,deliver_subject:"HDB.USERQUEUE"},w$={SUCCESS:"success",ERROR:"error"},C$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},L$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},D$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},U$={debug:"-D",trace:"-DVV"};sb.exports={NATS_SERVER_ZIP:p$,NATS_SERVER_NAME:Kh,NATS_BINARY_NAME:S$,PID_FILES:O$,NATS_CONFIG_FILES:A$,SERVER_SUFFIX:N$,WORK_QUEUE_CONSUMER_NAMES:b$,SCHEMA_QUEUE_CONSUMER_NAMES:y$,USER_QUEUE_CONSUMER_NAMES:I$,NATS_TERM_CONSTRAINTS_RX:T$,REQUEST_SUFFIX:rb,UPDATE_REMOTE_RESPONSE_STATUSES:w$,CLUSTER_STATUS_STATUSES:C$,REQUEST_SUBJECT:R$,SUBJECT_PREFIXES:L$,MSG_HEADERS:g$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:U$,LOG_LEVEL_HIERARCHY:D$}});var ib=T((zie,nb)=>{"use strict";var e_=b(),t_=class{static{a(this,"BaseLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Qh=class extends t_{static{a(this,"ExtendedLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};nb.exports={BaseLicense:t_,ExtendedLicense:Qh}});var rc=T((Xie,_b)=>{"use strict";var ho=require("fs-extra"),ob=Zl(),ab=require("crypto"),M$=require("moment"),P$=require("uuid").v4,qt=G(),Jh=require("path"),v$=$(),qn=b(),B$=ib().ExtendedLicense,Eo="invalid license key format",H$="061183",q$="mofi25",F$="aes-256-cbc",G$=16,x$=32,cb=X();cb.initSync();var zh;_b.exports={validateLicense:ub,generateFingerPrint:V$,licenseSearch:lb,getLicense:K$};function Xh(){return Jh.join(cb.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.LICENSE_FILE_NAME)}a(Xh,"getLicenseDirPath");function k$(){let e=Xh();return Jh.join(e,qn.LICENSE_FILE_NAME)}a(k$,"getLicenseFilePath");function jh(){let e=Xh();return Jh.join(e,qn.REG_KEY_FILE_NAME)}a(jh,"getFingerPrintFilePath");async function V$(){let e=jh();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $$();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a(V$,"generateFingerPrint");async function $$(){let e=P$(),t=ob.hash(e),r=jh();try{await ho.mkdirp(Xh()),await ho.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a($$,"writeFingerprint");function ub(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qn.RAM_ALLOCATION_ENUM.DEFAULT,version:qn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return qt.error("empty license key passed to validate."),r;let s=jh(),n=!1;try{n=ho.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=ho.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(q$),c=o[1];c=Buffer.concat([Buffer.from(c)],G$);let u=Buffer.concat([Buffer.from(i)],x$),_=ab.createDecipheriv(F$,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=Y$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Eo),qt.error(Eo),new Error(Eo)}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(Eo),qt.error(Eo),new Error(Eo)}else r.exp_date=l;r.exp_date<M$().valueOf()&&(r.valid_date=!1),ob.validate(o[1],`${H$}${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||qt.error("Invalid licence"),r}a(ub,"validateLicense");function Y$(e,t){try{let r=ab.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(Y$,"checkOldLicense");function lb(){let e=new B$,t=[];try{t=ho.readFileSync(k$(),"utf-8").split(qn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(v$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ub(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){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=qn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return zh=e,e}a(lb,"licenseSearch");async function K$(){return zh||await lb(),zh}a(K$,"getLicense")});var Gr=T((roe,Ib)=>{"use strict";var hb="username is required",mb="nothing to update, must supply active, role or password to update",pb="password cannot be an empty string",Sb="If role is specified, it cannot be empty.",Tb="active must be true or false";Ib.exports={addUser:tY,alterUser:rY,dropUser:nY,getSuperUser:cY,userInfo:iY,listUsers:s_,listUsersExternal:oY,setUsersToGlobal:po,findAndValidateUser:bb,getClusterUser:uY,USERNAME_REQUIRED:hb,ALTERUSER_NOTHING_TO_UPDATE:mb,EMPTY_PASSWORD:pb,EMPTY_ROLE:Sb,ACTIVE_BOOLEAN:Tb};var Rb=Fr(),W$=Oi(),tm=Zl(),gb=tb(),Ab=qr(),rm=un(),Tr=$(),Ob=require("validate.js"),_e=G(),{promisify:Q$}=require("util"),sm=an(),db=b(),fb=ke(),z$=Er(),Zie=X(),eoe=rc(),J$=mi(),{table:toe}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:X$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Zh,HDB_ERROR_MSGS:mo}=X$,{UserEventMsg:nm}=_s(),em=require("lodash"),{server:im}=(Ur(),Z(to)),j$=G();im.getUser=bb;var Nb={username:!0,active:!0,role:!0,password:!0},Eb=new Map,r_=Ab.searchByValue,Z$=Ab.searchByHash,eY=Q$(W$.delete);async function tY(e){let t=Ob.cleanAttributes(e,Nb),r=gb.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.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 r_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ms(new Error,mo.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,mo.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Rb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await po()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,mo.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],rm.signalUserChange(new nm(process.pid)),`${c.username} successfully added`}a(tY,"addUser");async function rY(e){let t=Ob.cleanAttributes(e,Nb);if(Tr.isEmptyOrZeroLength(t.username))throw new Error(hb);if(Tr.isEmptyOrZeroLength(t.password)&&Tr.isEmptyOrZeroLength(t.role)&&Tr.isEmptyOrZeroLength(t.active))throw new Error(mb);if(!Tr.isEmpty(t.password)&&Tr.isEmptyOrZeroLength(t.password.trim()))throw new Error(pb);if(!Tr.isEmpty(t.active)&&!Tr.isBoolean(t.active))throw new Error(Tb);let r=sY(t.username);if(!Tr.isEmpty(t.password)&&!Tr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password)),t.role==="")throw new Error(Sb);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 r_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=mo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mo.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ms(new Error,c,Ps.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 Rb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await po()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return rm.signalUserChange(new nm(process.pid)),n}a(rY,"alterUser");function sY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(sY,"isClusterUser");async function nY(e){try{let t=gb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Tr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,mo.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await eY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await po()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return rm.signalUserChange(new nm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(nY,"dropUser");async function iY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=em.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Z$(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(iY,"userInfo");async function oY(){let e;try{e=await s_()}catch(t){throw _e.error("Got an error listing users."),_e.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(oY,"listUsersExternal");async function s_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await r_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=em.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 r_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=em.cloneDeep(o),o.role=r[o.role],aY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Tr.errorizeMessage(e)}return null}a(s_,"listUsers");function aY(e){try{if(!e){_e.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(J$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(aY,"appendSystemTablesToRole");async function po(){try{let e=await s_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(po,"setUsersToGlobal");async function bb(e,t,r=!0){global.hdb_users||await po();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Zh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Zh.USER_INACTIVE,Ps.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(Eb.get(t)===s.password)return n;if(tm.validate(s.password,t))Eb.set(t,s.password);else throw Ms(new Error,Zh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(bb,"findAndValidateUser");async function cY(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(cY,"getSuperUser");async function uY(){let e=await s_(),t=z$.getConfigFromFile(db.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Tr.isEmpty(r)&&r?.role?.role===db.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=sm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fb.SERVER_SUFFIX.ADMIN,r}a(uY,"getClusterUser");var yb=[];im.invalidateUser=function(e){for(let t of yb)try{t(e)}catch(r){j$.error("Error invalidating user",r)}};im.onInvalidatedUser=function(e){yb.push(e)}});var nc=T((ooe,Db)=>{"use strict";var Ni=G(),Rr=b(),lY=AN(),noe=cn(),ioe=Si(),_Y=Gr(),{validateEvent:wb}=_s(),sc=ls(),dY=require("process"),{resetDatabases:fY}=(fe(),Z(Ce)),EY={[Rr.ITC_EVENT_TYPES.SCHEMA]:hY,[Rr.ITC_EVENT_TYPES.USER]:Lb};async function hY(e){let t=wb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await lY(e.message),await mY(e.message)}a(hY,"schemaHandler");async function mY(e){try{sc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=fY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(mY,"syncSchemaMetadata");var Cb=[];async function Lb(e){try{try{sc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=wb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${Rr.HDB_ITC_CLIENT_PREFIX}${dY.pid} received user event:`,e),await _Y.setUsersToGlobal();for(let r of Cb)r()}catch(t){Ni.error(t)}}a(Lb,"userHandler");Lb.addListener=function(e){Cb.push(e)};Db.exports=EY});var _s=T((doe,Mb)=>{"use strict";var coe=G(),om=$(),pY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:uoe,threadId:SY,isMainThread:TY,workerData:loe}=require("worker_threads"),{onMessageFromWorkers:RY,broadcast:_oe,broadcastWithAcknowledgement:gY}=Ze();Mb.exports={sendItcEvent:AY,validateEvent:Ub,SchemaEventMsg:OY,UserEventMsg:NY};var n_;RY(async(e,t)=>{n_=n_||nc(),Ub(e),n_[e.type]&&await n_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function AY(e){return!TY&&e.message&&(e.message.originator=SY),gY(e)}a(AY,"sendItcEvent");function Ub(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||om.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||om.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||om.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(pY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Ub,"validateEvent");function OY(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(OY,"SchemaEventMsg");function NY(e){this.originator=e}a(NY,"UserEventMsg")});var un=T((hoe,Hb)=>{"use strict";var Pb=b(),Eoe=$(),i_=G(),vb=TN(),So,{sendItcEvent:Bb}=_s();function bY(e){try{i_.trace("signalSchemaChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.SCHEMA,e);return So.schema(t),Bb(t)}catch(t){i_.error(t)}}a(bY,"signalSchemaChange");function yY(e){try{i_.trace("signalUserChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.USER,e);return So.user(t),Bb(t)}catch(t){i_.error(t)}}a(yY,"signalUserChange");Hb.exports={signalSchemaChange:bY,signalUserChange:yY}});var o_=T((poe,Fb)=>{"use strict";var qb=$(),IY=b(),wY=G(),CY=kl(),LY=xl(),DY=un(),{SchemaEventMsg:UY}=_s(),MY="already exists in";Fb.exports=PY;async function PY(e,t,r){if(qb.isEmptyOrZeroLength(r))return r;let s=[];qb.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 vY(e,t.schema,t.name,i)})),n}a(PY,"lmdbCheckForNewAttributes");async function vY(e,t,r,s){let n=new LY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await BY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(MY))wY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(vY,"createNewAttribute");async function BY(e){let t;return t=await CY(e),DY.signalSchemaChange(new UY(process.pid,IY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(BY,"createAttribute")});var To=T((Toe,Gb)=>{"use strict";var am=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}};Gb.exports=am});var kb=T((goe,xb)=>{"use strict";var HY=To(),qY=b().OPERATIONS_ENUM,cm=class extends HY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(qY.INSERT,r,s,n,i),this.records=t}};xb.exports=cm});var $b=T((Ooe,Vb)=>{"use strict";var FY=To(),GY=b().OPERATIONS_ENUM,um=class extends FY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(GY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Vb.exports=um});var Kb=T((boe,Yb)=>{"use strict";var xY=To(),kY=b().OPERATIONS_ENUM,lm=class extends xY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(kY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Yb.exports=lm});var Qb=T((Ioe,Wb)=>{"use strict";var VY=To(),$Y=b().OPERATIONS_ENUM,_m=class extends VY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super($Y.DELETE,s,n,t,i),this.original_records=r}};Wb.exports=_m});var oc=T((Loe,jb)=>{"use strict";var Coe=require("path"),zb=Ue(),YY=kb(),KY=$b(),WY=Kb(),QY=Qb(),Ro=ze(),Jb=$(),{CONFIG_PARAMS:zY}=b(),Xb=X();Xb.initSync();var a_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:JY}=ve();jb.exports=XY;async function XY(e,t){if(Xb.get(zY.LOGGING_AUDITLOG)===!1)return;let r=JY(e.schema,e.table),s=await zb.openEnvironment(r,e.table,!0),n=jY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){zb.initializeDBIs(s,Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ro.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Jb.isEmpty(n.user_name)||s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(XY,"writeTransaction");function jY(e,t){let r=Jb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===a_.INSERT)return new YY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPDATE)return new KY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPSERT)return new WY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.DELETE)return new QY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jY,"createTransactionObject")});var dm=T((Moe,Zb)=>{"use strict";var ZY=za(),Uoe=Ja(),ac=b(),e1=ec(),t1=lo().insertRecords,r1=Ue(),s1=G(),n1=o_(),{getSchemaPath:i1}=ve(),o1=oc();Zb.exports=a1;async function a1(e){try{let{schema_table:t,attributes:r}=ZY(e);e1(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 n1(e.hdb_auth_header,t,r),n=i1(e.schema,e.table),i=await r1.openEnvironment(n,e.table),o=await t1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await o1(e,o)}catch(c){s1.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(a1,"lmdbCreateRecords")});var ry=T((voe,ty)=>{"use strict";var ey=b(),c1=dm(),u1=Ja(),l1=require("fs-extra"),{getSchemaPath:_1}=ve();ty.exports=d1;async function d1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new u1(ey.SYSTEM_SCHEMA_NAME,ey.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await c1(r),await l1.mkdirp(_1(e.schema))}a(d1,"lmdbCreateSchema")});var ny=T((Hoe,sy)=>{"use strict";var fm=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}};sy.exports=fm});var cy=T((koe,ay)=>{"use strict";var iy=Ue(),Em=hr(),hm=dr().LMDB_ERRORS_ENUM,f1=ze(),oy=G(),Foe=$(),E1=require("lmdb"),h1=ny(),m1=b(),{OVERFLOW_MARKER:Goe,MAX_SEARCH_KEY_LENGTH:xoe}=f1,p1=m1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function S1(e,t,r,s){if(Em.validateEnv(e),t===void 0)throw new Error(hm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hm.IDS_REQUIRED):new Error(hm.IDS_MUST_BE_ITERABLE);try{let n=iy.listDBIs(e);iy.initializeDBIs(e,t,n);let i=new h1,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[p1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,E1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=Em.getIndexedValues(N);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)I.remove(Y[Q],o)}catch{oy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){oy.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=Em.getNextMonotonicTime(),i}catch(n){throw n}}a(S1,"deleteRecords");ay.exports={deleteRecords:S1}});var cc=T(($oe,ly)=>{"use strict";var go=$(),T1=cy(),R1=Ue(),{getSchemaPath:g1}=ve(),A1=oc(),O1=G();ly.exports=N1;async function N1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(go.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(go.isEmptyOrZeroLength(e.hash_values)&&!go.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];go.isEmpty(u)||e.hash_values.push(u)}}if(go.isEmptyOrZeroLength(e.hash_values))return uy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(go.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=g1(e.schema,e.table),i=await R1.openEnvironment(n,e.table),o=await T1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await A1(e,o)}catch(c){O1.error(`unable to write transaction due to ${c.message}`)}return uy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(N1,"lmdbDeleteRecords");function uy(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(uy,"createDeleteResponse")});var pm=T((Woe,_y)=>{"use strict";var b1=b(),Koe=hr();function mm(e,t){let r=Object.create(null);if(t.length===1&&b1.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(mm,"parseRow");function y1(e,t,r,s){let n=mm(r,e);s.push(n)}a(y1,"searchAll");function I1(e,t,r,s){let n=mm(r,e);s[t]=n}a(I1,"searchAllToMap");function w1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(w1,"iterateDBI");function bi(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(bi,"pushResults");function C1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(C1,"endsWith");function L1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(L1,"contains");function D1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(D1,"greaterThanCompare");function U1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(U1,"greaterThanEqualCompare");function M1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(M1,"lessThanCompare");function P1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(P1,"lessThanEqualCompare");_y.exports={parseRow:mm,searchAll:y1,searchAllToMap:I1,iterateDBI:w1,endsWith:C1,contains:L1,greaterThanCompare:D1,greaterThanEqualCompare:U1,lessThanCompare:M1,lessThanEqualCompare:P1,pushResults:bi}});var Ao=T((joe,Sy)=>{"use strict";var Fn=Ue(),zoe=G(),gr=hr(),c_=ze(),Je=dr().LMDB_ERRORS_ENUM,Joe=$(),v1=b(),u_=pm(),{parseRow:B1}=u_,Xoe=require("lmdb"),{OVERFLOW_MARKER:dy,MAX_SEARCH_KEY_LENGTH:H1}=c_;function fy(e,t,r,s=!1,n=void 0,i=void 0){return yi(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(fy,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={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?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(uc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[c_.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(yi,"setupTransaction");function Ey(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(dy)){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[c_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Ey,"getOverflowCheck");function q1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(l_(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(_=>B1(_.value,r))))}a(q1,"searchAll");function F1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);l_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of fy(e,t,t,s,n,i))o.set(c,u_.parseRow(u,r));return o}a(F1,"searchAllToMap");function G1(e,t,r=!1,s=void 0,n=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fy(e,void 0,t,r,s,n),c=o.transaction,u=Ey(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(G1,"iterateDBI");function x1(e,t){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(x1,"countAll");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=gr.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(k1,"equals");function V1(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(V1,"count");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,null,r,(c,u)=>{s=gr.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($1,"startsWith");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){return hy(e,t,r,s,n,i,o,!0)}a(Y1,"endsWith");function hy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=Ey(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(dy)?_.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))?_[c_.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(hy,"contains");function K1(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(K1,"greaterThan");function W1(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(W1,"greaterThanEqual");function Q1(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(Q1,"lessThan");function z1(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(z1,"lessThanEqual");function J1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(gr.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=gr.convertKeyValueToWrite(s),n=gr.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(J1,"between");function X1(e,t,r,s){gr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),r=lc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=u_.parseRow(c,r)),o}a(X1,"searchByHash");function j1(e,t,r){gr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(j1,"checkHashExists");function Z1(e,t,r,s,n=[]){return py(e,t,r,s,n),my(e,t,r,s,n).map(i=>i[1])}a(Z1,"batchSearchByHash");function eK(e,t,r,s,n=[]){py(e,t,r,s,n);let i=new Map;for(let[o,c]of my(e,t,r,s,n))i.set(o,c);return i}a(eK,"batchSearchByHashToMap");function my(e,t,r,s,n=[]){return yi(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[_,u_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(my,"batchHashSearch");function py(e,t,r,s,n){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(py,"initializeBatchSearchByHash");function l_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(l_,"validateFetchAttributes");function Gn(e,t,r){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>H1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&v1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Sy.exports={searchAll:q1,searchAllToMap:F1,count:V1,countAll:x1,equals:k1,startsWith:$1,endsWith:Y1,contains:hy,searchByHash:X1,setGetWholeRowAttributes:lc,batchSearchByHash:Z1,batchSearchByHashToMap:eK,checkHashExists:j1,iterateDBI:G1,greaterThan:K1,greaterThanEqual:W1,lessThan:Q1,lessThanEqual:z1,between:J1}});var Oo=T((eae,Oy)=>{var Ty=require("lodash"),Ry=Fe(),Be=require("joi"),tK=$(),{hdb_schema_table:__,checkValidTable:gy,hdb_table:Ay,hdb_database:d_}=Ds(),{handleHDBError:rK,hdb_errors:sK}=j(),{getDatabases:nK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:iK}=sK,oK=Be.object({database:d_,schema:d_,table:Ay,search_attribute:__,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(__).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),aK=Be.object({database:d_,schema:d_,table:Ay,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(__).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:__,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Oy.exports=function(e,t){let r=null;switch(t){case"value":r=Ry.validateBySchema(e,oK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(gy("database",e.schema)),i(gy("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=Ry.validateBySchema(e,aK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=tK.checkGlobalSchemaTable(e.schema,e.table);if(n)return rK(new Error,n,iK.NOT_FOUND);let o=nK()[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=Ty.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Ty.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 Sm=T((rae,Ny)=>{"use strict";var cK=Ue(),uK=Oo(),{getSchemaPath:lK}=ve();Ny.exports=_K;function _K(e){let t=uK(e,"hashes");if(t)throw t;let r=lK(e.schema,e.table);return cK.openEnvironment(r,e.table)}a(_K,"initialize")});var Tm=T((nae,by)=>{"use strict";var dK=Ao(),fK=Sm();by.exports=EK;async function EK(e){let t=await fK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return dK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(EK,"lmdbGetDataByHash")});var No=T((oae,yy)=>{"use strict";var Rm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};yy.exports=Rm});var wy=T((uae,Iy)=>{"use strict";var cae=No(),hK=Ao(),mK=Sm();Iy.exports=pK;async function pK(e){let t=await mK(e),r=global.hdb_schema[e.schema][e.table];return hK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(pK,"lmdbSearchByHash")});var vs=T((_ae,Cy)=>{"use strict";var gm=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}};Cy.exports=gm});var f_=T((fae,vy)=>{"use strict";var Ft=Ao(),SK=Ue(),TK=$(),ae=ze(),Ii=b(),RK=mi(),Ly=dr().LMDB_ERRORS_ENUM,{getSchemaPath:gK}=ve(),ln=Ii.SEARCH_WILDCARDS;async function AK(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=RK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Py(e,s.hash_attribute,r,t);return Uy(e,n,s.hash_attribute,r)}a(AK,"prepSearch");async function Uy(e,t,r,s){let n=gK(e.schema,e.table),i=await SK.openEnvironment(n,e.table),o=My(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(OK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Dy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Dy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.batchSearchByHash(c,r,e.get_attributes,_)}a(Uy,"executeSearch");function My(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=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.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=Ft.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=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.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=Ft.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=Ft.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=Ft.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=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(My,"searchByType");function Dy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Dy,"createMapFromIterable");function OK(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(OK,"checkToFetchMore");function Py(e,t,r,s){if(TK.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),ln.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ln[0])<0&&n.indexOf(ln[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(ln.indexOf(i)>=0&&ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(ln.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(ln[0])||n.includes(ln[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Ly.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ly.UNKNOWN_SEARCH_TYPE)}}a(Py,"createSearchTypeFromSearchObject");vy.exports={executeSearch:Uy,createSearchTypeFromSearchObject:Py,prepSearch:AK,searchByType:My}});var Hy=T((mae,By)=>{"use strict";var hae=vs(),NK=Oo(),bK=$(),yK=b(),IK=f_();By.exports=wK;function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;let n=!0;return IK.prepSearch(e,t,n)}a(wK,"lmdbGetDataByValue")});var _c=T((Tae,qy)=>{"use strict";var Sae=vs(),CK=Oo(),LK=$(),DK=b(),UK=f_();qy.exports=MK;async function MK(e,t){if(!LK.isEmpty(t)&&DK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CK(e,"value");if(s)throw s;return UK.prepSearch(e,t,!1)}a(MK,"lmdbSearchByValue")});var Gy=T((Aae,Fy)=>{"use strict";var gae=ze(),Am=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}},Om=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Nm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Am,SearchCondition:Om,SortAttribute:Nm}});var Yy=T((yae,$y)=>{"use strict";var Nae=Gy().SearchByConditionsObject,PK=vs(),vK=Oo(),bm=Ao(),E_=ze(),{Resource:bae}=(os(),Z(DE)),Vy=f_(),BK=pm(),HK=require("lodash"),{getSchemaPath:qK}=ve(),xy=Ue(),{handleHDBError:FK,hdb_errors:GK}=j(),{HTTP_STATUS_CODES:xK}=GK,kK=1e8;$y.exports=VK;async function VK(e){let t=vK(e,"conditions");if(t)throw FK(t,t.message,xK.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=qK(e.schema,e.table),s=await xy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)xy.openDBI(s,_.search_attribute);let i=HK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===E_.SEARCH_TYPES.EQUALS?_.estimated_count=bm.count(s,_.search_attribute,_.search_value):l===E_.SEARCH_TYPES.CONTAINS||l===E_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=kK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await ky(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(Vy.filterByType),d=l.length,f=bm.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=>BK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await ky(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=bm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(VK,"lmdbSearchByConditions");async function ky(e,t,r,s){let n=new PK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===E_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Vy.searchByType(e,n,i,s).map(o=>o.value)}a(ky,"executeConditionSearch")});var dc=T((wae,Ky)=>{"use strict";var $K=b().OPERATIONS_ENUM,ym=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=$K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ky.exports=ym});var Im=T((Lae,eI)=>{"use strict";var Jy=vs(),Xy=dc(),jy=_c(),Zy=cc(),Jt=b(),Wy=$(),Qy=Ue(),{getTransactionAuditStorePath:YK,getSchemaPath:KK}=ve(),zy=G();eI.exports=WK;async function WK(e){try{if(Wy.isEmpty(global.hdb_schema[e.schema])||Wy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await QK(e),await zK(e);let t=KK(e.schema,e.table);try{await Qy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=YK(e.schema,e.table);await Qy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(WK,"lmdbDropTable");async function QK(e){let t=new Jy(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 jy(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 Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Zy(n)}a(QK,"deleteAttributesFromSystem");async function zK(e){let t=new Jy(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 jy(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 Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Zy(n)}catch(i){throw i}}a(zK,"dropTableFromSystem")});var rI=T((Uae,tI)=>{"use strict";var JK=require("fs-extra"),XK=vs(),jK=No(),ZK=dc(),eW=Im(),tW=cc(),rW=Tm(),sW=_c(),_n=b(),{getSchemaPath:nW}=ve(),{handleHDBError:iW,hdb_errors:oW}=j(),{HDB_ERROR_MSGS:aW,HTTP_STATUS_CODES:cW}=oW;tI.exports=uW;async function uW(e){let t;try{t=await lW(e.schema);let r=new XK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await sW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await eW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new ZK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await tW(n);let i=nW(t);await JK.remove(i)}catch(r){throw r}}a(uW,"lmdbDropSchema");async function lW(e){let t=new jK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await rW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw iW(new Error,aW.SCHEMA_NOT_FOUND(e),cW.NOT_FOUND,void 0,void 0,!0);return s}a(lW,"validateDropSchema")});var Cm=T((Pae,sI)=>{"use strict";var wm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};sI.exports=wm});var iI=T((Hae,nI)=>{"use strict";var _W=require("fs-extra"),h_=Ue(),{getTransactionAuditStorePath:dW}=ve(),Lm=ze(),Bae=Cm();nI.exports=fW;async function fW(e){let t;try{let r=dW(e.schema,e.table);await _W.mkdirp(r),t=await h_.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{h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),h_.createDBI(t,Lm.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(fW,"createTransactionsAuditEnvironment")});var uI=T((Fae,cI)=>{"use strict";var Dm=b(),oI=Ue(),EW=lo(),{getSystemSchemaPath:hW,getSchemaPath:mW}=ve(),pW=mi(),SW=kl(),Um=xl(),TW=G(),RW=iI(),Pm=pW.hdb_table,aI=[];for(let e=0;e<Pm.attributes.length;e++)aI.push(Pm.attributes[e].attribute);cI.exports=gW;async function gW(e,t){let r=mW(t.schema,t.table),s=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Um(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await oI.createEnvironment(r,t.table),e!==void 0){let o=await oI.openEnvironment(hW(),Dm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await EW.insertRecords(o,Pm.hash_attribute,aI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Mm(s),await Mm(n),await Mm(i)}await RW(t)}catch(o){throw o}}a(gW,"lmdbCreateTable");async function Mm(e){try{await SW(e)}catch(t){TW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mm,"createAttribute")});var _I=T((xae,lI)=>{"use strict";var AW=za(),OW=ec(),NW=o_(),fc=b(),bW=lo().updateRecords,yW=Ue(),{getSchemaPath:IW}=ve(),wW=oc(),CW=G();lI.exports=LW;async function LW(e){try{let{schema_table:t,attributes:r}=AW(e);OW(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 NW(e.hdb_auth_header,t,r),n=IW(e.schema,e.table),i=await yW.openEnvironment(n,e.table),o=await bW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await wW(e,o)}catch(c){CW.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(LW,"lmdbUpdateRecords")});var fI=T((Vae,dI)=>{"use strict";var DW=b().OPERATIONS_ENUM,vm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=DW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dI.exports=vm});var hI=T((Kae,EI)=>{"use strict";var Yae=fI(),UW=za(),MW=ec(),PW=o_(),Ec=b(),vW=lo().upsertRecords,BW=Ue(),{getSchemaPath:HW}=ve(),qW=oc(),FW=G(),{handleHDBError:GW,hdb_errors:xW}=j();EI.exports=kW;async function kW(e){let t;try{t=UW(e)}catch(u){throw GW(u,u.message,xW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;MW(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 PW(e.hdb_auth_header,r,s),i=HW(e.schema,e.table),o=await BW.openEnvironment(i,e.table),c=await vW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await qW(e,c)}catch(u){FW.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(kW,"lmdbUpsertRecords")});var pI=T((Qae,mI)=>{"use strict";var Bm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};mI.exports=Bm});var TI=T((Jae,SI)=>{"use strict";var Hm=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}};SI.exports=Hm});var AI=T((Zae,gI)=>{"use strict";var qm=Ue(),{getTransactionAuditStorePath:VW}=ve(),jae=pI(),hc=ze(),$W=$(),RI=TI(),YW=require("util").promisify,KW=YW(setTimeout),WW=1e4,QW=100;gI.exports=zW;async function zW(e){let t=VW(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new RI;do n=await JW(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 KW(QW);while(n.transactions_deleted>0);return i}a(zW,"deleteAuditLogsBefore");async function JW(e,t){let r=new RI;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];$W.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>WW)break}return await n,r}catch(s){throw s}}a(JW,"deleteTransactions")});var NI=T((tce,OI)=>{"use strict";var Fm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};OI.exports=Fm});var yI=T((nce,bI)=>{"use strict";var XW=vs(),jW=dc(),sce=NI(),Bs=b(),ZW=$(),Gm=Ue(),eQ=mi(),tQ=_c(),rQ=cc(),{getSchemaPath:sQ}=ve();bI.exports=nQ;async function nQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=eQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oQ(e),n=sQ(e.schema,e.table),i=await Gm.openEnvironment(n,e.table);return t===!0&&await iQ(e,i,r.hash_attribute),Gm.dropDBI(i,e.attribute),s}a(nQ,"lmdbDropAttribute");async function iQ(e,t,r){let s=Gm.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(iQ,"removeAttributeFromAllObjects");async function oQ(e){let t=new XW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await tQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(ZW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rQ(i)}a(oQ,"dropAttributeFromSystem")});var UI=T((ace,DI)=>{"use strict";var xm=Ue(),bo=ze(),oce=hr(),km=b(),II=$(),{getTransactionAuditStorePath:aQ}=ve(),cQ=Ao(),m_=To(),uQ=G();DI.exports=lQ;async function lQ(e){let t=aQ(e.schema,e.table),r=await xm.openEnvironment(t,e.table,!0),s=xm.listDBIs(r);xm.initializeDBIs(r,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wI(r,e.search_values);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,dQ(r,e.search_values,n);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _Q(r,e.search_values);default:return wI(r)}}a(lQ,"readAuditLog");function wI(e,t=[0,Date.now()]){II.isEmpty(t[0])&&(t[0]=0),II.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bo.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 m_,n))}a(wI,"searchTransactionsByTimestamp");function _Q(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[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,LI(e,i))}return Object.fromEntries(r)}a(_Q,"searchTransactionsByUsername");function dQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=cQ.equals(e,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bo.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=LI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);CI(u,"records",r,l,o),CI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(dQ,"searchTransactionsByHashValues");function CI(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 m_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new m_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(CI,"loopRecords");function LI(e,t){let r=[];try{let s=e.dbis[bo.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 m_,i);r.push(o)}}catch(i){uQ.warn(i)}return r}catch(s){throw s}}a(LI,"batchSearchTransactions")});var PI=T((_ce,MI)=>{"use strict";var{getSchemaPath:uce}=ve(),lce=Ue(),{database:fQ}=(fe(),Z(Ce));MI.exports={writeTransaction:EQ};async function EQ(e,t,r){return fQ({database:e,table:t}).transaction(r)}a(EQ,"writeTransaction")});var qI=T((fce,HI)=>{"use strict";var{getSchemaPath:vI}=ve(),BI=Ue();HI.exports={flush:hQ,resetReadTxn:mQ};async function hQ(e,t){return(await BI.openEnvironment(vI(e,t),t.toString())).flushed}a(hQ,"flush");async function mQ(e,t){try{(await BI.openEnvironment(vI(e,t),t.toString())).resetReadTxn()}catch{}}a(mQ,"resetReadTxn")});var kI=T((hce,xI)=>{"use strict";var{Readable:pQ}=require("stream"),{getDatabases:SQ}=(fe(),Z(Ce)),{readSync:TQ,openSync:RQ,createReadStream:FI}=require("fs"),{open:gQ}=require("lmdb"),GI=Dl(),AQ=Ml(),{AUDIT_STORE_OPTIONS:OQ}=(oo(),Z(OO)),{INTERNAL_DBIS_NAME:NQ,AUDIT_STORE_NAME:bQ}=ze();xI.exports=IQ;var Vm=32768,yQ=100;async function IQ(e){let t=e.database||e.schema||"data",r=SQ()[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=gQ({noSync:!0,maxDbs:AQ.MAX_DBS}),f,E=d.openDB(NQ,new GI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%yQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,F=new GI(!Q,Q);await S(I,F)}e.include_audit&&await S(bQ,Object.assign({},OQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=RQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Vm);TQ(c,_,0,Vm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:Vm}),f=new pQ.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(IQ,"getBackup")});var YI=T((pce,$I)=>{"use strict";var wQ=G(),{handleHDBError:CQ}=j(),LQ=uO(),DQ=kl(),UQ=dm(),MQ=ry(),PQ=cc(),vQ=Tm(),BQ=wy(),HQ=Hy(),qQ=_c(),FQ=Yy(),GQ=rI(),xQ=uI(),kQ=_I(),VQ=hI(),$Q=AI(),YQ=Im(),KQ=yI(),WQ=UI(),QQ=PI(),VI=qI(),zQ=kI(),$m=class extends LQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return FQ(t)}async getDataByHash(t){return await vQ(t)}async searchByHash(t){return await BQ(t)}async getDataByValue(t,r){return await HQ(t,r)}async searchByValue(t){return await qQ(t)}async createSchema(t){return await MQ(t)}async dropSchema(t){return await GQ(t)}async createTable(t,r){return await xQ(t,r)}async dropTable(t){return await YQ(t)}async createAttribute(t){return await DQ(t)}async createRecords(t){return await UQ(t)}async updateRecords(t){return await kQ(t)}async upsertRecords(t){try{return await VQ(t)}catch(r){throw CQ(r,null,null,wQ.ERR,r)}}async deleteRecords(t){return await PQ(t)}async dropAttribute(t){return await KQ(t)}async deleteAuditLogsBefore(t){return await $Q(t)}async readAuditLog(t){return await WQ(t)}writeTransaction(t,r,s){return QQ.writeTransaction(t,r,s)}flush(t,r){return VI.flush(t,r)}resetReadTxn(t,r){return VI.resetReadTxn(t,r)}getBackup(t){return zQ(t)}};$I.exports=$m});var ew={};Qe(ew,{ResourceBridge:()=>Wm});function Qm({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 WI(e,t){let r=Hs(e),s=Qm(e,r);if(!r)throw new ds.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 Hs(e){let t=e.database||e.schema||XQ,r=Es()[t];if(!r)throw(0,ds.handleHDBError)(new Error,JQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QI(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*zI(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 JI,p_,ds,XI,jI,hs,Ym,Km,ZI,JQ,XQ,jQ,ZQ,KI,Wm,tw=Te(()=>{"use strict";JI=D(YI()),p_=D(Oo()),ds=D(j());fe();XI=D(za()),jI=D(ec()),hs=D(b()),Ym=D(un()),Km=D(_s()),ZI=D($());fi();ml();({HDB_ERROR_MSGS:JQ}=ds.hdb_errors),XQ="data",jQ=1e4,ZQ=10,Wm=class extends JI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KI=this}async searchByConditions(t){let r=(0,p_.default)(t,"conditions");if(r)throw(0,ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new ds.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:Qm(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 ds.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}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(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){Hs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zm(t.schema),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,hs.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,KI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,XI.default)(t);(0,jI.default)(t,s,r.primaryKey);let n,i=Es()[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=Es()[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 QI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Es()[t.schema][t.table];if(!r.createdTimeProperty)throw new ds.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:hs.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,ZI.async_set_timeout)(ZQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%jQ===0&&await _();return u.length>0&&await _(),n?QI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,p_.default)(t,"hashes");if(r)throw r;return WI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of WI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&hs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,p_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new ds.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===hs.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:Qm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(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){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case hs.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 hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of zI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return zI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Qm,"getSelect");a(WI,"getRecords");a(Hs,"getTable");a(QI,"createDeleteResponse");a(zI,"groupRecordsInHistory")});var ls=T((Oce,rw)=>{"use strict";var{ResourceBridge:ez}=(tw(),Z(ew)),tz=X();tz.initSync();var S_;function rz(){return S_||(S_=new ez,S_)}a(rz,"getBridge");rw.exports=rz()});var ow=T((bce,iw)=>{"use strict";var sw=require("lodash"),pc=require("mathjs"),sz=require("jsonata"),nw=$();iw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sw.uniqWith(e,sw.isEqual):e,searchJSON:nz,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 nz(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(nw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),nw.isEmpty(this.__ala__.res[r])){let s=sz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(nz,"searchJSON")});var cw=T((Ice,aw)=>{"use strict";var rt=require("moment"),Jm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;aw.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(Jm),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(Jm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Jm)}});var dw=T((wce,_w)=>{"use strict";var iz=require("@turf/area"),oz=require("@turf/length"),az=require("@turf/circle"),cz=require("@turf/difference"),uz=require("@turf/distance"),lz=require("@turf/boolean-contains"),_z=require("@turf/boolean-equal"),dz=require("@turf/boolean-disjoint"),fz=require("@turf/helpers"),uw=b(),de=$();_w.exports={geoArea:Ez,geoLength:hz,geoCircle:mz,geoDifference:pz,geoDistance:lw,geoNear:Sz,geoContains:Tz,geoEqual:Rz,geoCrosses:gz,geoConvert:Az};var Xm="geo1 is required",jm="geo2 is required";function Ez(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),iz.default(e)}a(Ez,"geoArea");function hz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),oz.default(e,{units:t||"kilometers"})}a(hz,"geoLength");function mz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),az.default(e,t,{units:r||"kilometers"})}a(mz,"geoCircle");function pz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),cz(e,t)}a(pz,"geoDifference");function lw(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz.default(e,t,{units:r||"kilometers"})}a(lw,"geoDistance");function Sz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return lw(e,t,s)<=r}a(Sz,"geoNear");function Tz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),lz.default(e,t)}a(Tz,"geoContains");function Rz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),_z.default(e,t)}a(Rz,"geoEqual");function gz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!dz.default(e,t)}a(gz,"geoCrosses");function Az(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(uw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uw.GEO_CONVERSION_ENUM).join(",")}`);return fz[t](e,r)}a(Az,"geoConvert")});var T_=T((Lce,fw)=>{var wi=ow(),Ar=cw(),qs=dw();fw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ar.current_time,e.fn.extract=e.fn.EXTRACT=Ar.extract,e.fn.date=e.fn.DATE=Ar.date,e.fn.date_format=e.fn.DATE_FORMAT=Ar.date_format,e.fn.date_add=e.fn.DATE_ADD=Ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ar.date_diff,e.fn.now=e.fn.NOW=Ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ar.get_server_time,e.fn.getdate=e.fn.GETDATE=Ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=qs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qs.geoNear}});var pw=T((Dce,mw)=>{"use strict";var Tc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var Oz=T_(),Ew=require("clone"),R_=require("recursive-iterator"),re=G(),ie=$(),yo=ls(),Nz=b(),{hdb_errors:bz}=j(),{getDatabases:hw}=(fe(),Z(Ce)),yz="IS NULL",ms="There was a problem performing this search. Please check the logs and try again.";Oz(yt);var Zm=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(ms)}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(ms)}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(ms)}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(ms)}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(ms)}}_getColumns(){let t=new R_(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(Ew(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=hw()[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 R_(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 yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.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 yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.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 R_(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(Nz.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 yt.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(Ew(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(yz)>-1&&this.tables.forEach(n=>{let i={columnid:hw()[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 yo.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(ms)}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 yo.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(ms)}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 yo.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(ms)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await yo.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(ms)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.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 yt.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,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new R_(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(ms)}}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 yo.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 yt.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(bz.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 yo.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(ms)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mw.exports=Zm});var qr=T((Mce,Sw)=>{"use strict";var Iz=aO();Sw.exports={searchByConditions:Cz,searchByHash:Lz,searchByValue:Dz,search:Uz};var ep=ls(),{transformReq:tp}=$(),wz=pw();async function Cz(e){return tp(e),ep.searchByConditions(e)}a(Cz,"searchByConditions");async function Lz(e){tp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ep.searchByHash(e))r&&t.push(r);return t}a(Lz,"searchByHash");async function Dz(e){tp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ep.searchByValue(e))t.push(r);return t}a(Dz,"searchByValue");function Uz(e,t){try{let r=new Iz(e);r.validate(),new wz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Uz,"search")});var g_=T((vce,Tw)=>{"use strict";var Mz=ls();Tw.exports={writeTransaction:Pz};function Pz(e,t,r){return Mz.writeTransaction(e,t,r)}a(Pz,"writeTransaction")});var Ow=T((qce,Aw)=>{"use strict";var vz=qr(),Bz=cn(),Rw=G(),Hz=Fr(),Hce=g_(),qz=require("clone"),sp=require("alasql"),Fz=T_(),gw=require("util"),Gz=gw.promisify(Bz.getTableSchema),xz=gw.promisify(vz.search),kz=b(),rp=$();Fz(sp);Aw.exports={update:$z};var Vz="There was a problem performing this update. Please check the logs and try again.";async function $z({statement:e,hdb_user:t}){let r=await Gz(e.table.databaseid,e.table.tableid),s=Yz(e.columns);rp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=qz(n),c=rp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=sp.parse(u).statements[0],l=await xz(_),d=Kz(s,l);return Wz(o,d,t)}a($z,"update");function Yz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sp.compile(`SELECT ${r.expression.toString()} AS [${kz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Rw.error(t),new Error(Vz)}}a(Yz,"createUpdateRecord");function Kz(e,t){return rp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Kz,"buildUpdateRecords");async function Wz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Hz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Rw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Wz,"updateRecords")});var bw=T((kce,Nw)=>{var Qz=require("alasql"),zz=qr(),Jz=G(),Xz=ls(),ip=require("util"),np=$(),jz=b(),Zz=cn(),Gce=g_(),xce=Fr(),eJ="record",tJ="successfully deleted",rJ=ip.callbackify(oJ),sJ=ip.promisify(zz.search),nJ=ip.promisify(Zz.getTableSchema);Nw.exports={convertDelete:rJ};function iJ(e){return`${e.deleted_hashes.length} ${eJ}${e.deleted_hashes.length===1?"":"s"} ${tJ}`}a(iJ,"generateReturnMessage");async function oJ({statement:e,hdb_user:t}){let r=await nJ(e.table.databaseid,e.table.tableid);np.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=np.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Qz.parse(o).statements[0],u={operation:jz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await sJ(c);let _=await Xz.deleteRecords(u);return np.isEmptyOrZeroLength(_.message)&&(_.message=iJ(_)),delete _.txn_time,_}catch(_){throw Jz.error(_),_.hdb_code?_.message:_}}a(oJ,"convertDelete")});var Lw=T(($ce,Cw)=>{"use strict";var aJ=Si(),{hdb_errors:yw}=j(),{getDatabases:Iw}=(fe(),Z(Ce));Cw.exports={checkSchemaExists:ww,checkSchemaTableExists:cJ,schema_describe:aJ};async function ww(e){if(!Iw()[e])return yw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ww,"checkSchemaExists");async function cJ(e,t){let r=await ww(e);if(r)return r;if(!Iw()[e][t])return yw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(cJ,"checkSchemaTableExists")});var Rc=T((Kce,uJ)=>{uJ.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 b_={};Qe(b_,{addAnalyticsListener:()=>Oc,recordAction:()=>Or,recordActionBinary:()=>xr,setAnalyticsEnabled:()=>lJ});function lJ(e){Gw=e}function Or(e,t,r,s,n){if(!Gw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=N_.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},N_.set(i,o)}A_||_J()}function xr(e,t,r,s,n){Or(!!e,t,r,s,n)}function Oc(e){Vw.push(e)}function _J(){A_=performance.now(),setTimeout(async()=>{let e=performance.now()-A_;A_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of N_){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 $w){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 Yw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of Vw)n(t);N_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:kw,report:r}):Qw({report:r})},xw).unref()}async function dJ(e,t=6e4){let r=cp(),s=Kw(),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:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=F+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let gt=te[Pe];typeof gt=="number"&&(se[Pe]=(se[Pe]*Pt+gt*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[A]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await Yw()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,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,gt)=>Pe.value>gt.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of $w){let gt=A*Pe;for(;N<gt;)Q=p[Y++],N+=Q.count,Y===1&&N--;let Zr=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-Zr.value)*(N-gt)/Q.count)}let[F,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,O_.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,O_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Dw,active:E-Uw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Dw=f,Uw=E}async function Mw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function cp(){return Pw||(Pw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Kw(){return vw||(vw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function hJ(){Ww=!0;let e=(0,Ac.get)(ap.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await dJ(xw,e),await Mw(cp(),fJ),await Mw(Kw(),EJ)},Math.min(e/2,2147483647)).unref()}function Qw(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Bw+=s.mean*s.count);r.totalBytesProcessed=Bw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Hw.get(t))}),Hw.set(t,t.performance.eventLoopUtilization())),r.id=(0,O_.getNextMonotonicTime)(),cp().primaryStore.put(r.id,r),Ww||hJ(),mJ&&(zw=SJ(r))}async function SJ(e){if(await zw,!xn){let r=(0,gc.dirname)((0,Fw.getLogFilePath)());try{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await xn.stat()).size;if(t>pJ){let r=Buffer.alloc(t);await xn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await xn.write(r,{position:0}),await xn.truncate(r.length),t=r.length}await xn.write(JSON.stringify(e)+`
6
- `,t)}var Ci,qw,Fw,gc,op,O_,Ac,ap,N_,Gw,A_,xw,kw,Vw,$w,Dw,Uw,Yw,fJ,EJ,Pw,vw,Ww,Bw,Hw,mJ,zw,xn,pJ,kn=Te(()=>{Ci=require("worker_threads"),qw=D(Ze());fe();Fw=D(G()),gc=require("path"),op=require("fs/promises"),O_=D(hr()),Ac=D(X()),ap=D(b());Ur();(0,Ac.initSync)();N_=new Map,Gw=(0,Ac.get)(ap.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(lJ,"setAnalyticsEnabled");a(Or,"recordAction");ut.recordAnalytics=Or;a(xr,"recordActionBinary");A_=0,xw=1e3,kw="analytics-report",Vw=[];a(Oc,"addAnalyticsListener");$w=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_J,"sendAnalytics");a(dJ,"aggregation");Dw=0,Uw=0,Yw=a(()=>new Promise(setImmediate),"rest");a(Mw,"cleanup");fJ=36e5,EJ=31536e6;a(cp,"getRawAnalyticsTable");a(Kw,"getAnalyticsTable");(0,qw.setChildListenerByType)(kw,Qw);a(hJ,"startScheduledTasks");Bw=0,Hw=new Map,mJ=!1;a(Qw,"recordAnalytics");pJ=1e6;a(SJ,"logAnalytics")});var _t=T((oue,EC)=>{"use strict";var It=X();It.initSync();var TJ=require("fs-extra"),RJ=require("semver"),yc=require("path"),{monotonicFactory:gJ}=require("ulidx"),Xw=gJ(),AJ=require("util"),jw=require("child_process"),OJ=AJ.promisify(jw.exec),NJ=jw.spawn,ge=ke(),Oe=b(),dp=$(),kr=G(),y_=an(),bJ=g_(),Nc=Er(),{onMessageByType:yJ}=Ze(),{isMainThread:IJ}=require("worker_threads"),{Encoder:wJ,decode:fp}=require("msgpackr"),Zw=new wJ,{isEmpty:Li}=dp,eC=Gr(),CJ=48*36e11,LJ=5e9;IJ&&yJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{ps=void 0,Co=void 0});var{connect:DJ,StorageType:tC,RetentionPolicy:rC,AckPolicy:I_,DeliverPolicy:w_,DiscardPolicy:UJ,NatsConnection:rue,JetStreamManager:sue,JetStreamClient:nue,StringCodec:iue,JSONCodec:MJ,createInbox:Ep,headers:PJ,ErrorCode:Jw}=require("nats"),{PACKAGE_ROOT:vJ}=b(),BJ=Rc(),{recordAction:HJ}=(kn(),Z(b_)),sC=MJ(),qJ="clustering",FJ=BJ.engines[ge.NATS_SERVER_NAME],GJ=yc.join(vJ,"dependencies"),_p=yc.join(GJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),up,lp,bc,Io,wo;EC.exports={runCommand:nC,checkNATSServerInstalled:xJ,createConnection:hp,getConnection:C_,getJetStreamManager:Ic,getJetStream:iC,getNATSReferences:Xt,getServerList:VJ,createLocalStream:mp,listStreams:oC,deleteLocalStream:$J,getServerConfig:wc,listRemoteStreams:YJ,viewStream:KJ,viewStreamIterator:WJ,publishToStream:QJ,createWorkQueueStream:zJ,addSourceToWorkStream:cC,request:XJ,removeSourceFromWorkStream:lC,reloadNATS:pp,reloadNATSHub:jJ,reloadNATSLeaf:ZJ,extractServerName:uC,requestErrorHandler:e2,updateWorkStream:t2,createLocalTableStream:dC,createTableStreams:r2,purgeTableStream:fC,purgeSchemaTableStreams:s2,getStreamInfo:n2,updateLocalStreams:o2,closeConnection:kJ,getJsmServerName:Cc,addNatsMsgHeader:aC,updateIngestStreamConsumer:JJ};async function nC(e,t=void 0){let{stdout:r,stderr:s}=await OJ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var JB=Object.create;var Ta=Object.defineProperty;var XB=Object.getOwnPropertyDescriptor;var jB=Object.getOwnPropertyNames;var ZB=Object.getPrototypeOf,eH=Object.prototype.hasOwnProperty;var a=(e,t)=>Ta(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),Qe=(e,t)=>{for(var r in t)Ta(e,r,{get:t[r],enumerable:!0})},eg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of jB(t))!eH.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=XB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?JB(ZB(e)):{},eg(t||!e||!e.__esModule?Ta(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>eg(Ta({},"__esModule",{value:!0}),e);var sg=T((fse,rg)=>{var tH=require("fast-glob"),{statSync:eE,existsSync:tE,readFileSync:rH,writeFileSync:sH}=require("fs"),{spawnSync:nH,spawn:iH,execFileSync:dse}=require("child_process"),{isMainThread:oH}=require("worker_threads"),{join:Ln,relative:tg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:aH,platform:cH}=require("os");require("source-map-support").install();var uH=["resources","server","dataLayer","components"],Ra="ts-build",rE,lH=__filename.endsWith("tsBuild.js");if(lH){if(oH){let r;try{eE(Ln(ts,Ra)),r=!0}catch{}if(r)for(let s of tH.sync(uH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=eE(Ln(ts,s)).mtimeMs-5e3,i=eE(Ln(ts,Ra,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."),rE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),rE=!0;if(rE){let s=Ln(ts,"node_modules/.bin/tsc");cH()==="win32"&&(s+=".cmd");let n=nH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Ln(aH(),"harperdb-tsc.pid"),o;if(tE(i))try{process.kill(+rH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=iH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});sH(i,c.pid.toString()),c.unref()}}}}let e=rg.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=tg(ts,s[0]),o;i.startsWith(Ra)?o=Ln(ts,tg(Ra,i)):o=Ln(ts,Ra,i);let c=Ln(o,r),u=c+".js";if(tE(u))return u;if(c.includes(".")&&tE(c))return c}return t(r,s,n)}}});var b=T((mse,pg)=>{"use strict";var Ur=require("path"),_H=require("fs"),{relative:Ese,join:hse}=Ur,{existsSync:dH}=_H;function fH(){let e=__dirname;for(;!dH(Ur.join(e,"package.json"));){let t=Ur.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fH,"getHDBPackageRoot");var Dn=fH(),ng="js",Ku=ng,EH="harperdb-config.yaml",hH="defaultConfig.yaml",mH="hdb",ig=`harperdb.${Ku}`,og=`customFunctionsServer.${Ku}`,pH=`restartHdb.${Ku}`,nE="HarperDB",Yu="Custom Functions",Wu="Clustering Hub",Qu="Clustering Leaf",SH="Clustering Ingest Service",TH="Clustering Reply Service",RH="foreground.pid",gH="hdb.pid",AH="data",OH={HDB:nE,CLUSTERING_HUB:Wu,CLUSTERING_LEAF:Qu,CLUSTERING_INGEST_SERVICE:SH,CLUSTERING_REPLY_SERVICE:TH,CUSTOM_FUNCTIONS:Yu,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"},NH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yH={harperdb:nE,"clustering hub":Wu,"clustering leaf":Qu,"custom functions":Yu,custom_functions:Yu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},IH={CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu},sE={HDB:Ur.join(Dn,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Dn,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Dn,"server/nats"),CLUSTERING_LEAF:Ur.join(Dn,"server/nats")},wH={HDB:Ur.join(sE.HDB,ig),CUSTOM_FUNCTIONS:Ur.join(sE.CUSTOM_FUNCTIONS,og)},CH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Dn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Dn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Dn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},LH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ag="support@harperdb.io",DH="customer-success@harperdb.io",cg=1,UH=4141,ug="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",MH="https://www.harperdb.io/product",PH=`For support, please submit a request at ${ug} or contact ${ag}`,lg=`For license support, please contact ${DH}`,vH="None of the specified records were found.",BH="hash attribute not found",HH=`Your current license only supports ${cg} role. ${lg}`,qH="Your current license only supports 3 connections to a node.",FH="127.0.0.1",GH=1,xH=/^\.$/,kH=/^\.\.$/,VH="U+002E",$H=/\//g,YH="U+002F",KH=/U\+002F/g,WH=/^U\+002E$/,QH=/^U\+002EU\+002E$/,zH="d",JH=999999,XH="*",jH="--max-old-space-size=",ZH="system",eq="__hdb_hash",tq=".harperdb",rq=".hdb",sq="keys",nq="hdb_boot_properties.file",iq=".updateConfig.json",oq="SIGTSTP",aq=24,cq=6e4,uq=448,lq="blob",_q="trash",dq="database",fq="schema",Eq="transactions",hq=".count",mq="id",pq="PROCESS_NAME",_g={SETTINGS_PATH_KEY:"settings_path"},dg=require("lodash"),Sq={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Tq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Rq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},Aq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},_r="hdb_internal:",Oq={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},Nq={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"},bq="060493.ks",yq=".license",Iq={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"},wq={CSV:".csv",JSON:".json"},Cq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Lq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ga={};ga[J.INSERT]=J.INSERT;ga[J.UPDATE]=J.UPDATE;ga[J.UPSERT]=J.UPSERT;ga[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 Dq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Uq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fg={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"},Mq=dg.invert(fg),Pq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},O={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"},Eg={settings_path:_g.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];Eg[t.toLowerCase()]=t}var vq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Bq={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"},Hq={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},qq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Fq={VERSION_DEFAULT:"2.2.0"},Gq={DEVELOPMENT:8192,DEFAULT:512},xq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},kq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Vq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$q=Symbol("metadata"),Yq="__clustering__",Kq=Object.values(hg),Wq=15984864e5,mg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qq=dg.invert(mg),zq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Jq=111,Xq=`\r
2
+ `,jq={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Zq=["*","%"],eF="unauthorized_access",tF="func_val",rF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},sF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},nF={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"},iF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},oF={HTTP:"http"},aF={STOPPED:"stopped",ONLINE:"online"},cF="3.x.x",uF={SUCCESS:"success",FAILURE:"failure"},lF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:ag,HDB_SUPPORT_URL:ug,HDB_PRICING_URL:MH,SUPPORT_HELP_MSG:PH,LICENSE_HELP_MSG:lg,HDB_PROC_NAME:ig,HDB_PROC_DESCRIPTOR:nE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu,CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,SYSTEM_SCHEMA_NAME:ZH,HASH_FOLDER_NAME:eq,HDB_HOME_DIR_NAME:tq,UPDATE_FILE_NAME:iq,LICENSE_KEY_DIR_NAME:sq,BOOT_PROPS_FILE_NAME:nq,JOB_TYPE_ENUM:Bq,JOB_STATUS_ENUM:Iq,SYSTEM_TABLE_NAMES:gq,SYSTEM_TABLE_HASH_ATTRIBUTES:Aq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:wq,S3_BUCKET_AUTH_KEYS:Cq,VALID_SQL_OPS_ENUM:Lq,GEO_CONVERSION_ENUM:Uq,HDB_SETTINGS_NAMES:fg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Mq,SERVICE_ACTIONS_ENUM:Dq,CLUSTER_MESSAGE_TYPE_ENUM:Hq,CLUSTER_CONNECTION_DIRECTION_ENUM:qq,CLUSTER_EVENTS_DEFS_ENUM:xq,PERIOD_REGEX:xH,DOUBLE_PERIOD_REGEX:kH,UNICODE_PERIOD:VH,FORWARD_SLASH_REGEX:$H,UNICODE_FORWARD_SLASH:YH,ESCAPED_FORWARD_SLASH_REGEX:KH,ESCAPED_PERIOD_REGEX:WH,ESCAPED_DOUBLE_PERIOD_REGEX:QH,REG_KEY_FILE_NAME:bq,RESTART_TIMEOUT_MS:cq,HDB_FILE_PERMISSIONS:uq,DATABASES_DIR_NAME:dq,LEGACY_DATABASES_DIR_NAME:fq,TRANSACTIONS_DIR_NAME:Eq,LIMIT_COUNT_NAME:hq,ID_ATTRIBUTE_STRING:mq,INSERT_MODULE_ENUM:Tq,UPGRADE_JSON_FIELD_NAMES_ENUM:Rq,RESTART_CODE:oq,RESTART_CODE_NUM:aq,CLUSTER_OPERATIONS:ga,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Nq,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:Oq,CLUSTERING_MESSAGE_TYPES:zq,HDB_FILE_SUFFIX:rq,BLOB_FOLDER_NAME:lq,HDB_TRASH_DIR:_q,ORIGINATOR_SET_VALUE:Jq,LICENSE_VALUES:Fq,RAM_ALLOCATION_ENUM:Gq,TIME_STAMP_NAMES_ENUM:hg,TIME_STAMP_NAMES:Kq,PERMS_UPDATE_RELEASE_TIMESTAMP:Wq,SEARCH_NOT_FOUND_MESSAGE:vH,SEARCH_ATTRIBUTE_NOT_FOUND:BH,LICENSE_ROLE_DENIED_RESPONSE:HH,LICENSE_MAX_CONNS_REACHED:qH,BASIC_LICENSE_MAX_NON_CU_ROLES:cg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:UH,VALUE_SEARCH_COMPARATORS:mg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Qq,LICENSE_FILE_NAME:yq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:kq,NEW_LINE:Xq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:GH,MOMENT_DAYS_TAG:zH,API_TURNOVER_SEC:JH,LOOPBACK:FH,CODE_EXTENSION:Ku,WILDCARD_SEARCH_VALUE:XH,NODE_ERROR_CODES:Vq,JAVASCRIPT_EXTENSION:ng,PERMS_CRUD_ENUM:jq,UNAUTHORIZED_PERMISSION_NAME:eF,SEARCH_WILDCARDS:Zq,FUNC_VAL:tF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:rF,JWT_ENUM:sF,CLUSTERING_FLAG:Yq,ITC_EVENT_TYPES:nF,CUSTOM_FUNCTION_PROC_NAME:og,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Yu,SERVICES:iF,THREAD_TYPES:oF,MEM_SETTING_KEY:jH,HDB_RESTART_SCRIPT:pH,PROCESS_DESCRIPTORS:OH,SERVICE_SERVERS:wH,SERVICE_SERVERS_CWD:sE,PROCESS_DESCRIPTORS_VALIDATE:yH,LAUNCH_SERVICE_SCRIPTS:CH,LOG_LEVELS:bH,PROCESS_NAME_ENV_PROP:pq,LOG_NAMES:NH,PM2_PROCESS_STATUSES:aF,CONFIG_PARAM_MAP:Eg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:EH,HDB_DEFAULT_CONFIG_FILE:hH,ROLE_TYPES_ENUM:LH,BOOT_PROP_PARAMS:_g,INSTALL_PROMPTS:Sq,HDB_ROOT_DIR_NAME:mH,CLUSTERING_PROCESSES:IH,FOREGROUND_PID_FILE:RH,PACKAGE_ROOT:Dn,PRE_4_0_0_VERSION:cF,DATABASES_PARAM_CONFIG:vq,METADATA_PROPERTY:$q,AUTH_AUDIT_STATUS:uF,AUTH_AUDIT_TYPES:lF,HDB_PID_FILE:gH,DEFAULT_DATABASE_NAME:AH,LEGACY_CONFIG_PARAMS:Pq};sg()});var iE=T((Sse,Rg)=>{"use strict";var Sg=require("minimist");Rg.exports=_F;function _F(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Tg(process.env),s=Tg(Sg(process.argv))):(r=process.env,s=Sg(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 Tg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Tg,"objKeysToLowerCase")});var G=T((Rse,dE)=>{"use strict";var ai=require("fs-extra"),{workerData:dF,threadId:fF}=require("worker_threads"),Zs=require("path"),Og=require("yaml"),Ng=require("properties-reader"),ct=b(),gg=iE(),EF=require("os"),{PACKAGE_ROOT:aE}=b(),{_assignPackageExport:hF}=require("../index"),Oa={};for(let e in console)Oa[e]||(Oa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},bg={STDOUT:"stdOut",STDERR:"stdErr"},mF=Zs.join(aE,"logs"),pF=Zs.join(aE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),SF=1e4,js,Is,$t,zu,Ju,Na,ji,Aa;Aa===void 0&&yg();dE.exports={notify:Cg,fatal:Lg,error:ba,warn:_E,info:Xu,debug:lE,trace:uE,setLogLevel:bF,log_level:$t,loggerWithTag:TF,suppressLogging:RF,initLogSettings:yg,setupConsoleLogging:Ig,logCustomLevel:OF,closeLogFile:cE,getLogFilePath:()=>Na,OUTPUTS:bg,AuthAuditLog:wF};hF("logger",dE.exports);function yg(e=!1){try{if(Aa===void 0||e){cE();let t=NF(),r=gg(["ROOTPATH"]);try{Aa=Ng(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ai.pathExistsSync(Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:Ju,to_file:js,to_stream:Is}=yF(r.ROOTPATH?Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Aa.get("settings_path"))),zu=ct.LOG_NAMES.HDB,Na=Zs.join(Ju,zu)}}catch(t){if(Aa=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=gg(Object.keys(ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ct.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=IF();js=js===void 0?n:js,js=Ag(js),Is=Is===void 0?i:Is,Is=Ag(Is),$t=$t===void 0?s:$t,Ju=mF,zu=ct.LOG_NAMES.INSTALL,Na=Zs.join(Ju,zu);return}throw ba("Error initializing log settings"),ba(t),t}process.env.DEV_MODE&&(Is=!0),Ig()}a(yg,"initLogSettings");var oE=!0;function Ig(){Xi("error",ba),Xi("warn",_E),Xi("log",Xu),Xi("info",Xu),Xi("debug",lE),Xi("trace",uE)}a(Ig,"setupConsoleLogging");function Xi(e,t){console[e]=function(...r){if(oE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Oa[e](...r)}}a(Xi,"logConsole");function TF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Cg),fatal:r(Lg),error:r(ba),warn:r(_E),info:r(Xu),debug:r(lE),trace:r(uE)};function r(s){return function(...n){return s(t,...n)}}}a(TF,"loggerWithTag");function RF(e){try{oE=!1,e()}finally{oE=!0}}a(RF,"suppressLogging");var gF=dF?.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||gF+"/"+fF);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 ya(e){js&&wg(e),Is&&process.stdout.write(e)}a(ya,"logStdOut");function ju(e){js&&wg(e),Is&&process.stderr.write(e)}a(ju,"logStdErr");function wg(e){AF(),ji?ai.appendFileSync(ji,e):Oa.log(e)}a(wg,"logToFile");function cE(){try{ai.closeSync(ji)}catch{}ji=null}a(cE,"closeLogFile");function AF(){if(!ji){try{if(!Na)debugger;ji=ai.openSync(Na,"a")}catch(e){Oa.error(e)}setTimeout(()=>{cE()},SF).unref()}}a(AF,"openLogFile");function Xu(...e){Yt[$t]<=Yt.info&&ya(en("info",e))}a(Xu,"info");function uE(...e){Yt[$t]<=Yt.trace&&ya(en("trace",e))}a(uE,"trace");function ba(...e){Yt[$t]<=Yt.error&&ju(en("error",e))}a(ba,"error");function lE(...e){Yt[$t]<=Yt.debug&&ya(en("debug",e))}a(lE,"debug");function Cg(...e){Yt[$t]<=Yt.notify&&ya(en("notify",e))}a(Cg,"notify");function Lg(...e){Yt[$t]<=Yt.fatal&&ju(en("fatal",e))}a(Lg,"fatal");function _E(...e){Yt[$t]<=Yt.warn&&ju(en("warn",e))}a(_E,"warn");function OF(e,t,...r){t===bg.STDERR?ju(en(e,r)):ya(en(e,r))}a(OF,"logCustomLevel");function NF(){let e;try{e=EF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Zs.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return ai.existsSync(t)||(t=Zs.join(aE,"utility/hdb_boot_properties.file")),t}a(NF,"getPropsFilePath");function bF(e){$t=e}a(bF,"setLogLevel");function Ag(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ag,"autoCastBoolean");function yF(e){try{if(e.includes("config/settings.js")){let o=Ng(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Zs.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Og.parseDocument(ai.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===ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(yF,"getLogConfig");function IF(){try{let e=Og.parseDocument(ai.readFileSync(pF,"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(IF,"getDefaultConfig");function wF(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(wF,"AuthAuditLog")});var Ug=T((Ase,Dg)=>{"use strict";var CF=require("util"),LF=require("path"),DF=require("child_process"),UF=CF.promisify(DF.execFile),MF=1e3*1e3*10;Dg.exports={findPs:PF};async function PF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await UF("ps",["wwxo",`pid,${r}`],{maxBuffer:MF});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:LF.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(PF,"findPs")});var ze=T((Nse,Pg)=>{"use strict";var vF="__dbis__",BF="__txns__",HF="__environment_name__",qF="__dbi_defintion__",FF={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"},GF=["__createdtime__","__updatedtime__"],xF="\uFFFF",Mg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kF=Object.values(Mg);Pg.exports={AUDIT_STORE_NAME:BF,INTERNAL_DBIS_NAME:vF,DBI_DEFINITION_NAME:qF,SEARCH_TYPES:FF,TIMESTAMP_NAMES:GF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HF,TRANSACTIONS_DBI_NAMES_ENUM:Mg,TRANSACTIONS_DBIS:kF,OVERFLOW_MARKER:xF}});var dr=T((bse,Vg)=>{"use strict";var vg=b(),Bg=ze(),Hg={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},qg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:qg("There was an error processing your request."),400:"Invalid request"},VF=Fg[Hg.INTERNAL_SERVER_ERROR],$F={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.`},YF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KF={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"},WF={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 ${Bg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Bg.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"},QF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vg.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 ${vg.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"},Gg={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"},zF={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."},JF={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`},XF={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"},jF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ZF={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`},xg={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.`},kg={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}`},eG={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."},tG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},rG={...Gg,...KF,...$F,...zF,...JF,...XF,...jF,...ZF,...QF,...xg,...kg,...eG,...tG,...YF};Vg.exports={CHECK_LOGS_WRAPPER:qg,HDB_ERROR_MSGS:rG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:VF,HTTP_STATUS_CODES:Hg,LMDB_ERRORS_ENUM:WF,AUTHENTICATION_ERROR_MSGS:Gg,VALIDATION_ERROR_MSGS:xg,ITC_ERRORS:kg}});var j=T((Ise,Kg)=>{"use strict";var Zi=dr(),sG=G(),nG=b(),Zu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$g),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.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&&sG[n](i)}},fE=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}},EE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $g(e,t,r,s=nG.LOG_LEVELS.ERROR,n=null,i=!1){if(Yg(e))return e;let o=new Zu(e,t,r,s,n);return i&&delete o.stack,o}a($g,"handleHDBError");function Yg(e){return e.__proto__.constructor.name===Zu.name}a(Yg,"isHDBError");Kg.exports={isHDBError:Yg,handleHDBError:$g,ClientError:fE,ServerError:EE,hdb_errors:Zi}});var Qg=T((Cse,Wg)=>{"use strict";var iG={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))},oG="certificate.pem",aG="privateKey.pem",cG="ca.pem";Wg.exports={CERTIFICATE_VALUES:iG,CERTIFICATE_PEM_NAME:oG,PRIVATEKEY_PEM_NAME:aG,CA_PEM_NAME:cG}});var Fe=T((Lse,zg)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.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};zg.exports={validateObject:uG,validateObjectAsync:lG,validateBySchema:_G};function uG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(uG,"validateObject");async function lG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(lG,"validateObjectAsync");function _G(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_G,"validateBySchema")});var mE=T((Mse,eA)=>{"use strict";var Zg=require("fs-extra"),ue=require("joi"),dG=require("os"),{boolean:Ie,string:ws,number:Ot,array:hE}=ue.types(),{totalmem:Jg}=require("os"),eo=require("path"),fG=G(),tl=$(),Use=Qg(),Xg=b(),EG=Fe(),jg="log",hG="components",mG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",SG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",TG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",RG="rootPath config parameter is undefined",gG="clustering.enabled config parameter is undefined",ci=Ot.min(0).required(),rl=hE.items({host:ws.required(),port:ci}).empty(null),tn;eA.exports={configValidator:AG,routesValidator:wG,route_constraints:rl};function AG(e){if(tn=e.rootPath,tl.isEmpty(tn))throw RG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(IG),s=ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),n=ws.optional().empty(null),i=ws.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(el),c=ue.custom(NG).empty(null).default(el),u=e.clustering?.enabled;if(tl.isEmpty(u))throw gG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ci,routes:rl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ci}).required()}).required(),network:ue.object({port:ci}).required()}).required(),leafServer:ue.object({network:ue.object({port:ci,routes:rl}).required(),streams:ue.object({maxAge:Ot.min(120).allow(null).optional(),maxBytes:Ot.min(1).allow(null).optional(),maxMsgs:Ot.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:ws.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval:ws.custom(yG).optional().empty(null),maxSize:ws.custom(bG).optional().empty(null),path:ws.optional().empty(null).default(el)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:hE.optional(),headersTimeout:Ot.min(1).optional(),keepAliveTimeout:Ot.min(1).optional(),port:Ot.optional().empty(null),securePort:Ot.optional().empty(null),timeout:Ot.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ci,securePort:ci}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:hE.optional(),headersTimeout:Ot.min(1).optional(),port:Ot.min(0).optional().empty(null),securePort:Ot.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(AG,"configValidator");function OG(e){return Zg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(OG,"doesPathExist");function NG(e,t){ue.assert(e,ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=OG(e);if(r)return t.message(r)}a(NG,"validatePath");function bG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(SG):e}a(bG,"validateRotationMaxSize");function yG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TG):e}a(yG,"validateRotationInterval");function IG(e,t){let r=t.state.path.join("."),s=dG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jg();return i=Math.round(Math.min(i,Jg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),fG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(IG,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(tn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(tn,hG);case"logging.root":return eo.join(tn,jg);case"clustering.leafServer.streams.path":return eo.join(tn,"clustering","leaf");case"storage.path":let s=eo.join(tn,Xg.LEGACY_DATABASES_DIR_NAME);return Zg.existsSync(s)?s:eo.join(tn,Xg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(tn,jg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function wG(e){let t=ue.object({routes:rl});return EG.validateBySchema({routes:e},t)}a(wG,"routesValidator")});var to={};Qe(to,{server:()=>ut});var tA,ut,Mr=Te(()=>{tA=require("../index"),ut={};(0,tA._assignPackageExport)("server",ut)});var hr=T((Bse,lA)=>{"use strict";var Er=b(),mt=$(),lt=G(),{configValidator:CG,routesValidator:rA}=mE(),Wt=require("fs-extra"),LG=require("yaml"),rs=require("path"),DG=require("is-number"),nA=require("properties-reader"),UG=require("lodash"),{handleHDBError:MG}=j(),{HTTP_STATUS_CODES:PG,HDB_ERROR_MSGS:sl}=dr(),vse=require("minimist"),{server:vG}=(Mr(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,BG="Unable to get config value because config is uninitialized",HG="Config successfully initialized",qG="Error backing up config file",FG="Empty parameter sent to getConfigValue",iA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),GG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sA={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"},nl,_t,il;lA.exports={createConfigFile:xG,getDefaultConfig:kG,getConfigValue:aA,initConfig:SE,flattenConfig:ro,updateConfigValue:cA,updateConfigObject:$G,getConfiguration:WG,setConfiguration:QG,readConfigFile:RE,getClusteringRoutes:zG,initOldConfig:uA,getConfigFromFile:JG,getConfigFilePath:ui,addConfig:XG,deleteConfigFromFile:jG,getConfigObj:ZG};function xG(e){let t=Un(iA);nl=ro(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===fr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=pE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&oA(t,r),TE(t);let s=t.toJSON();_t=ro(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(xG,"createConfigFile");function oA(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(Ia.TABLES))for(let i in s[n][Ia.TABLES])for(let o in s[n][Ia.TABLES][i]){let c=s[n][Ia.TABLES][i][o],u=[fr.DATABASES,n,Ia.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=[fr.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(oA,"setSchemasConfig");function kG(e){if(nl===void 0){let r=Un(iA);nl=ro(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(kG,"getDefaultConfig");function aA(e){if(e==null){lt.error(FG);return}if(_t===void 0){lt.trace(BG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(aA,"getConfigValue");function ui(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):nA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ui,"getConfigFilePath");function SE(e=!1){if(_t===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.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{uA(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Un(r)}catch(i){if(i.code===Er.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}`)}VG(s,r),TE(s);let n=s.toJSON();if(vG.config=n,_t=ro(n),_t.logging_rotation_rotate)for(let i in sA)_t[i]&&lt.error(`Config ${sA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(HG)}}a(SE,"initConfig");function VG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],rs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],rs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],rs.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"),Wt.writeFileSync(t,String(e)))}a(VG,"checkForUpdatedConfig");function TE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=CG(t);if(r.error)throw sl.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(TE,"validateConfig");function $G(e,t){_t===void 0&&(_t={});let r=ss[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($G,"updateConfigObject");function cA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&SE();let o=aA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Un(c),_;if(r===void 0&&e.toLowerCase()===fr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=pE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===fr.HTTP_SECUREPORT&&r[f]===_t[fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===fr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Er.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=pE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&oA(u,_),TE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&YG(c,l),Wt.writeFileSync(d,String(u)),n&&(_t=ro(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cA,"updateConfigValue");function YG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(qG),lt.error(r)}}a(YG,"backupConfigFile");var KG=["databases"];function ro(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)),il=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])&&!KG.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;!fr[u.toUpperCase()]&&ss[u]&&(n[ss[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(ro,"flattenConfig");function pE(e,t){if(e===fr.CLUSTERING_NODENAME||e===fr.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(DG(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(pE,"castConfigValue");function WG(){let e=mt.getPropsFilePath(),t=ui(e);return Un(t).toJSON()}a(WG,"getConfiguration");async function QG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cA(void 0,void 0,n,!0),GG}catch(i){throw typeof i=="string"||i instanceof String?MG(i,i,PG.BAD_REQUEST,void 0,void 0,!0):i}}a(QG,"setConfiguration");function RE(){let e=mt.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.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 Un(t).toJSON()}a(RE,"readConfigFile");function Un(e){return LG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Un,"parseYamlDoc");function zG(){let e=RE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=rA(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=rA(s);if(n)throw sl.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 sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(zG,"getClusteringRoutes");function uA(e){let t=nA(e);_t={};for(let r in ss){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ss[r].toLowerCase();n===fr.LOGGING_ROOT?_t[n]=rs.dirname(s):_t[n]=s}return _t}a(uA,"initOldConfig");function JG(e){let t=RE();return UG.get(t,e.replaceAll("_","."))}a(JG,"getConfigFromFile");async function XG(e,t){let r=Un(ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ui(),String(r))}a(XG,"addConfig");function jG(e){let t=ui(mt.getPropsFilePath()),r=Un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a(jG,"deleteConfigFromFile");function ZG(){return il||(SE(),il)}a(ZG,"getConfigObj")});var X=T((qse,fA)=>{"use strict";var gE=require("fs-extra"),ns=require("path"),_A=require("os"),ex=require("properties-reader"),wa=G(),li=$(),ee=b(),ol=hr(),tx="Error initializing environment manager",al="BOOT_PROPS_FILE_PATH",dA=!1,rx={[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},rn={};fA.exports={BOOT_PROPS_FILE_PATH:al,getHdbBasePath:sx,setHdbBasePath:nx,get:ix,initSync:ax,setProperty:he,initTestEnvironment:cx};function sx(){return rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(sx,"getHdbBasePath");function nx(e){rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nx,"setHdbBasePath");function ix(e){let t=ol.getConfigValue(e);return t===void 0?rn[e]:t}a(ix,"get");function he(e,t){rx[e]&&(rn[e]=t),ol.updateConfigObject(e,t)}a(he,"setProperty");function ox(){let e;try{e=li.getPropsFilePath(),gE.accessSync(e,gE.constants.F_OK|gE.constants.R_OK),dA=!0;let t=ex(e);return rn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),rn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rn[al]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(ox,"doesPropFileExist");function ax(e=!1){try{(dA||ox()||li.noBootFile())&&(ol.initConfig(e),rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ol.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wa.error(tx),wa.error(t),console.error(t),process.exit(1)}}a(ax,"initSync");function cx(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=ns.join(__dirname,"../../","unitTests");rn[al]=ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,_A.userInfo()?_A.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ns.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,ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,li.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,li.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,li.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,li.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,ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,li.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 ${al}. Please check your boot props and settings files`;wa.fatal(r),wa.error(t)}}a(cx,"initTestEnvironment")});var ve=T((Gse,RA)=>{"use strict";var Ma=b(),ux=$(),Qt=X(),Pa=require("path"),lx=require("minimist"),EA=require("fs-extra"),hA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Mn,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:cl}=Ma,La,Da,Ua;function mA(){if(La!==void 0)return La;if(Qt.getHdbBasePath()!==void 0)return La=Qt.get(Mn.STORAGE_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(mA,"getBaseSchemaPath");function pA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=TA(cl),Da}a(pA,"getSystemSchemaPath");function SA(){if(Ua!==void 0)return Ua;if(Qt.getHdbBasePath()!==void 0)return Ua=Qt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(SA,"getTransactionAuditStoreBasePath");function _x(e,t){let r=Qt.get(Mn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(SA(),e.toString())}a(_x,"getTransactionAuditStorePath");function TA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(mA(),e)}a(TA,"getSchemaPath");function dx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,lx(process.argv));let s=r[Mn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ux.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Qt.get(Mn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return hA.set(u,[cl,Ca.TABLES,t,Ca.PATH],_),Qt.setProperty(Mn.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return hA.set(u,[cl,Ca.PATH],l),Qt.setProperty(Mn.DATABASES,u),l}}let n=r[Mn.STORAGE_PATH.toUpperCase()];if(n){if(!EA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return EA.mkdirsSync(i),Qt.setProperty(Mn.STORAGE_PATH,n),i}return pA()}a(dx,"initSystemSchemaPaths");function fx(){La=void 0,Da=void 0,Ua=void 0}a(fx,"resetPaths");RA.exports={getBaseSchemaPath:mA,getSystemSchemaPath:pA,getTransactionAuditStorePath:_x,getTransactionAuditStoreBasePath:SA,getSchemaPath:TA,initSystemSchemaPaths:dx,resetPaths:fx}});var mr=T(($se,bA)=>{"use strict";var Ex=dr().LMDB_ERRORS_ENUM,kse=require("lmdb"),hx=ze(),Vse=require("buffer").Buffer,{OVERFLOW_MARKER:gA,MAX_SEARCH_KEY_LENGTH:ul}=hx,AA=["number","string","symbol","boolean","bigint"];function mx(e){if(e=e?.primaryStore||e,!e)throw new Error(Ex.ENV_REQUIRED)}a(mx,"validateEnv");function px(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(px,"stringifyData");function Sx(e){return e instanceof Date?e.valueOf():e}a(Sx,"convertKeyValueToWrite");function Tx(e){if(e==null)return;if(AA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+gA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+gA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Tx,"getIndexedValues");var ll=0,OA=0;function NA(){OA=Date.now()-performance.now()}a(NA,"adjustStartTime");NA();var Rx=6e4;setInterval(NA,Rx).unref();function gx(){let e=performance.now()+OA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(gx,"getNextMonotonicTime");bA.exports={validateEnv:mx,stringifyData:px,convertKeyValueToWrite:Sx,getNextMonotonicTime:gx,getIndexedValues:Tx}});var yA,is,AE,va=Te(()=>{yA=require("events"),is=class extends yA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new AE;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)}},AE=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[Bt]||(e[Bt]=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 os.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 os.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 os.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 os.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 os.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 os.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 os.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 os.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 os.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=IA(d,o);if(f)return l||(l=this[Bt]=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[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new os.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[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function IA(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[Re]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));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[Re])),Object.assign(r,e)),r||e[Re]}function Ba(e){let t;if(e[Re]&&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=Ba(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function dl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_i]||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?.[Re]===n){if(dl(i))return!0}else return!0}}else{let r=e[Bt];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[Re]===i){if(dl(n))return!0}else return!0}else return!0}}return!1}var os,Bt,_l,_i,fl,ml=Te(()=>{as();os=D(j()),Bt=Symbol("own-data");a(Pr,"getChanges");a(El,"assignTrackedAccessors");a(IA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};El(_l,{});a(hl,"collapseData");a(Ba,"deepFreeze");a(dl,"hasChanges");_i=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[_i];constructor(t){super(t)}splice(...t){return this[_i]=!0,super.splice(...t)}push(...t){return this[_i]=!0,super.push(...t)}pop(){return this[_i]=!0,super.pop()}unshift(...t){return this[_i]=!0,super.unshift(...t)}shift(){return this[_i]=!0,super.shift()}};fl.prototype.constructor=Array});function bx(){Nx=setInterval(function(){for(let e of OE)if(e.stale){let t=e[me]?.url;wA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Ox).unref()}var NE,wA,Ax,OE,di,pl,Ox,Nx,bE=Te(()=>{NE=D(mr()),wA=D(G());as();Ax=100,OE=new Set,di=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(),OE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(OE.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,NE.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 A=S();E?E.push?E.push(A):E=[E,A]:E=A}}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<Ax>>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 di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,NE.getNextMonotonicTime)())}getReadTxn(){}},Ox=3e4;a(bx,"startMonitoringTxns");bx()});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 di;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 CA,fi=Te(()=>{CA=require("../index");as();bE();a(Ge,"transaction");(0,CA._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 IE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new so.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(UA[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]=Ls.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 pt.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 so.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 so.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=wE(e);if(!S)throw new so.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:DA.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 wE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),UA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return Cs(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return Cs(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return Cs(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return Cs(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Cs(r,n=>(0,Ls.compareKeys)(n,s[0])>=0&&(0,Ls.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<=0);case"ne":return Cs(r,n=>(0,Ls.compareKeys)(n,s)!==0);default:throw new so.ClientError(`Unknown query comparator "${t}"`)}}function Cs(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 yE,r,s,n,i,o,c=LA;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=yx[_],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?Ix:LA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,pt,Ls,DA,yx,UA,LA,Ix,yE,Tl=Te(()=>{so=D(j()),pt=D(ze()),Ls=require("ordered-binary"),DA=require("lmdb"),yx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(IE,"idsForCondition");UA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(wE,"filterByType");a(Cs,"attributeComparator");LA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Ix=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");yE=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 DE={};Qe(DE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>Cx});function Cx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MA(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 LE(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=_[we]??_[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[qA]=!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 Rl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Rl(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 HA.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 CE(e){let t=e[Re];if(t){let r=e[Bt];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 PA(e){if(typeof e=="string")return t=>CE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=CE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=CE(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 vA,BA,HA,me,we,cs,qA,Re,wx,Nt,Rl,LE,as=Te(()=>{vA=require("crypto");va();BA=require("../index"),HA=D(j());ml();fi();Tl();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),qA=Symbol("save-updates"),Re=Symbol("stored-record"),wx={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[we]=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 _=PA(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[cs]){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,vA.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[we]!=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[we]!=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=PA(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[cs])return this.constructor.create(this[we],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[cs]}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&&wx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:MA(t,this)}}return MA(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(_=>_[we]===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[we],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[cs]=!0),n}subscribe(t){return new is}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new is}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[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,BA._assignPackageExport)("Resource",Nt);a(Cx,"snake_case");Rl=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(MA,"pathToId");LE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(CE,"selectFromObject");a(PA,"transformForSelect")});var ME={};Qe(ME,{loadGQLSchema:()=>Ux,start:()=>UE,startOnMainThread:()=>Dx});function UE({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 A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,I.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)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):Lx.includes(S.type)||(0,FA.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 A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,gl.dirname)(s),S.tableClass):i.set((0,gl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,gl.dirname)(s)+"/"+S.name,A.tableClass)}}}var gl,FA,Lx,Dx,Ux,GA=Te(()=>{gl=require("path");fe();FA=D(Ze()),Lx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(UE,"start");Dx=UE,Ux=UE({ensureTable:et}).handleFile});async function Al(e){return Mx?(Ha||(Ha=Px(Bx)),(await(await Ha).import(e)).namespace):import(e)}async function Px(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ha=new Compartment({console,Math,Date,fetch:vx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,kA.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:pr,databases:xe})}};let s=await(0,xA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function vx(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 Bx(){return{Resource:Nt,tables:pr}}var xA,kA,Mx,Ha,PE=Te(()=>{as();fe();xA=require("fs/promises"),kA=require("path"),Mx=!1;a(Al,"secureImport");a(Px,"getCompartment");a(vx,"secureOnlyFetch");a(Bx,"getGlobalVars")});var BE={};Qe(BE,{handleFile:()=>Hx});async function Hx(e,t,r,s){let n=new Map,i=(0,VA.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,vE.dirname)(t),o.default),c(o,(0,vE.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 VA,vE,$A=Te(()=>{VA=require("url");PE();vE=require("path");a(Hx,"handleFile")});var qE={};Qe(qE,{start:()=>qx});function qx({resources:e}){e.set("login",HE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HE,YA=Te(()=>{as();a(qx,"start");HE=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 GE=T((Ane,QA)=>{"use strict";var{Readable:Fx}=require("stream"),Gx=1e4;QA.exports={streamAsJSON(e){return new FE({value:e})}};var FE=class extends Fx{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),KA)}catch(n){yield KA(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);WA(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>Gx?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 WA(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 KA(e){return console.error(e),JSON.stringify(e.toString())}a(KA,"handleError");function WA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(WA,"when")});var aO=T((bne,oO)=>{"use strict";var xE=require("recursive-iterator"),xx=require("alasql"),kE=require("clone"),zA=$(),{handleHDBError:JA,hdb_errors:kx}=j(),{HDB_ERROR_MSGS:XA,HTTP_STATUS_CODES:jA}=kx,{getDatabases:Vx}=(fe(),Z(Ce)),$x=["DISTINCT_ARRAY"],ZA=Symbol("validateTables"),VE=Symbol("validateTable"),Nne=Symbol("getAllColumns"),eO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),tO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),$E=Symbol("validateColumn"),rO=Symbol("setColumnsForTable"),sO=Symbol("checkColumnsForAsterisk"),nO=Symbol("validateGroupBy"),iO=Symbol("hasColumns"),YE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ZA](),this[sO](),this[eO]()}[ZA](){if(this[iO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[VE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[VE](t.table)})}}[iO](){let t=!1,r=new xE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[VE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Vx();if(!r[t.databaseid])throw JA(new Error,XA.SCHEMA_NOT_FOUND(t.databaseid),jA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw JA(new Error,XA.TABLE_NOT_FOUND(t.databaseid,t.tableid),jA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=kE(n);i.table=kE(t),this.attributes.push(i)})}[Ol](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)}[sO](){let t=new xE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[rO](r.tableid)}[rO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new xx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[eO](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[nO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new xE(t),n=[];for(let{node:i,path:o}of s)!zA.isEmpty(i)&&!zA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tO](i):n.push(this[$E](i)));return n}[nO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$x.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=kE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ol](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[Ol](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`}[tO](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[$E](t)}[$E](t){let r=this[Ol](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]}};oO.exports=YE});var uO=T((Ine,cO)=>{"use strict";var KE=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")}};cO.exports=KE});var _O=T((Cne,lO)=>{"use strict";var WE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};lO.exports=WE});var OO={};Qe(OO,{AUDIT_STORE_OPTIONS:()=>gO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>Sr,setAuditRetention:()=>Yx,transactionKeyEncoder:()=>RO});function bl(e){let t=e.auditStore=e.openDB(mO.AUDIT_STORE_NAME,gO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,SO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-QE})){if((n[0]&15)===JE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},QE/10).unref())}),t}function Yx(e){clearTimeout(Fa),Fa=null,QE=e}function yl(e,t,r,s,n,i,o){let c=AO[i],u=1;s&&(s>1?no.setFloat64(0,s):Hr.set(ZE),u=9),f(0),f(t),d(r),no.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,io.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(jE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),no.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(no.setUint16(u,E|32768),u+=2):E<1056964608?(no.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,no.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new XE(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:AO[s&7],tableId:i,get recordId(){return hO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?hO(e,l,d):void 0},getValue(f){return s&zE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return jE.error("Reading audit entry error",e),{}}}function hO(e,t,r){let s=e.subarray(t,r);return(0,io.readKey)(s,0,r-t)}var io,Nl,mO,pO,SO,TO,jE,Hr,no,RO,gO,QE,Fa,zE,dO,JE,fO,EO,AO,XE,oo=Te(()=>{io=require("ordered-binary"),Nl=D(X()),mO=D(ze()),pO=D(b()),SO=D(Ze()),TO=D($());xa();jE=D(G());(0,Nl.initSync)();Hr=Buffer.alloc(1024),no=new DataView(Hr.buffer,Hr.byteOffset,1024),RO={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,io.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,io.readKey)(e,t,r)}},gO={encoding:"binary",keyEncoder:RO},QE=(0,TO.convertToMS)((0,Nl.get)(pO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(bl,"openAuditStore");a(Yx,"setAuditRetention");zE=16,dO=1,JE=2,fO=3,EO=4,AO={put:dO|zE,[dO]:"put",delete:JE,[JE]:"delete",message:fO|zE,[fO]:"message",invalidate:EO,[EO]:"invalidate"};a(yl,"createAuditEntry");a(Sr,"readAuditEntry");XE=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(hO,"readKeySafely")});var CO={};Qe(CO,{HAS_EXPIRATION:()=>ih,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Kx,METADATA:()=>ka,NO_TIMESTAMP:()=>eh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ZE,RecordEncoder:()=>nh,TIMESTAMP_ASSIGN_LAST:()=>Qx,TIMESTAMP_ASSIGN_NEW:()=>yO,TIMESTAMP_ASSIGN_PREVIOUS:()=>IO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>th,getUpdateRecord:()=>oh,handleLocalTimeForGets:()=>Ll});function wO(){return co[0]=co[0]^64,Wx.getFloat64(0)}function Ll(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];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?.[ka]>=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[ka];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=zx.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=wO())}}}}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,Ei.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ei.length;u++){let _=Ei[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ei.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function oh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?th|IO:eh:ao=u?i?.localTime?th|16384:yO|16384:eh,l>0&&(c|=ih),Cl=c,sh=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 A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=rh,A.timestampOffset=rh.start||0))}if(u){let A=_?.user?.username;if(E&&(wl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=Sr(N).previousLocalTime;return r.put(I,yl(o,t,s,Y,A,d,wl),{ifVersion:p}),S}}r.put(Ga,yl(o,t,s,i?.localTime?1:0,A,d,wl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var NO,bO,Il,Ga,ZE,Kx,ka,co,Wx,eh,yO,Qx,IO,th,ih,rh,wl,ao,Cl,sh,nh,zx,Ei,xa=Te(()=>{NO=require("msgpackr");oo();bO=D(G()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),ZE=new Uint8Array([1,1,1,1,3,64,0,0]),Kx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),Wx=new DataView(co.buffer,0,8),eh=0,yO=0,Qx=1,IO=3,th=4,ih=16,ao=0,Cl=-1,sh=0,nh=class extends NO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Cl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Cl,u=sh;c>=0&&(i+=2,Cl=-1,u&&(i+=8,sh=0));let _=rh=r.call(this,s,n|2048|i);wl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Il[4]=o,Il[5]=o>>8,_.set(Il,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=wO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ih&&(_=(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,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(wO,"getTimestamp");zx=Map.prototype.get;a(Ll,"handleLocalTimeForGets");Ei=[];setInterval(()=>{for(let e=0;e<Ei.length;e++){let t=Ei[e].deref();!t||t.isDone||t.isCommitted?Ei.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&bO.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(oh,"getUpdateRecord")});var Dl=T((vne,LO)=>{"use strict";var ch=X(),uh=b(),{RecordEncoder:Jx}=(xa(),Z(CO));ch.initSync();var Xx=ch.get(uh.CONFIG_PARAMS.STORAGE_COMPRESSION),jx=ch.get(uh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Zx=uh.UPDATES_PROPERTY,ah=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Xx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=jx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Jx},this.alwaysLazyProperty=s=>s===Zx)}};LO.exports=ah});var Ml=T((Hne,UO)=>{"use strict";var uo=X(),Va=b();uo.initSync();var ek=uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",DO=uo.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),tk=uo.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ul=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=ek,this.noFSAccess=!0,DO!==void 0&&(this.overlappingSync=DO),this.noReadAhead=tk}};UO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((Fne,kO)=>{"use strict";var _h=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Pl=mr(),vO=G(),zt=dr().LMDB_ERRORS_ENUM,vl=_O(),dh=Dl(),BO=Ml(),Pn=ze(),MO=b(),{table:rk,resetDatabases:sk}=(fe(),Z(Ce)),PO=X(),ls=Pn.INTERNAL_DBIS_NAME,HO=Pn.DBI_DEFINITION_NAME,nk="data.mdb",ik="lock.mdb",$a=".mdb",ok="-lock",lh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Pn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Pn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _h.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bl(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Bl,"pathEnvNameValidation");async function fh(e,t,r=!0){try{await us.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Tr.join(e,t+$a);return await us.access(s,us.constants.R_OK|us.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await us.access(Tr.join(e,t,nk),us.constants.R_OK|us.constants.F_OK),Tr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(fh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function ak(e,t,r=!1,s=!1){Bl(e,t);let n=Tr.basename(e);t=t.toString();let i=PO.get(MO.CONFIG_PARAMS.DATABASES);i||PO.setProperty(MO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fh(e,t,s),qO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Tr.join(e,t);await us.mkdirp(s?c:e);let u=new BO(s?c:c+$a,!1),_=_h.open(u);_.dbis=Object.create(null);let l=new dh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Eh(e,t,r);return _[Pn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ak,"createEnvironment");async function ck(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Tr.join(e,t);return rk({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ck,"copyEnvironment");async function qO(e,t,r=!1){Bl(e,t),t=t.toString();let s=Eh(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 fh(e,t),i=Tr.join(e,t+$a),o=n!=i,c=new BO(n,o),u=_h.open(c);u.dbis=Object.create(null);let _=GO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Pn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(qO,"openEnvironment");async function uk(e,t,r=!1){Bl(e,t),t=t.toString();let s=Tr.join(e,t+$a),n=await fh(e,t);if(global.lmdb_map!==void 0){let i=Eh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await FO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+ok:Tr.join(Tr.dirname(n),ik))}a(uk,"deleteEnvironment");async function FO(e){Pl.validateEnv(e);let t=e[Pn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function Eh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Eh,"getCachedEnvironmentName");function lk(e){Pl.validateEnv(e);let t=Object.create(null),r=qr(e,ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ls)try{t[s]=Object.assign(new vl,n)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(lk,"listDBIDefinitions");function GO(e){Pl.validateEnv(e);let t=[],r=qr(e,ls);for(let{key:s}of r.getRange({start:!1}))s!==ls&&t.push(s);return t}a(GO,"listDBIs");function _k(e,t){let s=qr(e,ls).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(_k,"getDBIDefinition");function xO(e,t,r,s=!r){if(Hl(e,t),t=t.toString(),t===ls)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new dh(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[HO]=c,qr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(xO,"createDBI");function qr(e,t){if(Hl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=_k(e,t):r=new vl,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new dh(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(zt.DBI_DOES_NOT_EXIST):n}return s[HO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function dk(e,t){Hl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Pn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(dk,"statDBI");async function fk(e,t){try{let r=Tr.join(e,t+$a);return(await us.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(fk,"environmentDataSize");function Ek(e,t){if(Hl(e,t),t=t.toString(),t===ls)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,ls).removeSync(t)}a(Ek,"dropDBI");function hk(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===zt.DBI_DOES_NOT_EXIST)xO(e,i,i!==t,i===t),s=!0;else throw o}}s&&sk()}a(hk,"initializeDBIs");kO.exports={openDBI:qr,openEnvironment:qO,createEnvironment:ak,listDBIs:GO,listDBIDefinitions:lk,createDBI:xO,dropDBI:Ek,statDBI:dk,deleteEnvironment:uk,initializeDBIs:hk,TransactionCursor:lh,environmentDataSize:fk,copyEnvironment:ck,closeEnvironment:FO}});var $O=T((xne,VO)=>{"use strict";var hh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};VO.exports=hh});var KO=T((Vne,YO)=>{"use strict";var mh=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}};YO.exports=mh});var QO=T((Yne,WO)=>{"use strict";var ph=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};WO.exports=ph});var lo=T((Jne,XO)=>{"use strict";var mk=Ue(),pk=$O(),Sk=KO(),Tk=QO(),Ds=mr(),Ya=dr().LMDB_ERRORS_ENUM,Rk=ze(),sn=b(),gk=$(),Ak=require("uuid"),Wne=require("lmdb"),{handleHDBError:Ok,hdb_errors:Nk}=j(),{OVERFLOW_MARKER:Qne,MAX_SEARCH_KEY_LENGTH:zne}=Rk,zO=X();zO.initSync();var ql=zO.get(sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sh=sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bk(e,t,r,s,n=Ds.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new pk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];JO(_,!0,n);let l=yk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Rh(o,c,s,i,n)}a(bk,"insertRecords");function yk(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][sn.FUNC_VAL],s[o]=c)}let u=Ds.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Fl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Fl),e.dbis[t].put(n,s,s[hi])})}a(yk,"insertRecord");function Ik(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ik,"removeSkippedRecords");function JO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ds.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sh]))&&(e[Sh]=r||Ds.getNextMonotonicTime()):delete e[Sh]}a(JO,"setTimestamps");function Th(e,t,r){r.indexOf(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mk.initializeDBIs(e,t,r)}a(Th,"initializeTransaction");async function wk(e,t,r,s,n=Ds.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new Sk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=gh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Rh(c,u,s,i,n,o)}a(wk,"updateRecords");async function Ck(e,t,r,s,n=Ds.getNextMonotonicTime()){try{Ah(e,t,r,s)}catch(u){throw Ok(u,u.message,Nk.HTTP_STATUS_CODES.BAD_REQUEST)}Th(e,t,r);let i=new Tk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;gk.isEmpty(_[t])?(l=Ak.v4(),_[t]=l):l=_[t];let d=gh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Rh(o,c,s,i,n)}a(Ck,"upsertRecords");async function Rh(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||Ds.getNextMonotonicTime(),Ik(r,i),s}a(Rh,"finalizeWrite");function gh(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(JO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])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 A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][sn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ds.getIndexedValues(A);if(I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ds.getIndexedValues(p),I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[hi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:gh(e,t,r,s,n,i,o))}a(gh,"updateUpsertRecord");function Lk(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Lk,"validateBasic");function Ah(e,t,r,s){if(Lk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(Ah,"validateWrite");function Fl(){}a(Fl,"noop");XO.exports={insertRecords:bk,updateRecords:wk,upsertRecords:Ck}});var mi=T((jne,Dk)=>{Dk.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 Us=T((Zne,eN)=>{"use strict";var ZO=$(),jO=b(),_o=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,nn=require("joi"),vn={schema_format:{pattern:_o,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Uk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required(),Mk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()),Pk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required();function vk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>vn.schema_length.maximum?`'${e}' maximum of 250 characters`:_o.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(vk,"checkValidTable");function Bk(e,t){return ZO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Bk,"validateSchemaExists");function Hk(e,t){let r=t.state.ancestors[0].schema;return ZO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Hk,"validateTableExists");function qk(e,t){return e.toLowerCase()===jO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${jO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qk,"validateSchemaName");eN.exports={common_validators:vn,schema_regex:_o,hdb_schema_table:Uk,validateSchemaExists:Bk,validateTableExists:Hk,validateSchemaName:qk,checkValidTable:vk,hdb_database:Mk,hdb_table:Pk}});var Gl=T((tie,tN)=>{var{common_validators:Ms}=Us(),Wa=Fe(),Ka="is required",tt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function Qa(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(Qa,"makeAttributesStrings");function Fk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Fk,"schema_object");function Gk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Gk,"table_object");function xk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(xk,"create_table_object");function kk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence={message:Ka},tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(kk,"attribute_object");function Vk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Vk,"describe_table");function $k(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($k,"validateTableResidence");tN.exports={schema_object:Fk,create_table_object:xk,table_object:Gk,attribute_object:kk,describe_table:Vk,validateTableResidence:$k}});var sN=T((sie,rN)=>{"use strict";var Yk=require("uuid"),Oh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Yk.v4(),this.schema_table=`${this.schema}.${this.table}`}};rN.exports=Oh});var xl=T((iie,nN)=>{"use strict";var Kk=sN(),Nh=class extends Kk{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}};nN.exports=Nh});var oN=T((aie,iN)=>{"use strict";iN.exports=Qk;var Wk="inserted";function Qk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Wk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Qk,"returnObject")});var kl=T((uie,_N)=>{"use strict";var zk=b(),bh=Ue(),Jk=lo(),{getSystemSchemaPath:Xk,getSchemaPath:jk}=ve(),Zk=mi(),eV=Gl(),tV=xl(),rV=oN(),{handleHDBError:aN,hdb_errors:uN}=j(),cN=$(),{HTTP_STATUS_CODES:sV}=uN,yh=Zk.hdb_attribute,lN=[];for(let e=0;e<yh.attributes.length;e++)lN.push(yh.attributes[e].attribute);var nV="inserted";_N.exports=iV;async function iV(e){let t=eV.attribute_object(e);if(t)throw aN(new Error,t.message,uN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aN(new Error,r,sV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cN.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 tV(e.schema,e.table,e.attribute,e.id);try{let i=await bh.openEnvironment(jk(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}`);bh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await bh.openEnvironment(Xk(),zk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Jk.insertRecords(o,yh.hash_attribute,lN,[n]);return rV(nV,c,{records:[n]},u)}catch(i){throw i}}a(iV,"lmdbCreateAttribute")});var wh=T((_ie,fN)=>{var{hdb_table:oV,hdb_database:dN}=Us(),aV=Fe(),Ih=require("joi"),cV={undefined:"undefined",null:"null"},uV=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||cV[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"),lV=Ih.object({database:dN,schema:dN,table:oV,records:Ih.array().items(Ih.object().custom(uV)).required()});fN.exports=function(e){return aV.validateBySchema(e,lV)}});var za=T((Eie,hN)=>{"use strict";var on=$(),EN=G(),fie=wh(),{getDatabases:_V}=(fe(),Z(Ce)),{ClientError:pi}=j();hN.exports=dV;function dV(e){if(on.isEmpty(e))throw new pi("invalid update parameters defined.");if(on.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(on.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=_V()[e.schema]?.[e.table];if(on.isEmpty(t))throw new pi(`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&&on.isEmptyOrZeroLength(o[r]))throw EN.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!on.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw EN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!on.isEmpty(o[r])&&o[r]!==""&&s.has(on.autoCast(o[r]))&&(o.skip=!0),s.add(on.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(dV,"insertUpdateValidate")});var Ja=T((mie,mN)=>{"use strict";var fV=b().OPERATIONS_ENUM,Ch=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=fV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};mN.exports=Ch});var ec=T((Tie,pN)=>{"use strict";var Sie=Ja(),Vl=b(),Dh=$(),Lh=G(),EV=require("uuid"),{handleHDBError:Xa,hdb_errors:hV}=j(),{HDB_ERROR_MSGS:ja,HTTP_STATUS_CODES:Za}=hV;pN.exports=mV;function mV(e,t,r){for(let n=0;n<t.length;n++)pV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];SV(i,r,e.operation)}}a(mV,"processRows");function pV(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xa(new Error,ja.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmptyOrZeroLength(e)||Dh.isEmpty(e.trim()))throw Xa(new Error,ja.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(pV,"validateAttribute");function SV(e,t,r){if(!e.hasOwnProperty(t)||Dh.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=EV.v4();return}throw Lh.error("Update transaction aborted due to record with no hash value:",e),Xa(new Error,ja.RECORD_MISSING_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Lh.error(e),Xa(new Error,ja.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Lh.error(e),Xa(new Error,ja.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(SV,"validateHash")});var TN=T((gie,SN)=>{"use strict";var Uh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};SN.exports=Uh});var AN=T((Oie,gN)=>{"use strict";var Mh=Ue(),TV=G(),RN=dr().LMDB_ERRORS_ENUM;gN.exports=RV;async function RV(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 Mh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==RN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mh.closeEnvironment(global.lmdb_map[s]),await Mh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==RN.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){TV.error(t)}}a(RV,"cleanLMDBMap")});var an=T((bie,yN)=>{"use strict";var tc=require("crypto"),gV=X(),{CONFIG_PARAMS:AV}=b(),NN="aes-256-cbc",OV=32,NV=16,Ph=64,bN=32,bV=Ph+bN,ON=new Map;yN.exports={encrypt:yV,decrypt:IV,createNatsTableStreamName:wV};function yV(e){let t=tc.randomBytes(OV),r=tc.randomBytes(NV),s=tc.createCipheriv(NN,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(yV,"encrypt");function IV(e){let t=e.substr(0,Ph),r=e.substr(Ph,bN),s=e.substr(bV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(NN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(IV,"decrypt");function wV(e,t){let r=gV.get(AV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ON.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),ON.set(r,s)),s}a(wV,"createNatsTableStreamName")});var Si=T((wie,wN)=>{"use strict";var Iie=Fr(),$l=G(),IN=Gl(),CV=an(),Yl=$(),{handleHDBError:Kl,hdb_errors:LV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:vh}=LV,DV=X();DV.initSync();var{getDatabases:Bh}=(fe(),Z(Ce));wN.exports={describeAll:UV,describeTable:Ql,describeSchema:MV};async function UV(e){try{let t=Yl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Bh(),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 Ql({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 Ql({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){$l.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 $l.error("Got an error in describeAll"),$l.error(t),Kl(new Error,Wl.DESCRIBE_ALL_ERR)}}a(UV,"describeAll");async function Ql(e,t){Yl.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=IN.describe_table(e);if(i)throw i;let c=Bh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),vh.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=CV.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){$l.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ql,"descTable");async function MV(e){Yl.transformReq(e);let t=IN.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=Bh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yl.isEmpty(u)||u.describe){let _=await Ql({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(MV,"describeSchema")});var cn=T((Uie,MN)=>{var PV=mi(),{callbackify:LN,promisify:vV}=require("util"),{getDatabases:DN}=(fe(),Z(Ce));MN.exports={setSchemaDataToGlobal:CN,getTableSchema:BV,getSystemSchema:HV,setSchemaDataToGlobalAsync:vV(CN)};var UN=Si(),Lie=LN(UN.describeAll),Die=LN(UN.describeTable);function CN(e){global.hdb_schema=DN(),e&&e()}a(CN,"setSchemaDataToGlobal");function BV(e,t,r){let s=DN()[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(BV,"getTableSchema");function HV(){return PV}a(HV,"getSystemSchema")});var Gr=T((Pie,HN)=>{"use strict";var Jl=wh(),bt=$(),qV=require("util"),Xl=_s(),FV=cn(),PN=G(),{handleHDBError:Ti,hdb_errors:GV}=j(),{HTTP_STATUS_CODES:Ri}=GV,xV=qV.promisify(FV.getTableSchema),kV="updated",vN="inserted",BN="upserted";HN.exports={insert:$V,update:YV,upsert:KV,validation:VV,flush:WV};async function VV(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 xV(e.schema,e.table),r=Jl(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 PN.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 PN.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(VV,"validation");async function $V(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.createRecords(e);return zl(vN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a($V,"insertData");async function YV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.updateRecords(e);return bt.isEmpty(s.existing_rows)?zl(kV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(YV,"updateData");async function KV(e){if(e.operation!=="upsert")throw Ti(new Error,"invalid operation, must be upsert",Ri.INTERNAL_SERVER_ERROR);let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.upsertRecords(e);return zl(BN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(KV,"upsertData");function zl(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===vN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function WV(e){return bt.transformReq(e),Xl.flush(e.schema,e.table)}a(WV,"flush")});var qh=T((Bie,GN)=>{var QV=Fe(),Hh=require("joi"),{hdb_table:zV,hdb_database:qN}=Us(),FN={schema:qN,database:qN,table:zV},JV={date:Hh.date().iso().required()},XV={timestamp:Hh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GN.exports=function(e,t){let r=t==="timestamp"?{...FN,...XV}:{...FN,...JV},s=Hh.object(r);return QV.validateBySchema(e,s)}});var VN=T((Hie,kN)=>{var jV=Fe(),Fh=require("joi"),{hdb_table:ZV,hdb_database:xN}=Us(),e$=Fh.object({schema:xN,database:xN,table:ZV,hash_values:Fh.array().required(),ids:Fh.array()});kN.exports=function(e){return jV.validateBySchema(e,e$)}});var YN=T((qie,$N)=>{"use strict";var Gh=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}},xh=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}},kh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$N.exports={InsertObject:Gh,NoSQLSeachObject:xh,DeleteResponseObject:kh}});var Oi=T((Gie,JN)=>{"use strict";var WN=qh(),t$=VN(),gi=$(),KN=require("moment"),QN=G(),{promisify:r$,callbackify:s$}=require("util"),Ai=b(),n$=cn(),Vh=r$(n$.getTableSchema),$h=_s(),{DeleteResponseObject:i$}=YN(),{handleHDBError:Bn,hdb_errors:o$}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Hn}=o$,a$="records successfully deleted",c$=s$(zN);JN.exports={delete:c$,deleteRecord:zN,deleteFilesBefore:u$,deleteAuditLogsBefore:l$};async function u$(e){let t=WN(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),!KN(e.date,KN.ISO_8601).isValid())throw Bn(new Error,jl.INVALID_DATE,Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_DATE,!0);let s=gi.checkSchemaTableExist(e.schema,e.table);if(s)throw Bn(new Error,s,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,s,!0);let n=await $h.deleteRecordsBefore(e);if(await Vh(e.schema,e.table),QN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(u$,"deleteFilesBefore");async function l$(e){let t=WN(e,"timestamp");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),isNaN(e.timestamp))throw Bn(new Error,jl.INVALID_VALUE("Timestamp"),Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_VALUE("Timestamp"),!0);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);let s=await $h.deleteAuditLogsBefore(e);return await Vh(e.schema,e.table),QN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(l$,"deleteAuditLogsBefore");async function zN(e){e.ids&&(e.hash_values=e.ids);let t=t$(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);gi.transformReq(e);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);try{await Vh(e.schema,e.table);let s=await $h.deleteRecords(e);return gi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${a$}`),s}catch(s){if(s.message===Ai.SEARCH_NOT_FOUND_MESSAGE){let n=new i$;return n.message=Ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(zN,"deleteRecord")});var Zl=T((kie,ZN)=>{var _$=require("crypto"),XN=9;function d$(e){let t=E$(XN),r=jN(e+t);return t+r}a(d$,"createHash");function f$(e,t){let r=e.substr(0,XN),s=r+jN(t+r);return e===s}a(f$,"validateHash");function E$(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(E$,"generateSalt");function jN(e){return _$.createHash("md5").update(e).digest("hex")}a(jN,"md5");ZN.exports={hash:d$,validate:f$}});var tb=T(($ie,eb)=>{var Yh=Fe(),Ht={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 h$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Yh.validateObject(e,Ht)}a(h$,"addUserValidation");function m$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Yh.validateObject(e,Ht)}a(m$,"alterUserValidation");function p$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Yh.validateObject(e,Ht)}a(p$,"dropUserValidation");eb.exports={addUserValidation:h$,alterUserValidation:m$,dropUserValidation:p$}});var ke=T((Wie,sb)=>{"use strict";var{platform:Kie}=require("os"),S$="nats-server.zip",Kh="nats-server",T$=process.platform==="win32"?`${Kh}.exe`:Kh,Wh="HDB",R$=/^[^\s.,*>]+$/,rb="__request__",g$=a(e=>`${e}.${rb}`,"REQUEST_SUBJECT"),A$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},O$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},N$={HUB:"hub.pid",LEAF:"leaf.pid"},b$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},y$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Wh,deliver_subject:"__HDB__.WORKQUEUE"},I$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Wh,deliver_subject:"HDB.SCHEMAQUEUE"},w$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Wh,deliver_subject:"HDB.USERQUEUE"},C$={SUCCESS:"success",ERROR:"error"},L$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},D$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},U$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},M$={debug:"-D",trace:"-DVV"};sb.exports={NATS_SERVER_ZIP:S$,NATS_SERVER_NAME:Kh,NATS_BINARY_NAME:T$,PID_FILES:N$,NATS_CONFIG_FILES:O$,SERVER_SUFFIX:b$,WORK_QUEUE_CONSUMER_NAMES:y$,SCHEMA_QUEUE_CONSUMER_NAMES:I$,USER_QUEUE_CONSUMER_NAMES:w$,NATS_TERM_CONSTRAINTS_RX:R$,REQUEST_SUFFIX:rb,UPDATE_REMOTE_RESPONSE_STATUSES:C$,CLUSTER_STATUS_STATUSES:L$,REQUEST_SUBJECT:g$,SUBJECT_PREFIXES:D$,MSG_HEADERS:A$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:M$,LOG_LEVEL_HIERARCHY:U$}});var ib=T((zie,nb)=>{"use strict";var e_=b(),t_=class{static{a(this,"BaseLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Qh=class extends t_{static{a(this,"ExtendedLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};nb.exports={BaseLicense:t_,ExtendedLicense:Qh}});var rc=T((Xie,_b)=>{"use strict";var ho=require("fs-extra"),ob=Zl(),ab=require("crypto"),P$=require("moment"),v$=require("uuid").v4,qt=G(),Jh=require("path"),B$=$(),qn=b(),H$=ib().ExtendedLicense,Eo="invalid license key format",q$="061183",F$="mofi25",G$="aes-256-cbc",x$=16,k$=32,cb=X();cb.initSync();var zh;_b.exports={validateLicense:ub,generateFingerPrint:$$,licenseSearch:lb,getLicense:W$};function Xh(){return Jh.join(cb.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.LICENSE_FILE_NAME)}a(Xh,"getLicenseDirPath");function V$(){let e=Xh();return Jh.join(e,qn.LICENSE_FILE_NAME)}a(V$,"getLicenseFilePath");function jh(){let e=Xh();return Jh.join(e,qn.REG_KEY_FILE_NAME)}a(jh,"getFingerPrintFilePath");async function $$(){let e=jh();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Y$();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a($$,"generateFingerPrint");async function Y$(){let e=v$(),t=ob.hash(e),r=jh();try{await ho.mkdirp(Xh()),await ho.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(Y$,"writeFingerprint");function ub(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qn.RAM_ALLOCATION_ENUM.DEFAULT,version:qn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return qt.error("empty license key passed to validate."),r;let s=jh(),n=!1;try{n=ho.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=ho.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(F$),c=o[1];c=Buffer.concat([Buffer.from(c)],x$);let u=Buffer.concat([Buffer.from(i)],k$),_=ab.createDecipheriv(G$,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=K$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Eo),qt.error(Eo),new Error(Eo)}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(Eo),qt.error(Eo),new Error(Eo)}else r.exp_date=l;r.exp_date<P$().valueOf()&&(r.valid_date=!1),ob.validate(o[1],`${q$}${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||qt.error("Invalid licence"),r}a(ub,"validateLicense");function K$(e,t){try{let r=ab.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(K$,"checkOldLicense");function lb(){let e=new H$,t=[];try{t=ho.readFileSync(V$(),"utf-8").split(qn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(B$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ub(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){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=qn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return zh=e,e}a(lb,"licenseSearch");async function W$(){return zh||await lb(),zh}a(W$,"getLicense")});var xr=T((roe,Ib)=>{"use strict";var hb="username is required",mb="nothing to update, must supply active, role or password to update",pb="password cannot be an empty string",Sb="If role is specified, it cannot be empty.",Tb="active must be true or false";Ib.exports={addUser:rY,alterUser:sY,dropUser:iY,getSuperUser:uY,userInfo:oY,listUsers:s_,listUsersExternal:aY,setUsersToGlobal:po,findAndValidateUser:bb,getClusterUser:lY,USERNAME_REQUIRED:hb,ALTERUSER_NOTHING_TO_UPDATE:mb,EMPTY_PASSWORD:pb,EMPTY_ROLE:Sb,ACTIVE_BOOLEAN:Tb};var Rb=Gr(),Q$=Oi(),tm=Zl(),gb=tb(),Ab=Fr(),rm=un(),Rr=$(),Ob=require("validate.js"),_e=G(),{promisify:z$}=require("util"),sm=an(),db=b(),fb=ke(),J$=hr(),Zie=X(),eoe=rc(),X$=mi(),{table:toe}=(fe(),Z(Ce)),{handleHDBError:Ps,hdb_errors:j$}=j(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:Zh,HDB_ERROR_MSGS:mo}=j$,{UserEventMsg:nm}=ds(),em=require("lodash"),{server:im}=(Mr(),Z(to)),Z$=G();im.getUser=bb;var Nb={username:!0,active:!0,role:!0,password:!0},Eb=new Map,r_=Ab.searchByValue,eY=Ab.searchByHash,tY=z$(Q$.delete);async function rY(e){let t=Ob.cleanAttributes(e,Nb),r=gb.addUserValidation(t);if(r)throw Ps(new Error,r.message,vs.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 r_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ps(new Error,mo.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ps(new Error,mo.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Rb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await po()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ps(new Error,mo.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],rm.signalUserChange(new nm(process.pid)),`${c.username} successfully added`}a(rY,"addUser");async function sY(e){let t=Ob.cleanAttributes(e,Nb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(hb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(mb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(pb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Tb);let r=nY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password)),t.role==="")throw new Error(Sb);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 r_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=mo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ps(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mo.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ps(new Error,c,vs.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 Rb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await po()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return rm.signalUserChange(new nm(process.pid)),n}a(sY,"alterUser");function nY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(nY,"isClusterUser");async function iY(e){try{let t=gb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,mo.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await tY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await po()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return rm.signalUserChange(new nm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(iY,"dropUser");async function oY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=em.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await eY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(oY,"userInfo");async function aY(){let e;try{e=await s_()}catch(t){throw _e.error("Got an error listing users."),_e.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(aY,"listUsersExternal");async function s_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await r_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=em.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 r_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=em.cloneDeep(o),o.role=r[o.role],cY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Rr.errorizeMessage(e)}return null}a(s_,"listUsers");function cY(e){try{if(!e){_e.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(X$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(cY,"appendSystemTablesToRole");async function po(){try{let e=await s_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(po,"setUsersToGlobal");async function bb(e,t,r=!0){global.hdb_users||await po();let s=global.hdb_users.get(e);if(!s)throw Ps(new Error,Zh.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ps(new Error,Zh.USER_INACTIVE,vs.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(Eb.get(t)===s.password)return n;if(tm.validate(s.password,t))Eb.set(t,s.password);else throw Ps(new Error,Zh.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(bb,"findAndValidateUser");async function uY(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(uY,"getSuperUser");async function lY(){let e=await s_(),t=J$.getConfigFromFile(db.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===db.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=sm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fb.SERVER_SUFFIX.ADMIN,r}a(lY,"getClusterUser");var yb=[];im.invalidateUser=function(e){for(let t of yb)try{t(e)}catch(r){Z$.error("Error invalidating user",r)}};im.onInvalidatedUser=function(e){yb.push(e)}});var nc=T((ooe,Db)=>{"use strict";var Ni=G(),gr=b(),_Y=AN(),noe=cn(),ioe=Si(),dY=xr(),{validateEvent:wb}=ds(),sc=_s(),fY=require("process"),{resetDatabases:EY}=(fe(),Z(Ce)),hY={[gr.ITC_EVENT_TYPES.SCHEMA]:mY,[gr.ITC_EVENT_TYPES.USER]:Lb};async function mY(e){let t=wb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await _Y(e.message),await pY(e.message)}a(mY,"schemaHandler");async function pY(e){try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=EY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(pY,"syncSchemaMetadata");var Cb=[];async function Lb(e){try{try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=wb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${fY.pid} received user event:`,e),await dY.setUsersToGlobal();for(let r of Cb)r()}catch(t){Ni.error(t)}}a(Lb,"userHandler");Lb.addListener=function(e){Cb.push(e)};Db.exports=hY});var ds=T((doe,Mb)=>{"use strict";var coe=G(),om=$(),SY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:uoe,threadId:TY,isMainThread:RY,workerData:loe}=require("worker_threads"),{onMessageFromWorkers:gY,broadcast:_oe,broadcastWithAcknowledgement:AY}=Ze();Mb.exports={sendItcEvent:OY,validateEvent:Ub,SchemaEventMsg:NY,UserEventMsg:bY};var n_;gY(async(e,t)=>{n_=n_||nc(),Ub(e),n_[e.type]&&await n_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function OY(e){return!RY&&e.message&&(e.message.originator=TY),AY(e)}a(OY,"sendItcEvent");function Ub(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||om.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||om.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||om.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(SY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Ub,"validateEvent");function NY(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(NY,"SchemaEventMsg");function bY(e){this.originator=e}a(bY,"UserEventMsg")});var un=T((hoe,Hb)=>{"use strict";var Pb=b(),Eoe=$(),i_=G(),vb=TN(),So,{sendItcEvent:Bb}=ds();function yY(e){try{i_.trace("signalSchemaChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.SCHEMA,e);return So.schema(t),Bb(t)}catch(t){i_.error(t)}}a(yY,"signalSchemaChange");function IY(e){try{i_.trace("signalUserChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.USER,e);return So.user(t),Bb(t)}catch(t){i_.error(t)}}a(IY,"signalUserChange");Hb.exports={signalSchemaChange:yY,signalUserChange:IY}});var o_=T((poe,Fb)=>{"use strict";var qb=$(),wY=b(),CY=G(),LY=kl(),DY=xl(),UY=un(),{SchemaEventMsg:MY}=ds(),PY="already exists in";Fb.exports=vY;async function vY(e,t,r){if(qb.isEmptyOrZeroLength(r))return r;let s=[];qb.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 BY(e,t.schema,t.name,i)})),n}a(vY,"lmdbCheckForNewAttributes");async function BY(e,t,r,s){let n=new DY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await HY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(PY))CY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(BY,"createNewAttribute");async function HY(e){let t;return t=await LY(e),UY.signalSchemaChange(new MY(process.pid,wY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(HY,"createAttribute")});var To=T((Toe,Gb)=>{"use strict";var am=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}};Gb.exports=am});var kb=T((goe,xb)=>{"use strict";var qY=To(),FY=b().OPERATIONS_ENUM,cm=class extends qY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(FY.INSERT,r,s,n,i),this.records=t}};xb.exports=cm});var $b=T((Ooe,Vb)=>{"use strict";var GY=To(),xY=b().OPERATIONS_ENUM,um=class extends GY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(xY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Vb.exports=um});var Kb=T((boe,Yb)=>{"use strict";var kY=To(),VY=b().OPERATIONS_ENUM,lm=class extends kY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(VY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Yb.exports=lm});var Qb=T((Ioe,Wb)=>{"use strict";var $Y=To(),YY=b().OPERATIONS_ENUM,_m=class extends $Y{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(YY.DELETE,s,n,t,i),this.original_records=r}};Wb.exports=_m});var oc=T((Loe,jb)=>{"use strict";var Coe=require("path"),zb=Ue(),KY=kb(),WY=$b(),QY=Kb(),zY=Qb(),Ro=ze(),Jb=$(),{CONFIG_PARAMS:JY}=b(),Xb=X();Xb.initSync();var a_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:XY}=ve();jb.exports=jY;async function jY(e,t){if(Xb.get(JY.LOGGING_AUDITLOG)===!1)return;let r=XY(e.schema,e.table),s=await zb.openEnvironment(r,e.table,!0),n=ZY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){zb.initializeDBIs(s,Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ro.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Jb.isEmpty(n.user_name)||s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(jY,"writeTransaction");function ZY(e,t){let r=Jb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===a_.INSERT)return new KY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPDATE)return new WY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPSERT)return new QY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.DELETE)return new zY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(ZY,"createTransactionObject")});var dm=T((Moe,Zb)=>{"use strict";var e1=za(),Uoe=Ja(),ac=b(),t1=ec(),r1=lo().insertRecords,s1=Ue(),n1=G(),i1=o_(),{getSchemaPath:o1}=ve(),a1=oc();Zb.exports=c1;async function c1(e){try{let{schema_table:t,attributes:r}=e1(e);t1(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 i1(e.hdb_auth_header,t,r),n=o1(e.schema,e.table),i=await s1.openEnvironment(n,e.table),o=await r1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await a1(e,o)}catch(c){n1.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(c1,"lmdbCreateRecords")});var ry=T((voe,ty)=>{"use strict";var ey=b(),u1=dm(),l1=Ja(),_1=require("fs-extra"),{getSchemaPath:d1}=ve();ty.exports=f1;async function f1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new l1(ey.SYSTEM_SCHEMA_NAME,ey.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await u1(r),await _1.mkdirp(d1(e.schema))}a(f1,"lmdbCreateSchema")});var ny=T((Hoe,sy)=>{"use strict";var fm=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}};sy.exports=fm});var cy=T((koe,ay)=>{"use strict";var iy=Ue(),Em=mr(),hm=dr().LMDB_ERRORS_ENUM,E1=ze(),oy=G(),Foe=$(),h1=require("lmdb"),m1=ny(),p1=b(),{OVERFLOW_MARKER:Goe,MAX_SEARCH_KEY_LENGTH:xoe}=E1,S1=p1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function T1(e,t,r,s){if(Em.validateEnv(e),t===void 0)throw new Error(hm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hm.IDS_REQUIRED):new Error(hm.IDS_MUST_BE_ITERABLE);try{let n=iy.listDBIs(e);iy.initializeDBIs(e,t,n);let i=new m1,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[S1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,h1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=Em.getIndexedValues(N);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)I.remove(Y[Q],o)}catch{oy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){oy.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=Em.getNextMonotonicTime(),i}catch(n){throw n}}a(T1,"deleteRecords");ay.exports={deleteRecords:T1}});var cc=T(($oe,ly)=>{"use strict";var go=$(),R1=cy(),g1=Ue(),{getSchemaPath:A1}=ve(),O1=oc(),N1=G();ly.exports=b1;async function b1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(go.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(go.isEmptyOrZeroLength(e.hash_values)&&!go.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];go.isEmpty(u)||e.hash_values.push(u)}}if(go.isEmptyOrZeroLength(e.hash_values))return uy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(go.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=A1(e.schema,e.table),i=await g1.openEnvironment(n,e.table),o=await R1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await O1(e,o)}catch(c){N1.error(`unable to write transaction due to ${c.message}`)}return uy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(b1,"lmdbDeleteRecords");function uy(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(uy,"createDeleteResponse")});var pm=T((Woe,_y)=>{"use strict";var y1=b(),Koe=mr();function mm(e,t){let r=Object.create(null);if(t.length===1&&y1.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(mm,"parseRow");function I1(e,t,r,s){let n=mm(r,e);s.push(n)}a(I1,"searchAll");function w1(e,t,r,s){let n=mm(r,e);s[t]=n}a(w1,"searchAllToMap");function C1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(C1,"iterateDBI");function bi(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(bi,"pushResults");function L1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(L1,"endsWith");function D1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(D1,"contains");function U1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(U1,"greaterThanCompare");function M1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(M1,"greaterThanEqualCompare");function P1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(P1,"lessThanCompare");function v1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(v1,"lessThanEqualCompare");_y.exports={parseRow:mm,searchAll:I1,searchAllToMap:w1,iterateDBI:C1,endsWith:L1,contains:D1,greaterThanCompare:U1,greaterThanEqualCompare:M1,lessThanCompare:P1,lessThanEqualCompare:v1,pushResults:bi}});var Ao=T((joe,Sy)=>{"use strict";var Fn=Ue(),zoe=G(),Ar=mr(),c_=ze(),Je=dr().LMDB_ERRORS_ENUM,Joe=$(),B1=b(),u_=pm(),{parseRow:H1}=u_,Xoe=require("lmdb"),{OVERFLOW_MARKER:dy,MAX_SEARCH_KEY_LENGTH:q1}=c_;function fy(e,t,r,s=!1,n=void 0,i=void 0){return yi(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(fy,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={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?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(uc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[c_.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(yi,"setupTransaction");function Ey(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(dy)){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[c_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Ey,"getOverflowCheck");function F1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(l_(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(_=>H1(_.value,r))))}a(F1,"searchAll");function G1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);l_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of fy(e,t,t,s,n,i))o.set(c,u_.parseRow(u,r));return o}a(G1,"searchAllToMap");function x1(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fy(e,void 0,t,r,s,n),c=o.transaction,u=Ey(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(x1,"iterateDBI");function k1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(k1,"countAll");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=Ar.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(V1,"equals");function $1(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a($1,"count");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,null,r,(c,u)=>{s=Ar.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(Y1,"startsWith");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){return hy(e,t,r,s,n,i,o,!0)}a(K1,"endsWith");function hy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=Ey(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(dy)?_.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))?_[c_.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(hy,"contains");function W1(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(W1,"greaterThan");function Q1(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(Q1,"greaterThanEqual");function z1(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(z1,"lessThan");function J1(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(J1,"lessThanEqual");function X1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(X1,"between");function j1(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),r=lc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=u_.parseRow(c,r)),o}a(j1,"searchByHash");function Z1(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Z1,"checkHashExists");function eK(e,t,r,s,n=[]){return py(e,t,r,s,n),my(e,t,r,s,n).map(i=>i[1])}a(eK,"batchSearchByHash");function tK(e,t,r,s,n=[]){py(e,t,r,s,n);let i=new Map;for(let[o,c]of my(e,t,r,s,n))i.set(o,c);return i}a(tK,"batchSearchByHashToMap");function my(e,t,r,s,n=[]){return yi(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[_,u_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(my,"batchHashSearch");function py(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(py,"initializeBatchSearchByHash");function l_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(l_,"validateFetchAttributes");function Gn(e,t,r){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>q1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&B1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Sy.exports={searchAll:F1,searchAllToMap:G1,count:$1,countAll:k1,equals:V1,startsWith:Y1,endsWith:K1,contains:hy,searchByHash:j1,setGetWholeRowAttributes:lc,batchSearchByHash:eK,batchSearchByHashToMap:tK,checkHashExists:Z1,iterateDBI:x1,greaterThan:W1,greaterThanEqual:Q1,lessThan:z1,lessThanEqual:J1,between:X1}});var Oo=T((eae,Oy)=>{var Ty=require("lodash"),Ry=Fe(),Be=require("joi"),rK=$(),{hdb_schema_table:__,checkValidTable:gy,hdb_table:Ay,hdb_database:d_}=Us(),{handleHDBError:sK,hdb_errors:nK}=j(),{getDatabases:iK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:oK}=nK,aK=Be.object({database:d_,schema:d_,table:Ay,search_attribute:__,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(__).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),cK=Be.object({database:d_,schema:d_,table:Ay,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(__).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:__,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Oy.exports=function(e,t){let r=null;switch(t){case"value":r=Ry.validateBySchema(e,aK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(gy("database",e.schema)),i(gy("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=Ry.validateBySchema(e,cK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=rK.checkGlobalSchemaTable(e.schema,e.table);if(n)return sK(new Error,n,oK.NOT_FOUND);let o=iK()[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=Ty.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Ty.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 Sm=T((rae,Ny)=>{"use strict";var uK=Ue(),lK=Oo(),{getSchemaPath:_K}=ve();Ny.exports=dK;function dK(e){let t=lK(e,"hashes");if(t)throw t;let r=_K(e.schema,e.table);return uK.openEnvironment(r,e.table)}a(dK,"initialize")});var Tm=T((nae,by)=>{"use strict";var fK=Ao(),EK=Sm();by.exports=hK;async function hK(e){let t=await EK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return fK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hK,"lmdbGetDataByHash")});var No=T((oae,yy)=>{"use strict";var Rm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};yy.exports=Rm});var wy=T((uae,Iy)=>{"use strict";var cae=No(),mK=Ao(),pK=Sm();Iy.exports=SK;async function SK(e){let t=await pK(e),r=global.hdb_schema[e.schema][e.table];return mK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(SK,"lmdbSearchByHash")});var Bs=T((_ae,Cy)=>{"use strict";var gm=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}};Cy.exports=gm});var f_=T((fae,vy)=>{"use strict";var Ft=Ao(),TK=Ue(),RK=$(),ae=ze(),Ii=b(),gK=mi(),Ly=dr().LMDB_ERRORS_ENUM,{getSchemaPath:AK}=ve(),ln=Ii.SEARCH_WILDCARDS;async function OK(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=gK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Py(e,s.hash_attribute,r,t);return Uy(e,n,s.hash_attribute,r)}a(OK,"prepSearch");async function Uy(e,t,r,s){let n=AK(e.schema,e.table),i=await TK.openEnvironment(n,e.table),o=My(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(NK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Dy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Dy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.batchSearchByHash(c,r,e.get_attributes,_)}a(Uy,"executeSearch");function My(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=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.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=Ft.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=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.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=Ft.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=Ft.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=Ft.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=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(My,"searchByType");function Dy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Dy,"createMapFromIterable");function NK(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(NK,"checkToFetchMore");function Py(e,t,r,s){if(RK.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),ln.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ln[0])<0&&n.indexOf(ln[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(ln.indexOf(i)>=0&&ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(ln.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(ln[0])||n.includes(ln[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Ly.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ly.UNKNOWN_SEARCH_TYPE)}}a(Py,"createSearchTypeFromSearchObject");vy.exports={executeSearch:Uy,createSearchTypeFromSearchObject:Py,prepSearch:OK,searchByType:My}});var Hy=T((mae,By)=>{"use strict";var hae=Bs(),bK=Oo(),yK=$(),IK=b(),wK=f_();By.exports=CK;function CK(e,t){if(!yK.isEmpty(t)&&IK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=bK(e,"value");if(s)throw s;let n=!0;return wK.prepSearch(e,t,n)}a(CK,"lmdbGetDataByValue")});var _c=T((Tae,qy)=>{"use strict";var Sae=Bs(),LK=Oo(),DK=$(),UK=b(),MK=f_();qy.exports=PK;async function PK(e,t){if(!DK.isEmpty(t)&&UK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=LK(e,"value");if(s)throw s;return MK.prepSearch(e,t,!1)}a(PK,"lmdbSearchByValue")});var Gy=T((Aae,Fy)=>{"use strict";var gae=ze(),Am=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}},Om=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Nm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Am,SearchCondition:Om,SortAttribute:Nm}});var Yy=T((yae,$y)=>{"use strict";var Nae=Gy().SearchByConditionsObject,vK=Bs(),BK=Oo(),bm=Ao(),E_=ze(),{Resource:bae}=(as(),Z(DE)),Vy=f_(),HK=pm(),qK=require("lodash"),{getSchemaPath:FK}=ve(),xy=Ue(),{handleHDBError:GK,hdb_errors:xK}=j(),{HTTP_STATUS_CODES:kK}=xK,VK=1e8;$y.exports=$K;async function $K(e){let t=BK(e,"conditions");if(t)throw GK(t,t.message,kK.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=FK(e.schema,e.table),s=await xy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)xy.openDBI(s,_.search_attribute);let i=qK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===E_.SEARCH_TYPES.EQUALS?_.estimated_count=bm.count(s,_.search_attribute,_.search_value):l===E_.SEARCH_TYPES.CONTAINS||l===E_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=VK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await ky(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(Vy.filterByType),d=l.length,f=bm.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=>HK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await ky(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=bm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a($K,"lmdbSearchByConditions");async function ky(e,t,r,s){let n=new vK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===E_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Vy.searchByType(e,n,i,s).map(o=>o.value)}a(ky,"executeConditionSearch")});var dc=T((wae,Ky)=>{"use strict";var YK=b().OPERATIONS_ENUM,ym=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=YK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ky.exports=ym});var Im=T((Lae,eI)=>{"use strict";var Jy=Bs(),Xy=dc(),jy=_c(),Zy=cc(),Jt=b(),Wy=$(),Qy=Ue(),{getTransactionAuditStorePath:KK,getSchemaPath:WK}=ve(),zy=G();eI.exports=QK;async function QK(e){try{if(Wy.isEmpty(global.hdb_schema[e.schema])||Wy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await zK(e),await JK(e);let t=WK(e.schema,e.table);try{await Qy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=KK(e.schema,e.table);await Qy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(QK,"lmdbDropTable");async function zK(e){let t=new Jy(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 jy(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 Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Zy(n)}a(zK,"deleteAttributesFromSystem");async function JK(e){let t=new Jy(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 jy(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 Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Zy(n)}catch(i){throw i}}a(JK,"dropTableFromSystem")});var rI=T((Uae,tI)=>{"use strict";var XK=require("fs-extra"),jK=Bs(),ZK=No(),eW=dc(),tW=Im(),rW=cc(),sW=Tm(),nW=_c(),_n=b(),{getSchemaPath:iW}=ve(),{handleHDBError:oW,hdb_errors:aW}=j(),{HDB_ERROR_MSGS:cW,HTTP_STATUS_CODES:uW}=aW;tI.exports=lW;async function lW(e){let t;try{t=await _W(e.schema);let r=new jK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await nW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await tW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new eW(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await rW(n);let i=iW(t);await XK.remove(i)}catch(r){throw r}}a(lW,"lmdbDropSchema");async function _W(e){let t=new ZK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await sW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw oW(new Error,cW.SCHEMA_NOT_FOUND(e),uW.NOT_FOUND,void 0,void 0,!0);return s}a(_W,"validateDropSchema")});var Cm=T((Pae,sI)=>{"use strict";var wm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};sI.exports=wm});var iI=T((Hae,nI)=>{"use strict";var dW=require("fs-extra"),h_=Ue(),{getTransactionAuditStorePath:fW}=ve(),Lm=ze(),Bae=Cm();nI.exports=EW;async function EW(e){let t;try{let r=fW(e.schema,e.table);await dW.mkdirp(r),t=await h_.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{h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),h_.createDBI(t,Lm.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(EW,"createTransactionsAuditEnvironment")});var uI=T((Fae,cI)=>{"use strict";var Dm=b(),oI=Ue(),hW=lo(),{getSystemSchemaPath:mW,getSchemaPath:pW}=ve(),SW=mi(),TW=kl(),Um=xl(),RW=G(),gW=iI(),Pm=SW.hdb_table,aI=[];for(let e=0;e<Pm.attributes.length;e++)aI.push(Pm.attributes[e].attribute);cI.exports=AW;async function AW(e,t){let r=pW(t.schema,t.table),s=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Um(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await oI.createEnvironment(r,t.table),e!==void 0){let o=await oI.openEnvironment(mW(),Dm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hW.insertRecords(o,Pm.hash_attribute,aI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Mm(s),await Mm(n),await Mm(i)}await gW(t)}catch(o){throw o}}a(AW,"lmdbCreateTable");async function Mm(e){try{await TW(e)}catch(t){RW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mm,"createAttribute")});var _I=T((xae,lI)=>{"use strict";var OW=za(),NW=ec(),bW=o_(),fc=b(),yW=lo().updateRecords,IW=Ue(),{getSchemaPath:wW}=ve(),CW=oc(),LW=G();lI.exports=DW;async function DW(e){try{let{schema_table:t,attributes:r}=OW(e);NW(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 bW(e.hdb_auth_header,t,r),n=wW(e.schema,e.table),i=await IW.openEnvironment(n,e.table),o=await yW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await CW(e,o)}catch(c){LW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(DW,"lmdbUpdateRecords")});var fI=T((Vae,dI)=>{"use strict";var UW=b().OPERATIONS_ENUM,vm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=UW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dI.exports=vm});var hI=T((Kae,EI)=>{"use strict";var Yae=fI(),MW=za(),PW=ec(),vW=o_(),Ec=b(),BW=lo().upsertRecords,HW=Ue(),{getSchemaPath:qW}=ve(),FW=oc(),GW=G(),{handleHDBError:xW,hdb_errors:kW}=j();EI.exports=VW;async function VW(e){let t;try{t=MW(e)}catch(u){throw xW(u,u.message,kW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;PW(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 vW(e.hdb_auth_header,r,s),i=qW(e.schema,e.table),o=await HW.openEnvironment(i,e.table),c=await BW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await FW(e,c)}catch(u){GW.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(VW,"lmdbUpsertRecords")});var pI=T((Qae,mI)=>{"use strict";var Bm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};mI.exports=Bm});var TI=T((Jae,SI)=>{"use strict";var Hm=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}};SI.exports=Hm});var AI=T((Zae,gI)=>{"use strict";var qm=Ue(),{getTransactionAuditStorePath:$W}=ve(),jae=pI(),hc=ze(),YW=$(),RI=TI(),KW=require("util").promisify,WW=KW(setTimeout),QW=1e4,zW=100;gI.exports=JW;async function JW(e){let t=$W(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new RI;do n=await XW(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 WW(zW);while(n.transactions_deleted>0);return i}a(JW,"deleteAuditLogsBefore");async function XW(e,t){let r=new RI;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];YW.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>QW)break}return await n,r}catch(s){throw s}}a(XW,"deleteTransactions")});var NI=T((tce,OI)=>{"use strict";var Fm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};OI.exports=Fm});var yI=T((nce,bI)=>{"use strict";var jW=Bs(),ZW=dc(),sce=NI(),Hs=b(),eQ=$(),Gm=Ue(),tQ=mi(),rQ=_c(),sQ=cc(),{getSchemaPath:nQ}=ve();bI.exports=iQ;async function iQ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=tQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await aQ(e),n=nQ(e.schema,e.table),i=await Gm.openEnvironment(n,e.table);return t===!0&&await oQ(e,i,r.hash_attribute),Gm.dropDBI(i,e.attribute),s}a(iQ,"lmdbDropAttribute");async function oQ(e,t,r){let s=Gm.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(oQ,"removeAttributeFromAllObjects");async function aQ(e){let t=new jW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await rQ(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(eQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ZW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return sQ(i)}a(aQ,"dropAttributeFromSystem")});var UI=T((ace,DI)=>{"use strict";var xm=Ue(),bo=ze(),oce=mr(),km=b(),II=$(),{getTransactionAuditStorePath:cQ}=ve(),uQ=Ao(),m_=To(),lQ=G();DI.exports=_Q;async function _Q(e){let t=cQ(e.schema,e.table),r=await xm.openEnvironment(t,e.table,!0),s=xm.listDBIs(r);xm.initializeDBIs(r,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wI(r,e.search_values);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,fQ(r,e.search_values,n);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return dQ(r,e.search_values);default:return wI(r)}}a(_Q,"readAuditLog");function wI(e,t=[0,Date.now()]){II.isEmpty(t[0])&&(t[0]=0),II.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bo.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 m_,n))}a(wI,"searchTransactionsByTimestamp");function dQ(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[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,LI(e,i))}return Object.fromEntries(r)}a(dQ,"searchTransactionsByUsername");function fQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=uQ.equals(e,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bo.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=LI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);CI(u,"records",r,l,o),CI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(fQ,"searchTransactionsByHashValues");function CI(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 m_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new m_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(CI,"loopRecords");function LI(e,t){let r=[];try{let s=e.dbis[bo.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 m_,i);r.push(o)}}catch(i){lQ.warn(i)}return r}catch(s){throw s}}a(LI,"batchSearchTransactions")});var PI=T((_ce,MI)=>{"use strict";var{getSchemaPath:uce}=ve(),lce=Ue(),{database:EQ}=(fe(),Z(Ce));MI.exports={writeTransaction:hQ};async function hQ(e,t,r){return EQ({database:e,table:t}).transaction(r)}a(hQ,"writeTransaction")});var qI=T((fce,HI)=>{"use strict";var{getSchemaPath:vI}=ve(),BI=Ue();HI.exports={flush:mQ,resetReadTxn:pQ};async function mQ(e,t){return(await BI.openEnvironment(vI(e,t),t.toString())).flushed}a(mQ,"flush");async function pQ(e,t){try{(await BI.openEnvironment(vI(e,t),t.toString())).resetReadTxn()}catch{}}a(pQ,"resetReadTxn")});var kI=T((hce,xI)=>{"use strict";var{Readable:SQ}=require("stream"),{getDatabases:TQ}=(fe(),Z(Ce)),{readSync:RQ,openSync:gQ,createReadStream:FI}=require("fs"),{open:AQ}=require("lmdb"),GI=Dl(),OQ=Ml(),{AUDIT_STORE_OPTIONS:NQ}=(oo(),Z(OO)),{INTERNAL_DBIS_NAME:bQ,AUDIT_STORE_NAME:yQ}=ze();xI.exports=wQ;var Vm=32768,IQ=100;async function wQ(e){let t=e.database||e.schema||"data",r=TQ()[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=AQ({noSync:!0,maxDbs:OQ.MAX_DBS}),f,E=d.openDB(bQ,new GI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%IQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,F=new GI(!Q,Q);await S(I,F)}e.include_audit&&await S(yQ,Object.assign({},NQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=gQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Vm);RQ(c,_,0,Vm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:Vm}),f=new SQ.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(wQ,"getBackup")});var YI=T((pce,$I)=>{"use strict";var CQ=G(),{handleHDBError:LQ}=j(),DQ=uO(),UQ=kl(),MQ=dm(),PQ=ry(),vQ=cc(),BQ=Tm(),HQ=wy(),qQ=Hy(),FQ=_c(),GQ=Yy(),xQ=rI(),kQ=uI(),VQ=_I(),$Q=hI(),YQ=AI(),KQ=Im(),WQ=yI(),QQ=UI(),zQ=PI(),VI=qI(),JQ=kI(),$m=class extends DQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return GQ(t)}async getDataByHash(t){return await BQ(t)}async searchByHash(t){return await HQ(t)}async getDataByValue(t,r){return await qQ(t,r)}async searchByValue(t){return await FQ(t)}async createSchema(t){return await PQ(t)}async dropSchema(t){return await xQ(t)}async createTable(t,r){return await kQ(t,r)}async dropTable(t){return await KQ(t)}async createAttribute(t){return await UQ(t)}async createRecords(t){return await MQ(t)}async updateRecords(t){return await VQ(t)}async upsertRecords(t){try{return await $Q(t)}catch(r){throw LQ(r,null,null,CQ.ERR,r)}}async deleteRecords(t){return await vQ(t)}async dropAttribute(t){return await WQ(t)}async deleteAuditLogsBefore(t){return await YQ(t)}async readAuditLog(t){return await QQ(t)}writeTransaction(t,r,s){return zQ.writeTransaction(t,r,s)}flush(t,r){return VI.flush(t,r)}resetReadTxn(t,r){return VI.resetReadTxn(t,r)}getBackup(t){return JQ(t)}};$I.exports=$m});var ew={};Qe(ew,{ResourceBridge:()=>Wm});function Qm({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 WI(e,t){let r=qs(e),s=Qm(e,r);if(!r)throw new Es.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 qs(e){let t=e.database||e.schema||jQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,XQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QI(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*zI(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 JI,p_,Es,XI,jI,ms,Ym,Km,ZI,XQ,jQ,ZQ,ez,KI,Wm,tw=Te(()=>{"use strict";JI=D(YI()),p_=D(Oo()),Es=D(j());fe();XI=D(za()),jI=D(ec()),ms=D(b()),Ym=D(un()),Km=D(ds()),ZI=D($());fi();ml();({HDB_ERROR_MSGS:XQ}=Es.hdb_errors),jQ="data",ZQ=1e4,ez=10,Wm=class extends JI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KI=this}async searchByConditions(t){let r=(0,p_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=qs(t);if(!s)throw new Es.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:Qm(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 Es.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}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await qs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qs(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){qs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zm(t.schema),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,ms.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,KI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,XI.default)(t);(0,jI.default)(t,s,r.primaryKey);let n,i=hs()[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=hs()[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 QI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.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:ms.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,ZI.async_set_timeout)(ez),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%ZQ===0&&await _();return u.length>0&&await _(),n?QI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,p_.default)(t,"hashes");if(r)throw r;return WI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of WI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,p_.default)(t,"value");if(s)throw s;let n=qs(t);if(!n)throw new Es.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===ms.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:Qm(t,n)})}async getDataByValue(t,r){let s=new Map,n=qs(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){qs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=qs(t),s={};switch(t.search_type){case ms.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 ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of zI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return zI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Qm,"getSelect");a(WI,"getRecords");a(qs,"getTable");a(QI,"createDeleteResponse");a(zI,"groupRecordsInHistory")});var _s=T((Oce,rw)=>{"use strict";var{ResourceBridge:tz}=(tw(),Z(ew)),rz=X();rz.initSync();var S_;function sz(){return S_||(S_=new tz,S_)}a(sz,"getBridge");rw.exports=sz()});var ow=T((bce,iw)=>{"use strict";var sw=require("lodash"),pc=require("mathjs"),nz=require("jsonata"),nw=$();iw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sw.uniqWith(e,sw.isEqual):e,searchJSON:iz,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 iz(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(nw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),nw.isEmpty(this.__ala__.res[r])){let s=nz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(iz,"searchJSON")});var cw=T((Ice,aw)=>{"use strict";var rt=require("moment"),Jm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;aw.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(Jm),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(Jm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Jm)}});var dw=T((wce,_w)=>{"use strict";var oz=require("@turf/area"),az=require("@turf/length"),cz=require("@turf/circle"),uz=require("@turf/difference"),lz=require("@turf/distance"),_z=require("@turf/boolean-contains"),dz=require("@turf/boolean-equal"),fz=require("@turf/boolean-disjoint"),Ez=require("@turf/helpers"),uw=b(),de=$();_w.exports={geoArea:hz,geoLength:mz,geoCircle:pz,geoDifference:Sz,geoDistance:lw,geoNear:Tz,geoContains:Rz,geoEqual:gz,geoCrosses:Az,geoConvert:Oz};var Xm="geo1 is required",jm="geo2 is required";function hz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),oz.default(e)}a(hz,"geoArea");function mz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),az.default(e,{units:t||"kilometers"})}a(mz,"geoLength");function pz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),cz.default(e,t,{units:r||"kilometers"})}a(pz,"geoCircle");function Sz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz(e,t)}a(Sz,"geoDifference");function lw(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),lz.default(e,t,{units:r||"kilometers"})}a(lw,"geoDistance");function Tz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return lw(e,t,s)<=r}a(Tz,"geoNear");function Rz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),_z.default(e,t)}a(Rz,"geoContains");function gz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),dz.default(e,t)}a(gz,"geoEqual");function Az(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!fz.default(e,t)}a(Az,"geoCrosses");function Oz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(uw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uw.GEO_CONVERSION_ENUM).join(",")}`);return Ez[t](e,r)}a(Oz,"geoConvert")});var T_=T((Lce,fw)=>{var wi=ow(),Or=cw(),Fs=dw();fw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var pw=T((Dce,mw)=>{"use strict";var Tc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var Nz=T_(),Ew=require("clone"),R_=require("recursive-iterator"),re=G(),ie=$(),yo=_s(),bz=b(),{hdb_errors:yz}=j(),{getDatabases:hw}=(fe(),Z(Ce)),Iz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Nz(yt);var Zm=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(ps)}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(ps)}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(ps)}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(ps)}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(ps)}}_getColumns(){let t=new R_(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(Ew(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=hw()[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 R_(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 yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.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 yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.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 R_(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(bz.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 yt.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(Ew(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(Iz)>-1&&this.tables.forEach(n=>{let i={columnid:hw()[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 yo.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(ps)}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 yo.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(ps)}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 yo.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(ps)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await yo.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(ps)}}}_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 yt.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 yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.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 yt.yy.FuncValue:new yt.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 yt.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,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new R_(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(ps)}}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 yo.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 yt.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(yz.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 yo.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(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mw.exports=Zm});var Fr=T((Mce,Sw)=>{"use strict";var wz=aO();Sw.exports={searchByConditions:Lz,searchByHash:Dz,searchByValue:Uz,search:Mz};var ep=_s(),{transformReq:tp}=$(),Cz=pw();async function Lz(e){return tp(e),ep.searchByConditions(e)}a(Lz,"searchByConditions");async function Dz(e){tp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ep.searchByHash(e))r&&t.push(r);return t}a(Dz,"searchByHash");async function Uz(e){tp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ep.searchByValue(e))t.push(r);return t}a(Uz,"searchByValue");function Mz(e,t){try{let r=new wz(e);r.validate(),new Cz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Mz,"search")});var g_=T((vce,Tw)=>{"use strict";var Pz=_s();Tw.exports={writeTransaction:vz};function vz(e,t,r){return Pz.writeTransaction(e,t,r)}a(vz,"writeTransaction")});var Ow=T((qce,Aw)=>{"use strict";var Bz=Fr(),Hz=cn(),Rw=G(),qz=Gr(),Hce=g_(),Fz=require("clone"),sp=require("alasql"),Gz=T_(),gw=require("util"),xz=gw.promisify(Hz.getTableSchema),kz=gw.promisify(Bz.search),Vz=b(),rp=$();Gz(sp);Aw.exports={update:Yz};var $z="There was a problem performing this update. Please check the logs and try again.";async function Yz({statement:e,hdb_user:t}){let r=await xz(e.table.databaseid,e.table.tableid),s=Kz(e.columns);rp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Fz(n),c=rp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=sp.parse(u).statements[0],l=await kz(_),d=Wz(s,l);return Qz(o,d,t)}a(Yz,"update");function Kz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sp.compile(`SELECT ${r.expression.toString()} AS [${Vz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Rw.error(t),new Error($z)}}a(Kz,"createUpdateRecord");function Wz(e,t){return rp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Wz,"buildUpdateRecords");async function Qz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await qz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Rw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Qz,"updateRecords")});var bw=T((kce,Nw)=>{var zz=require("alasql"),Jz=Fr(),Xz=G(),jz=_s(),ip=require("util"),np=$(),Zz=b(),eJ=cn(),Gce=g_(),xce=Gr(),tJ="record",rJ="successfully deleted",sJ=ip.callbackify(aJ),nJ=ip.promisify(Jz.search),iJ=ip.promisify(eJ.getTableSchema);Nw.exports={convertDelete:sJ};function oJ(e){return`${e.deleted_hashes.length} ${tJ}${e.deleted_hashes.length===1?"":"s"} ${rJ}`}a(oJ,"generateReturnMessage");async function aJ({statement:e,hdb_user:t}){let r=await iJ(e.table.databaseid,e.table.tableid);np.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=np.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=zz.parse(o).statements[0],u={operation:Zz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await nJ(c);let _=await jz.deleteRecords(u);return np.isEmptyOrZeroLength(_.message)&&(_.message=oJ(_)),delete _.txn_time,_}catch(_){throw Xz.error(_),_.hdb_code?_.message:_}}a(aJ,"convertDelete")});var Lw=T(($ce,Cw)=>{"use strict";var cJ=Si(),{hdb_errors:yw}=j(),{getDatabases:Iw}=(fe(),Z(Ce));Cw.exports={checkSchemaExists:ww,checkSchemaTableExists:uJ,schema_describe:cJ};async function ww(e){if(!Iw()[e])return yw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ww,"checkSchemaExists");async function uJ(e,t){let r=await ww(e);if(r)return r;if(!Iw()[e][t])return yw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uJ,"checkSchemaTableExists")});var Rc=T((Kce,lJ)=>{lJ.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 b_={};Qe(b_,{addAnalyticsListener:()=>Oc,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>_J});function _J(e){Gw=e}function Nr(e,t,r,s,n){if(!Gw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=N_.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},N_.set(i,o)}A_||dJ()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Oc(e){Vw.push(e)}function dJ(){A_=performance.now(),setTimeout(async()=>{let e=performance.now()-A_;A_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of N_){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 $w){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 Yw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of Vw)n(t);N_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:kw,report:r}):Qw({report:r})},xw).unref()}async function fJ(e,t=6e4){let r=cp(),s=Kw(),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:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=F+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let Pt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*Pt+At*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[A]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await Yw()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,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 A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of $w){let At=A*Pe;for(;N<At;)Q=p[Y++],N+=Q.count,Y===1&&N--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-es.value)*(N-At)/Q.count)}let[F,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,O_.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,O_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Dw,active:E-Uw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Dw=f,Uw=E}async function Mw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function cp(){return Pw||(Pw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Kw(){return vw||(vw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function mJ(){Ww=!0;let e=(0,Ac.get)(ap.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await fJ(xw,e),await Mw(cp(),EJ),await Mw(Kw(),hJ)},Math.min(e/2,2147483647)).unref()}function Qw(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Bw+=s.mean*s.count);r.totalBytesProcessed=Bw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Hw.get(t))}),Hw.set(t,t.performance.eventLoopUtilization())),r.id=(0,O_.getNextMonotonicTime)(),cp().primaryStore.put(r.id,r),Ww||mJ(),pJ&&(zw=TJ(r))}async function TJ(e){if(await zw,!xn){let r=(0,gc.dirname)((0,Fw.getLogFilePath)());try{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await xn.stat()).size;if(t>SJ){let r=Buffer.alloc(t);await xn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await xn.write(r,{position:0}),await xn.truncate(r.length),t=r.length}await xn.write(JSON.stringify(e)+`
6
+ `,t)}var Ci,qw,Fw,gc,op,O_,Ac,ap,N_,Gw,A_,xw,kw,Vw,$w,Dw,Uw,Yw,EJ,hJ,Pw,vw,Ww,Bw,Hw,pJ,zw,xn,SJ,kn=Te(()=>{Ci=require("worker_threads"),qw=D(Ze());fe();Fw=D(G()),gc=require("path"),op=require("fs/promises"),O_=D(mr()),Ac=D(X()),ap=D(b());Mr();(0,Ac.initSync)();N_=new Map,Gw=(0,Ac.get)(ap.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(_J,"setAnalyticsEnabled");a(Nr,"recordAction");ut.recordAnalytics=Nr;a(kr,"recordActionBinary");A_=0,xw=1e3,kw="analytics-report",Vw=[];a(Oc,"addAnalyticsListener");$w=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(dJ,"sendAnalytics");a(fJ,"aggregation");Dw=0,Uw=0,Yw=a(()=>new Promise(setImmediate),"rest");a(Mw,"cleanup");EJ=36e5,hJ=31536e6;a(cp,"getRawAnalyticsTable");a(Kw,"getAnalyticsTable");(0,qw.setChildListenerByType)(kw,Qw);a(mJ,"startScheduledTasks");Bw=0,Hw=new Map,pJ=!1;a(Qw,"recordAnalytics");SJ=1e6;a(TJ,"logAnalytics")});var dt=T((oue,EC)=>{"use strict";var It=X();It.initSync();var RJ=require("fs-extra"),gJ=require("semver"),yc=require("path"),{monotonicFactory:AJ}=require("ulidx"),Xw=AJ(),OJ=require("util"),jw=require("child_process"),NJ=OJ.promisify(jw.exec),bJ=jw.spawn,ge=ke(),Oe=b(),dp=$(),Vr=G(),y_=an(),yJ=g_(),Nc=hr(),{onMessageByType:IJ}=Ze(),{isMainThread:wJ}=require("worker_threads"),{Encoder:CJ,decode:fp}=require("msgpackr"),Zw=new CJ,{isEmpty:Li}=dp,eC=xr(),LJ=48*36e11,DJ=5e9;wJ&&IJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Co=void 0});var{connect:UJ,StorageType:tC,RetentionPolicy:rC,AckPolicy:I_,DeliverPolicy:w_,DiscardPolicy:MJ,NatsConnection:rue,JetStreamManager:sue,JetStreamClient:nue,StringCodec:iue,JSONCodec:PJ,createInbox:Ep,headers:vJ,ErrorCode:Jw}=require("nats"),{PACKAGE_ROOT:BJ}=b(),HJ=Rc(),{recordAction:qJ}=(kn(),Z(b_)),sC=PJ(),FJ="clustering",GJ=HJ.engines[ge.NATS_SERVER_NAME],xJ=yc.join(BJ,"dependencies"),_p=yc.join(xJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),up,lp,bc,Io,wo;EC.exports={runCommand:nC,checkNATSServerInstalled:kJ,createConnection:hp,getConnection:C_,getJetStreamManager:Ic,getJetStream:iC,getNATSReferences:Xt,getServerList:$J,createLocalStream:mp,listStreams:oC,deleteLocalStream:YJ,getServerConfig:wc,listRemoteStreams:KJ,viewStream:WJ,viewStreamIterator:QJ,publishToStream:zJ,createWorkQueueStream:JJ,addSourceToWorkStream:cC,request:jJ,removeSourceFromWorkStream:lC,reloadNATS:pp,reloadNATSHub:ZJ,reloadNATSLeaf:e2,extractServerName:uC,requestErrorHandler:t2,updateWorkStream:r2,createLocalTableStream:dC,createTableStreams:s2,purgeTableStream:fC,purgeSchemaTableStreams:n2,getStreamInfo:i2,updateLocalStreams:a2,closeConnection:VJ,getJsmServerName:Cc,addNatsMsgHeader:aC,updateIngestStreamConsumer:XJ};async function nC(e,t=void 0){let{stdout:r,stderr:s}=await NJ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(nC,"runCommand");async function xJ(){try{await TJ.access(_p)}catch{return!1}let e=await nC(`${_p} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return RJ.eq(t,FJ)}a(xJ,"checkNATSServerInstalled");async function hp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await eC.getClusterUser();if(Li(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}kr.trace("create nats connection called");let i=await DJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(hp,"createConnection");async function kJ(){ps&&(await ps.drain(),ps=void 0,Io=void 0,wo=void 0,Co=void 0)}a(kJ,"closeConnection");var ps,Co;async function C_(){return Co||(Co=hp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ps=await Co),ps||Co}a(C_,"getConnection");async function Ic(){if(Io)return Io;Li(ps)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=await ps.jetstreamManager({domain:e,timeout:6e4}),Io}a(Ic,"getJetStreamManager");async function iC(){if(wo)return wo;Li(ps)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=ps.jetstream({domain:e,timeout:6e4}),wo}a(iC,"getJetStream");async function Xt(){let e=ps||await C_(),t=Io||await Ic(),r=wo||await iC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function VJ(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await eC.getClusterUser(),n=await hp(t,r,s),i=Ep(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=sC.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 dp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(VJ,"getServerList");async function mp(e,t){let{jsm:r}=await Xt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:tC.File,retention:rC.Limits,subjects:t,discard:UJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(mp,"createLocalStream");async function oC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(oC,"listStreams");async function $J(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a($J,"deleteLocalStream");async function YJ(e){let{connection:t}=await Xt(),r=[],s=Ep(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(sC.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(YJ,"listRemoteStreams");async function KJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.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=fp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(KJ,"viewStream");async function*WJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.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=fp(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(WJ,"viewStreamIterator");async function QJ(e,t,r,s){kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=aC(s,r);let{js:n}=await Xt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Zw.encode(s);try{kr.trace(`publishToStream publishing to subject: ${o}`),HJ(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 _C(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){kr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await mp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(QJ,"publishToStream");function aC(e,t){t===void 0&&(t=PJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(aC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),qJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Li(lp)&&(lp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),lp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Li(up)&&(up={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),up;kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function zJ(e){let{jsm:t}=await Xt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:tC.File,retention:rC.Limits,max_age:CJ,max_bytes:LJ,subjects:[`${ge.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:I_.Explicit,durable_name:e.durable_name,deliver_policy:w_.All,max_ack_pending:1e4});else throw s}}a(zJ,"createWorkQueueStream");async function JJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:I_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:w_.All,max_ack_pending:1e4}))}a(JJ,"updateIngestStreamConsumer");async function cC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=uC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=y_.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:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(cC,"addSourceToWorkStream");function uC(e){return e.split(".")[1]}a(uC,"extractServerName");async function lC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=y_.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(lC,"removeSourceFromWorkStream");async function XJ(e,t,r=6e4,s=Ep()){if(!dp.isObject(t))throw new Error("data param must be an object");let n=Zw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return fp(c.data)}a(XJ,"request");function pp(e){return new Promise(async(t,r)=>{let s=NJ(_p,["--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(pp,"reloadNATS");async function jJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await pp(e)}a(jJ,"reloadNATSHub");async function ZJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await pp(e)}a(ZJ,"reloadNATSLeaf");function e2(e,t,r){let s;switch(e.code){case Jw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Jw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(e2,"requestErrorHandler");async function t2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await _C(async()=>{e.subscribe===!0?await cC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await lC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(t2,"updateWorkStream");function _C(e){return bJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_C,"exclusiveLock");async function dC(e,t){let r=y_.createNatsTableStreamName(e,t),s=await Cc(),n=i2(e,t,s);await mp(r,[n])}a(dC,"createLocalTableStream");async function r2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await dC(s,n)}}a(r2,"createTableStreams");async function fC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=y_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")kr.warn(r);else throw r}}a(fC,"purgeTableStream");async function s2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await fC(e,t[r])}a(s2,"purgeSchemaTableStreams");async function n2(e){return(await Ic()).streams.info(e)}a(n2,"getStreamInfo");function i2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(i2,"createSubjectName");async function Cc(){if(bc)return bc;if(bc=(await Ic())?.nc?.info?.server_name,bc===void 0)throw new Error("Unable to get jetstream manager server name");return bc}a(Cc,"getJsmServerName");async function o2(){let e=await Ic(),t=await Cc(),r=await oC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=a2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(o2,"updateLocalStreams");function a2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.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(a2,"updateStreamLimits")});var M_=T((uue,SC)=>{"use strict";var Lo=Gl(),Do=Lw(),c2=G(),u2=require("uuid").v4,cue=require("clone"),D_=un(),Uo=b(),l2=require("util"),Vn=ls(),{handleHDBError:jt,hdb_errors:_2}=j(),{HDB_ERROR_MSGS:L_,HTTP_STATUS_CODES:Zt}=_2,{SchemaEventMsg:U_}=_s(),hC=_t(),{getDatabases:d2}=(fe(),Z(Ce)),{transformReq:Mo}=$();SC.exports={createSchema:f2,createSchemaStructure:mC,createTable:E2,createTableStructure:pC,createAttribute:T2,dropSchema:h2,dropTable:m2,dropAttribute:p2,getBackup:R2};async function f2(e){let t=await mC(e);return D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),t}a(f2,"createSchema");async function mC(e){let t=Lo.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Mo(e),!await Do.checkSchemaExists(e.schema))throw jt(new Error,L_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Vn.createSchema(e),`database '${e.schema}' successfully created`}a(mC,"createSchemaStructure");async function E2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await pC(e)}a(E2,"createTable");async function pC(e){let t=Lo.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo.validateTableResidence(e.residence),!await Do.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,L_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:u2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Vn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await Vn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(pC,"createTableStructure");async function h2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Lo.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let n=await Do.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,n,!0);let i=await Do.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Vn.dropSchema(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),await hC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(h2,"dropSchema");async function m2(e){let t=Lo.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);return await Vn.dropTable(e),await hC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(m2,"dropTable");async function p2(e){let t=Lo.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await Vn.dropAttribute(e),S2(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw c2.error(`Got an error deleting attribute ${l2.inspect(e)}.`),s}}a(p2,"dropAttribute");function S2(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(S2,"dropAttributeFromGlobal");async function T2(e){Mo(e);let t=d2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await Vn.createAttribute(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(T2,"createAttribute");function R2(e){return Vn.getBackup(e)}a(R2,"getBackup")});var RC=T((_ue,TC)=>{"use strict";var{OPERATIONS_ENUM:g2}=b(),Sp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=g2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};TC.exports=Sp});var Tp=T((Eue,bC)=>{"use strict";var A2=ls(),fue=RC(),P_=$(),v_=b(),O2=X(),{handleHDBError:gC,hdb_errors:N2}=j(),{HDB_ERROR_MSGS:AC,HTTP_STATUS_CODES:OC}=N2,b2=Object.values(v_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),NC="To use this operation audit log must be enabled in harperdb-config.yaml";bC.exports=y2;async function y2(e){if(P_.isEmpty(e.schema))throw new Error(AC.SCHEMA_REQUIRED_ERR);if(P_.isEmpty(e.table))throw new Error(AC.TABLE_REQUIRED_ERR);if(!O2.get(v_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw gC(new Error,NC,OC.BAD_REQUEST,v_.LOG_LEVELS.ERROR,NC,!0);let t=P_.checkSchemaTableExist(e.schema,e.table);if(t)throw gC(new Error,t,OC.NOT_FOUND,v_.LOG_LEVELS.ERROR,t,!0);if(!P_.isEmpty(e.search_type)&&b2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await A2.readAuditLog(e)}a(y2,"readAuditLog")});var IC=T((mue,yC)=>{"use strict";var{OPERATIONS_ENUM:I2}=b(),Rp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=I2.GET_BACKUP,this.schema=t,this.table=r}};yC.exports=Rp});var LC=T((Rue,CC)=>{"use strict";var w2=ls(),Sue=IC(),gp=$(),C2=b(),Tue=X(),{handleHDBError:L2,hdb_errors:D2}=j(),{HDB_ERROR_MSGS:wC,HTTP_STATUS_CODES:U2}=D2;CC.exports=M2;async function M2(e){if(gp.isEmpty(e.schema))throw new Error(wC.SCHEMA_REQUIRED_ERR);if(gp.isEmpty(e.table))throw new Error(wC.TABLE_REQUIRED_ERR);let t=gp.checkSchemaTableExist(e.schema,e.table);if(t)throw L2(new Error,t,U2.NOT_FOUND,C2.LOG_LEVELS.ERROR,t,!0);return await w2.getBackup(read_audit_log_object)}a(M2,"getBackup")});var BC=T((Aue,vC)=>{var $n=require("validate.js"),UC=Fe(),Po=b(),{handleHDBError:P2,hdb_errors:v2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:B2}=v2,Ap=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),H2={STRUCTURE_USER:"structure_user"},DC=Object.values(Po.ROLE_TYPES_ENUM),q2="attribute_permissions",F2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,G2=[q2,...Object.values(vo)],MC=[vo.READ,vo.INSERT,vo.UPDATE],x2=[F2,...MC];function k2(e){let t=Ap();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,PC(e,t)}a(k2,"addRoleValidation");function V2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,PC(e,t)}a(V2,"alterRoleValidation");function $2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,UC.validateObject(e,t)}a($2,"dropRoleValidation");var Y2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function PC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Y2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=UC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=K2(e);o&&st(o,r),DC.forEach(c=>{e.permission[c]&&!$n.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(DC.indexOf(o)<0){if(o===H2.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(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.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(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{G2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{$n.isDefined(_[l])?$n.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),$n.isDefined(_.attribute_permissions)){if(!$n.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.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=>{!x2.includes(p)&&p!==vo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!$n.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}MC.forEach(p=>{$n.isDefined(E[p])?$n.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.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(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return W2(r)}a(PC,"customValidate");vC.exports={addRoleValidation:k2,alterRoleValidation:V2,dropRoleValidation:$2};function K2(e){let{operation:t,permission:r}=e;if(t===Po.OPERATIONS_ENUM.ADD_ROLE||t===Po.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 Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Po.ROLE_TYPES_ENUM.SUPER_USER:Po.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(K2,"validateNoSUPerms");function W2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return P2(new Error,s,B2.BAD_REQUEST)}else return null}a(W2,"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 wp=T((Nue,GC)=>{"use strict";var HC=Fr(),qC=qr(),Q2=Oi(),Np=BC(),bp=un(),z2=require("uuid").v4,J2=require("util"),B_=b(),X2=$(),yp=qC.searchByValue,j2=qC.searchByHash,Z2=J2.promisify(Q2.delete),e4=vs(),t4=No(),{hdb_errors:r4,handleHDBError:Bo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:H_}=r4,{UserEventMsg:Ip}=_s();GC.exports={addRole:s4,alterRole:n4,dropRole:i4,listRoles:o4};function Op(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(Op,"scrubRoleDetails");async function s4(e){let t=Np.addRoleValidation(e);if(t)throw t;e=Op(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 yp(r)||[])}catch(i){throw Bo(i)}if(s&&s.length>0)throw Bo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),H_.CONFLICT,void 0,void 0,!0);e.id||(e.id=z2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await HC.insert(n),bp.signalUserChange(new Ip(process.pid)),e=Op(e),e}a(s4,"addRole");async function n4(e){let t=Np.alterRoleValidation(e);if(t)throw t;e=Op(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await HC.update(r)}catch(n){throw Bo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Bo(new Error,"Invalid role id",H_.BAD_REQUEST,void 0,void 0,!0);return await bp.signalUserChange(new Ip(process.pid)),e}a(n4,"alterRole");async function i4(e){let t=Np.dropRoleValidation(e);if(t)throw Bo(new Error,t,H_.BAD_REQUEST,void 0,void 0,!0);let r=new t4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await j2(r));if(s.length===0)throw Bo(new Error,FC.ROLE_NOT_FOUND,H_.NOT_FOUND,void 0,void 0,!0);let n=new e4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yp(n)),o=!1;if(X2.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 Z2(c),bp.signalUserChange(new Ip(process.pid)),`${s[0].role} successfully deleted`}a(i4,"dropRole");async function o4(){return yp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(o4,"listRoles")});var $C=T((yue,VC)=>{"use strict";var a4=X(),Yn=require("joi"),c4=Fe(),xC=require("moment"),u4=require("fs-extra"),Cp=require("path"),l4=require("lodash"),Lc=b(),{LOG_LEVELS:Di}=b(),_4="YYYY-MM-DD hh:mm:ss",d4=Cp.resolve(__dirname,"../logs");VC.exports=function(e){return c4.validateBySchema(e,f4)};var f4=Yn.object({from:Yn.custom(kC),until:Yn.custom(kC),level:Yn.valid(Di.NOTIFY,Di.FATAL,Di.ERROR,Di.WARN,Di.INFO,Di.DEBUG,Di.TRACE),order:Yn.valid("asc","desc"),limit:Yn.number().min(1),start:Yn.number().min(0),log_name:Yn.custom(E4)});function kC(e,t){if(xC(e,xC.ISO_8601).format(_4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(kC,"validateDatetime");function E4(e,t){if(l4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=a4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Cp.join(d4,Lc.LOG_NAMES.INSTALL):Cp.join(s,n);return u4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(E4,"validateReadLogPath")});var Dp=T((wue,KC)=>{"use strict";var q_=b(),h4=G(),m4=X(),p4=$C(),Lp=require("path"),YC=require("fs-extra"),{once:S4}=require("events"),{handleHDBError:T4,hdb_errors:R4}=j(),{PACKAGE_ROOT:g4}=b(),A4=Lp.join(g4,"logs"),O4=1e3,N4=200;KC.exports=b4;async function b4(e){let t=p4(e);if(t)throw T4(t,t.message,R4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=m4.get(q_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?q_.LOG_NAMES.HDB:e.log_name,n=s===q_.LOG_NAMES.INSTALL?Lp.join(A4,q_.LOG_NAMES.INSTALL):Lp.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?O4: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(YC.statSync(n).size-(h+5)*N4,0));let S=YC.createReadStream(n,{start:p});S.on("error",F=>{h4.error(F)});let A=0,I=[],N="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+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("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=N.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&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Kn(F,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await S4(S,"close"),I}a(b4,"readLog");function Kn(e,t,r){t==="desc"?y4(e,r):t==="asc"?I4(e,r):r.push(e)}a(Kn,"pushLineToResult");function y4(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(y4,"insertDescending");function I4(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(I4,"insertAscending")});var G_=T((Mue,JC)=>{"use strict";var Up=require("joi"),{string:F_,boolean:WC,date:w4}=Up.types(),C4=Fe(),{validateSchemaExists:Lue,validateTableExists:Due,validateSchemaName:Uue}=Ds(),L4=b(),D4=ke(),QC=X();QC.initSync();var U4=F_.invalid(QC.get(L4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(D4.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(),zC={operation:F_.valid("add_node","update_node"),node_name:U4,subscriptions:Up.array().items({table:F_.optional(),schema:F_.required(),subscribe:WC.required(),publish:WC.required().custom(P4),start_time:w4.iso()}).min(1).required()};function M4(e){return C4.validateBySchema(e,Up.object(zC))}a(M4,"addUpdateNodeValidator");function P4(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(P4,"checkForFalsy");JC.exports={addUpdateNodeValidator:M4,validation_schema:zC}});var jC=T((vue,XC)=>{var v4=Fe(),B4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};XC.exports=function(e){return v4.validateObject(e,B4)}});var Pp=T((Bue,ZC)=>{"use strict";var H4=b().OPERATIONS_ENUM,Mp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=H4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ZC.exports=Mp});var tL=T((que,eL)=>{"use strict";var q4={OPERATION:"operation",REFRESH:"refresh"},vp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Bp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};eL.exports={JWTTokens:vp,TOKEN_TYPE_ENUM:q4,JWTRSAKeys:Bp}});var Mc=T((Gue,iL)=>{"use strict";var Uc=require("jsonwebtoken"),Hp=require("fs-extra"),qp=$(),Vr=b(),{handleHDBError:er,hdb_errors:F4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=F4,Dc=G(),rL=Zl(),xp=Gr(),G4=Fr().update,x4=Pp(),k4=un(),{UserEventMsg:V4}=_s(),Wn=X();Wn.initSync();var Fp=require("path"),{JWTTokens:$4,JWTRSAKeys:Y4,TOKEN_TYPE_ENUM:x_}=tL(),K4=Wn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Wn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",W4=Wn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Wn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",k_="RS256",Gp;iL.exports={createTokens:Q4,validateOperationToken:J4,refreshOperationToken:z4,validateRefreshToken:nL};async function Q4(e){if(qp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await xp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Dc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await V_(),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 sL(i,r.private_key,r.passphrase),c=await Uc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:W4,algorithm:k_,subject:x_.REFRESH}),u=rL.hash(c),_=new x4(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await G4(_)}catch(f){Dc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return k4.signalUserChange(new V4(process.pid)),new $4(o,c)}a(Q4,"createTokens");async function sL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:K4,algorithm:k_,subject:x_.OPERATION})}a(sL,"signOperationToken");async function V_(){if(Gp===void 0)try{let e=Fp.join(Wn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Fp.join(Wn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Fp.join(Wn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hp.readFile(e)).toString(),n=(await Hp.readFile(t)).toString(),i=(await Hp.readFile(r)).toString();Gp=new Y4(i,n,s)}catch(e){throw Dc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Gp}a(V_,"getJWTRSAKeys");async function z4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await nL(e.refresh_token);let t=await V_(),r=await Uc.decode(e.refresh_token);return{operation_token:await sL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(z4,"refreshOperationToken");async function J4(e){try{let t=await V_(),r=await Uc.verify(e,t.public_key,{algorithms:k_,subject:x_.OPERATION});return await xp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Dc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(J4,"validateOperationToken");async function nL(e){let t;try{let r=await V_(),s=await Uc.verify(e,r.public_key,{algorithms:k_,subject:x_.REFRESH});t=await xp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Dc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!rL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(nL,"validateRefreshToken")});var kp=T((Vue,cL)=>{"use strict";var X4=jC(),Ho=require("passport"),j4=require("passport-local").Strategy,Z4=require("passport-http").BasicStrategy,e3=require("util"),t3=Gr(),aL=e3.callbackify(t3.findAndValidateUser),kue=dr(),r3=b(),oL=Mc();Ho.use(new j4(function(e,t,r){aL(e,t,r)}));Ho.use(new Z4(function(e,t,r){aL(e,t,r)}));Ho.serializeUser(function(e,t){t(null,e)});Ho.deserializeUser(function(e,t){t(null,e)});function s3(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":Ho.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===r3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?oL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):oL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ho.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(s3,"authorize");function n3(e,t){let r=X4(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(n3,"checkPermissions");cL.exports={authorize:s3,checkPermissions:n3}});var qo=T((Yue,uL)=>{"use strict";var Vp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},$p=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};uL.exports={Node:Vp,NodeSubscription:$p}});var _L=T((Wue,lL)=>{"use strict";var i3=b().OPERATIONS_ENUM,Yp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=i3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};lL.exports=Yp});var Pc=T((zue,dL)=>{"use strict";var Kp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Wp=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)}};dL.exports={RemotePayloadObject:Kp,RemotePayloadSubscription:Wp}});var EL=T((Xue,fL)=>{"use strict";var Qp=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}};fL.exports=Qp});var pL=T((rle,mL)=>{"use strict";var o3=EL(),Zue=ze(),hL=Ue(),a3=G(),{getSchemaPath:ele,getTransactionAuditStorePath:tle}=ve(),{getDatabases:c3}=(fe(),Z(Ce));mL.exports=u3;async function u3(e){let t=new o3;try{let r=c3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await hL.environmentDataSize(schema_path,e.name),o=await hL.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){a3.warn(`unable to stat table dbi due to ${r}`)}return t}a(u3,"lmdbGetTableSize")});var TL=T((nle,SL)=>{"use strict";var zp=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}};SL.exports=zp});var Fo=T((cle,OL)=>{"use strict";var l3=require("fs-extra"),_3=require("path"),Gt=require("systeminformation"),Qn=G(),d3=_t(),Jp=ke(),Y_=b(),f3=pL(),AL=Si(),{getThreadInfo:RL}=Ze(),oS=X();oS.initSync();var E3=TL(),{openEnvironment:ole}=Ue(),{getSchemaPath:ale}=ve(),{database:h3}=(fe(),Z(Ce)),$_;OL.exports={getHDBProcessInfo:eS,getNetworkInfo:rS,getDiskInfo:tS,getMemoryInfo:Zp,getCPUInfo:jp,getTimeInfo:Xp,getSystemInformation:sS,systemInformation:m3,getTableSize:nS,getMetrics:iS};function Xp(){return Gt.time()}a(Xp,"getTimeInfo");async function jp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{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}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Qn.error(`error in getCPUInfo: ${e}`),{}}}a(jp,"getCPUInfo");async function Zp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Qn.error(`error in getMemoryInfo: ${e}`),{}}}a(Zp,"getMemoryInfo");async function eS(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await l3.readFile(_3.join(oS.get(Y_.CONFIG_PARAMS.ROOTPATH),Y_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Y_.NODE_ERROR_CODES.ENOENT)Qn.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 Qn.error(`error in getHDBProcessInfo: ${t}`),e}}a(eS,"getHDBProcessInfo");async function tS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return Qn.error(`error in getDiskInfo: ${t}`),e}}a(tS,"getDiskInfo");async function rS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.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 Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Qn.error(`error in getNetworkInfo: ${t}`),e}}a(rS,"getNetworkInfo");async function sS(){if($_!==void 0)return $_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,$_=e,$_}catch(t){return Qn.error(`error in getSystemInformation: ${t}`),e}}a(sS,"getSystemInformation");async function nS(){let e=[],t=await AL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await f3(s));return e}a(nS,"getTableSize");async function iS(){let e=await AL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=h3({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){Qn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(iS,"getMetrics");async function gL(){if(oS.get(Y_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await d3.getNATSReferences(),r=await t.streams.info(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Jp.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(gL,"getNatsStreamInfo");async function m3(e){let t=new E3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await sS(),t.time=Xp(),t.cpu=await jp(),t.memory=await Zp(),t.disk=await tS(),t.network=await rS(),t.harperdb_processes=await eS(),t.table_size=await nS(),t.metrics=await iS(),t.threads=await RL(),t.replication=await gL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await sS();break;case"time":t.time=Xp();break;case"cpu":t.cpu=await jp();break;case"memory":t.memory=await Zp();break;case"disk":t.disk=await tS();break;case"network":t.network=await rS();break;case"harperdb_processes":t.harperdb_processes=await eS();break;case"table_size":t.table_size=await nS();break;case"database_metrics":case"metrics":t.metrics=await iS();break;case"threads":t.threads=await RL();break;case"replication":t.replication=await gL();break;default:break}return t}a(m3,"systemInformation")});var aS=T((lle,NL)=>{"use strict";NL.exports={version:p3,printVersion:S3};var K_=Rc();function p3(){if(K_)return K_.version}a(p3,"version");function S3(){K_&&console.log(`HarperDB Version ${K_.version}`)}a(S3,"printVersion")});var Fs=T((Ele,wL)=>{"use strict";var T3=Fr(),cS=$(),R3=require("util"),Ui=b(),bL=X();bL.initSync();var g3=kp(),yL=qr(),{Node:dle,NodeSubscription:fle}=qo(),A3=No(),O3=_L(),{RemotePayloadObject:N3,RemotePayloadSubscription:b3}=Pc(),{handleHDBError:y3,hdb_errors:I3}=j(),{HTTP_STATUS_CODES:w3,HDB_ERROR_MSGS:C3}=I3,L3=vs(),D3=Fo(),U3=aS(),{getDatabases:M3}=(fe(),Z(Ce)),P3=R3.promisify(g3.authorize),v3=yL.searchByHash,B3=yL.searchByValue;wL.exports={authHeaderToUser:H3,isEmpty:q3,getNodeRecord:F3,upsertNodeRecord:G3,buildNodePayloads:x3,checkClusteringEnabled:k3,getAllNodeRecords:V3,getSystemInfo:$3,reverseSubscription:IL};async function H3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await P3(t,null),e}a(H3,"authHeaderToUser");function q3(e){return e==null}a(q3,"isEmpty");async function F3(e){let t=new A3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v3(t)}a(F3,"getNodeRecord");async function G3(e){let t=new O3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return T3.upsert(t)}a(G3,"upsertNodeRecord");function IL(e){if(cS.isEmpty(e.subscribe)||cS.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(IL,"reverseSubscription");function x3(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=cS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=IL(c),E=M3()[u]?.[_],h=new b3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new N3(r,t,n,s)}a(x3,"buildNodePayloads");function k3(){if(!bL.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y3(new Error,C3.CLUSTERING_NOT_ENABLED,w3.BAD_REQUEST,void 0,void 0,!0)}a(k3,"checkClusteringEnabled");async function V3(){let e=new L3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await B3(e))}a(V3,"getAllNodeRecords");async function $3(){let e=await D3.getSystemInformation();return{hdb_version:U3.version(),node_version:e.node_version,platform:e.platform}}a($3,"getSystemInfo")});var uS=T((mle,BL)=>{"use strict";var W_=_t(),CL=$(),LL=ke(),DL=b(),Q_=G(),UL=M_(),Y3=Cm(),{RemotePayloadObject:K3}=Pc(),{handleHDBError:ML,hdb_errors:W3}=j(),{HTTP_STATUS_CODES:PL}=W3,{NodeSubscription:vL}=qo();BL.exports=Q3;async function Q3(e,t){let r;try{r=await W_.request(`${t}.${LL.REQUEST_SUFFIX}`,new K3(DL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Q_.trace("Response from remote describe all request:",r)}catch(o){Q_.error(`addNode received error from describe all request to remote node: ${o}`);let c=W_.requestErrorHandler(o,"add_node",t);throw ML(new Error,c,PL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===LL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ML(new Error,o,PL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===DL.SYSTEM_SCHEMA_NAME){await W_.createLocalTableStream(c,u);let h=new vL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=CL.doesSchemaExist(c),l=s[c]!==void 0,d=u?CL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Q_.trace(`addNode creating schema: ${c}`),await UL.createSchema({operation:"create_schema",schema:c})),!d&&f){Q_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Y3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await UL.createTable(h)}await W_.createLocalTableStream(c,u);let E=new vL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(Q3,"reviewSubscriptions")});var Hc=T((Sle,FL)=>{"use strict";var{handleHDBError:z_,hdb_errors:z3}=j(),{HTTP_STATUS_CODES:J_}=z3,{addUpdateNodeValidator:J3}=G_(),vc=G(),qL=b(),HL=ke(),X3=$(),lS=_t(),Bc=Fs(),j3=X(),Z3=uS(),{Node:eX,NodeSubscription:tX}=qo(),{broadcast:rX}=Ze(),sX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",nX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",iX=j3.get(qL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=oX;async function oX(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=J3(e);if(r)throw z_(r,r.message,J_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Bc.getNodeRecord(s);if(!X3.isEmptyOrZeroLength(d))throw z_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,J_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Z3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=sX,o;let c=Bc.buildNodePayloads(n,iX,qL.OPERATIONS_ENUM.ADD_NODE,await Bc.getSystemInfo());vc.trace("addNode sending remote payload:",c);let u;try{u=await lS.request(`${s}.${HL.REQUEST_SUFFIX}`,c)}catch(d){vc.error(`addNode received error from request: ${d}`);let f=lS.requestErrorHandler(d,"add_node",s);throw z_(new Error,f,J_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===HL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw z_(new Error,d,J_.INTERNAL_SERVER_ERROR,"error",d)}vc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];vc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await lS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new tX(E.schema,E.table,E.publish,E.subscribe))}let l=new eX(s,_,u.system_info);return await Bc.upsertNodeRecord(l),rX({type:"nats_update"}),i.length>0?o.message=nX:o.message=`Successfully added '${s}' to manifest`,o}a(oX,"addNode")});var dS=T((Rle,kL)=>{"use strict";var{handleHDBError:X_,hdb_errors:aX}=j(),{HTTP_STATUS_CODES:j_}=aX,{addUpdateNodeValidator:cX}=G_(),qc=G(),xL=b(),GL=ke(),uX=$(),_S=_t(),Fc=Fs(),lX=X(),{cloneDeep:_X}=require("lodash"),dX=uS(),{NodeSubscription:fX}=qo(),{broadcast:EX}=Ze(),hX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",mX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pX=lX.get(xL.CONFIG_PARAMS.CLUSTERING_NODENAME);kL.exports=SX;async function SX(e){qc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=cX(e);if(t)throw X_(t,t.message,j_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=_X(await Fc.getNodeRecord(r));if(uX.isEmptyOrZeroLength(s))throw X_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,j_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await dX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=hX,o;let c=Fc.buildNodePayloads(n,pX,xL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await _S.request(`${r}.${GL.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=_S.requestErrorHandler(_,"update_node",r);throw X_(new Error,l,j_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===GL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw X_(new Error,_,j_.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await _S.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await TX(s[0],n,u.system_info),i.length>0?o.message=mX:o.message=`Successfully updated '${r}'`,o}a(SX,"updateNode");async function TX(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 fX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),EX({type:"nats_update"})}a(TX,"updateNodeTable")});var WL=T((Ale,KL)=>{"use strict";var YL=require("joi"),{string:VL}=YL.types(),RX=Fe(),$L=b(),gX=X(),AX=ke();KL.exports=OX;function OX(e){let t=VL.invalid(gX.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(AX.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=YL.object({operation:VL.valid($L.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return RX.validateBySchema(e,r)}a(OX,"removeNodeValidator")});var xc=T((Nle,ZL)=>{"use strict";var{handleHDBError:QL,hdb_errors:NX}=j(),{HTTP_STATUS_CODES:zL}=NX,bX=WL(),Gc=G(),JL=Fs(),yX=$(),Z_=b(),XL=ke(),jL=_t(),IX=X(),{RemotePayloadObject:wX}=Pc(),{NodeSubscription:CX}=qo(),LX=dc(),DX=Oi(),{broadcast:UX}=Ze(),MX=IX.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);ZL.exports=PX;async function PX(e){Gc.trace("removeNode called with:",e),JL.checkClusteringEnabled();let t=bX(e);if(t)throw QL(t,t.message,zL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await JL.getNodeRecord(r);if(yX.isEmptyOrZeroLength(s))throw QL(new Error,`Node '${r}' was not found.`,zL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new wX(Z_.OPERATIONS_ENUM.REMOVE_NODE,MX,[]),i,o=!1;try{i=await jL.request(`${r}.${XL.REQUEST_SUFFIX}`,n),Gc.trace("Remove node reply from remote node:",r,i)}catch(u){Gc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Gc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new CX(l.schema,l.table,!1,!1);await jL.updateWorkStream(d,r)}let c=new LX(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await DX.deleteRecord(c),UX({type:"nats_update"}),i?.status===XL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gc.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(PX,"removeNode")});var rD=T((yle,tD)=>{"use strict";var eD=require("joi"),{string:vX,array:BX}=eD.types(),HX=Fe(),qX=G_();tD.exports=FX;function FX(e){let t=eD.object({operation:vX.valid("configure_cluster").required(),connections:BX.items(qX.validation_schema).required()});return HX.validateBySchema(e,t)}a(FX,"configureClusterValidator")});var fS=T((wle,aD)=>{"use strict";var GX=b(),ed=G(),xX=$(),kX=xc(),VX=Hc(),sD=Fs(),$X=rD(),{handleHDBError:nD,hdb_errors:YX}=j(),{HTTP_STATUS_CODES:iD}=YX,KX="Configure cluster complete.",WX="Failed to configure the cluster. Check the logs for more details.",QX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";aD.exports=zX;async function zX(e){ed.trace("configure cluster called with:",e),sD.checkClusteringEnabled();let t=$X(e);if(t)throw nD(t,t.message,iD.BAD_REQUEST,void 0,void 0,!0);let r=await sD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(oD(kX,{operation:GX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);ed.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(oD(VX,E,E.node_name))}let c=await Promise.allSettled(i);ed.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"&&(ed.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(xX.isEmptyOrZeroLength(u))return{message:KX,connections:_};if(l)return{message:QX,failed_nodes:u,connections:_};throw nD(new Error,WX,iD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(zX,"configureCluster");async function oD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(oD,"functionWrapper")});var uD=T((Lle,cD)=>{"use strict";var td=require("joi"),JX=Fe(),{validateSchemaExists:XX,validateTableExists:jX,validateSchemaName:ZX}=Ds(),ej=td.object({operation:td.string().valid("purge_stream"),schema:td.string().custom(XX).custom(ZX).required(),table:td.string().custom(jX).required()});function tj(e){return JX.validateBySchema(e,ej)}a(tj,"purgeStreamValidator");cD.exports=tj});var ES=T((Ule,lD)=>{"use strict";var{handleHDBError:rj,hdb_errors:sj}=j(),{HTTP_STATUS_CODES:nj}=sj,ij=uD(),oj=_t(),aj=Fs();lD.exports=cj;async function cj(e){let t=ij(e);if(t)throw rj(t,t.message,nj.BAD_REQUEST,void 0,void 0,!0);aj.checkClusteringEnabled();let{schema:r,table:s}=e;return await oj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(cj,"purgeStream")});var sd=T((Ple,mD)=>{"use strict";var mS=Fs(),uj=_t(),fD=X(),rd=b(),Mi=ke(),lj=$(),hS=G(),{RemotePayloadObject:_j}=Pc(),{ErrorCode:_D}=require("nats"),dD=fD.get(rd.CONFIG_PARAMS.CLUSTERING_ENABLED),ED=fD.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);mD.exports={clusterStatus:dj,buildNodeStatus:hD};async function dj(){let e={node_name:ED,is_enabled:dD,connections:[]};if(!dD)return e;let t=await mS.getAllNodeRecords();if(lj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(hD(t[s],e.connections));return await Promise.allSettled(r),e}a(dj,"clusterStatus");async function hD(e,t){let r=e.name,s=new _j(rd.OPERATIONS_ENUM.CLUSTER_STATUS,ED,void 0,await mS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await uj.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,hS.error(`Error getting node status from ${r} `,n))}catch(u){hS.warn(`Error getting node status from ${r}`,u),u.code===_D.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===_D.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fj(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!==rd.PRE_4_0_0_VERSION&&await mS.upsertNodeRecord(u)}catch(u){hS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(hD,"buildNodeStatus");function fj(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(fj,"NodeStatusObject")});var SS=T((Ble,pD)=>{"use strict";var{handleHDBError:Ej,hdb_errors:hj}=j(),{HTTP_STATUS_CODES:mj}=hj,pj=_t(),Sj=Fs(),pS=$(),nd=require("joi"),Tj=Fe(),Rj=2e3,gj=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});pD.exports=Aj;async function Aj(e){Sj.checkClusteringEnabled();let t=Tj.validateBySchema(e,gj);if(t)throw Ej(t,t.message,mj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||pS.autoCastBoolean(s),o=n===void 0||pS.autoCastBoolean(n),c={nodes:[]},u=await pj.getServerList(r??Rj),_={};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:pS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Aj,"clusterNetwork")});var gD=T((qle,RD)=>{"use strict";var TS=require("joi"),SD=Fe(),{route_constraints:TD}=mE();RD.exports={setRoutesValidator:Oj,deleteRoutesValidator:Nj};function Oj(e){let t=TS.object({server:TS.valid("hub","leaf").required(),routes:TD.required()});return SD.validateBySchema(e,t)}a(Oj,"setRoutesValidator");function Nj(e){let t=TS.object({routes:TD.required()});return SD.validateBySchema(e,t)}a(Nj,"deleteRoutesValidator")});var gS=T((Gle,bD)=>{"use strict";var Pi=Er(),RS=$(),id=b(),AD=gD(),{handleHDBError:OD,hdb_errors:bj}=j(),{HTTP_STATUS_CODES:ND}=bj,yj="cluster routes successfully set",Ij="cluster routes successfully deleted";bD.exports={setRoutes:wj,getRoutes:Cj,deleteRoutes:Lj};function wj(e){let t=AD.setRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.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=RS.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"?Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:yj,set:o,skipped:i}}a(wj,"setRoutes");function Cj(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Cj,"getRoutes");function Lj(e){let t=AD.deleteRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.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=RS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=RS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Ij,deleted:i,skipped:o}}a(Lj,"deleteRoutes")});var ID=T((kle,yD)=>{"use strict";var kc=require("alasql"),vi=require("recursive-iterator"),Ss=G(),Dj=$(),Vc=b(),AS=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,Mj(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=>Vc.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=>!Vc.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][Vc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Uj(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(_=>!Vc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new kc.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 Uj(e){return e.filter(t=>t[Vc.PERMS_CRUD_ENUM.READ])}a(Uj,"filterReadRestrictedAttrs");function Mj(e,t,r,s,n){Pj(e,t,r,s,n)}a(Mj,"interpretAST");function $c(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($c,"addSchemaTableToMap");function Pj(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof kc.yy.Insert?qj(e,t,r):e instanceof kc.yy.Select?vj(e,t,r,s,n):e instanceof kc.yy.Update?Bj(e,t,r):e instanceof kc.yy.Delete?Hj(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Pj,"getRecordAttributesAST");function vj(e,t,r,s,n){if(!e){Ss.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Dj.isEmptyOrZeroLength(i)){Ss.error("No schema specified");return}e.from.forEach(c=>{$c(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),$c(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{Ss.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{Ss.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{Ss.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{Ss.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(vj,"getSelectAttributes");function Bj(e,t,r){if(!e){Ss.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(Bj,"getUpdateAttributes");function Hj(e,t,r){if(!e){Ss.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(Hj,"getDeleteAttributes");function qj(e,t,r){if(!e){Ss.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;$c(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.into.tableid,n,i.columnid,t,r)}a(qj,"getInsertAttributes");function OS(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(OS,"pushAttribute");yD.exports=AS});var yS=T(($le,DD)=>{var od=rc(),wD=require("chalk"),Nr=G(),CD=require("prompt"),{promisify:Fj}=require("util"),NS=b(),Gj=require("fs-extra"),xj=require("path"),kj=$(),Vj=aS(),LD=X();LD.initSync();var $j=require("moment"),Yj=Fj(CD.get),Kj=xj.join(LD.getHdbBasePath(),NS.LICENSE_KEY_DIR_NAME,NS.LICENSE_FILE_NAME,NS.LICENSE_FILE_NAME);DD.exports={getFingerprint:Qj,setLicense:Wj,parseLicense:bS,register:zj,getRegistrationInfo:Xj};async function Wj(e){if(e&&e.key&&e.company){try{Nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await bS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Nr.error(r),Nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Wj,"setLicense");async function Qj(){let e={};try{e=await od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Nr.error(r),Nr.error(t),new Error(r)}return e}a(Qj,"getFingerprint");async function bS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Nr.info("Validating license input...");let r=od.validateLicense(e,t);if(Nr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Nr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Nr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Nr.info("writing license to disk"),await Gj.writeFile(Kj,JSON.stringify({license_key:e,company:t}))}catch(s){throw Nr.error("Failed to write License"),s}return"Registration successful."}a(bS,"parseLicense");async function zj(){let e=await Jj();return bS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(zj,"register");async function Jj(){let e=await od.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:wD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:wD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{CD.start()}catch(s){Nr.error(s)}let r;try{r=await Yj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Jj,"promptForRegistration");async function Xj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await od.getLicense()}catch(r){throw Nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(kj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Vj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$j.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Xj,"getRegistrationInfo")});var MD=T((Kle,UD)=>{"use strict";var jj=ke(),IS=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+jj.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"}};UD.exports=IS});var BD=T((Qle,vD)=>{"use strict";var PD=ke(),wS=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+PD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+PD.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"}};vD.exports=wS});var qD=T((Jle,HD)=>{"use strict";var CS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};HD.exports=CS});var GD=T((jle,FD)=>{"use strict";var Zj=ke(),LS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Zj.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=LS});var MS=T((e_e,VD)=>{"use strict";var Go=require("path"),ud=require("fs-extra"),eZ=MD(),tZ=BD(),rZ=qD(),sZ=GD(),DS=Gr(),ko=$(),sr=Er(),cd=b(),Yc=ke(),{CONFIG_PARAMS:je}=cd,Kc=G(),Wc=X(),xD=an(),US=_t(),xo="clustering",nZ=1e4,kD=5;VD.exports={generateNatsConfig:oZ,removeNatsConfig:aZ,getHubConfigPath:iZ};function iZ(){let e=Wc.get(je.ROOTPATH);return Go.join(e,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER)}a(iZ,"getHubConfigPath");async function oZ(e=!1,t=void 0){Wc.initSync();let r=Wc.get(je.ROOTPATH),s=Go.join(r,xo,Yc.PID_FILES.HUB),n=Go.join(r,xo,Yc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Go.join(r,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER),c=Go.join(r,xo,Yc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await US.checkNATSServerInstalled()||ld("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await DS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await DS.getClusterUser();(ko.isEmpty(A)||A.active!==!0)&&ld(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ad(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await ad(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===cd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new sZ(te.username,xD.decrypt(te.hash))),N.push(new rZ(te.username,xD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!ko.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new eZ(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ud.writeJson(o,F),Kc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new tZ(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ud.writeJson(c,B),Kc.trace(`Leaf server config written to ${c}`))}a(oZ,"generateNatsConfig");async function ad(e){let t=Wc.get(e);return ko.isEmpty(t)&&ld(`port undefined for '${e}'`),await ko.isPortTaken(t)&&ld(`'${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(ad,"isPortAvailable");function ld(e){let t=`Error generating clustering config: ${e}`;Kc.error(t),console.error(t),process.exit(1)}a(ld,"generateNatsConfigError");async function aZ(e){let{port:t,config_file:r}=US.getServerConfig(e),{username:s,decrypt_hash:n}=await DS.getClusterUser(),i=0,o=2e3;for(;i<kD;){try{let _=await US.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Kc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=kD)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 ko.async_set_timeout(o*(i*2))}let c="0".repeat(nZ),u=Go.join(Wc.get(je.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),Kc.notify(e,"started.")}a(aZ,"removeNatsConfig")});var zD=T((r_e,QD)=>{"use strict";var br=X(),cZ=rc(),ce=b(),Qc=ke(),dn=require("path"),{PACKAGE_ROOT:dd}=b(),$D=X(),_d=$(),Vo="/dev/null",uZ=dn.join(dd,"launchServiceScripts"),YD=dn.join(dd,"utility/scripts"),lZ=dn.join(YD,ce.HDB_RESTART_SCRIPT),KD=dn.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Qc.NATS_BINARY_NAME);function WD(){let t=cZ.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 _d.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:dd}}a(WD,"generateMainServerConfig");var _Z=9930;function dZ(){br.initSync(!0);let e=br.get(ce.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.HUB_SERVER),r=dn.join(br.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=$D.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[br.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==_Z?"-"+s:""),script:KD,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 br.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(dZ,"generateNatsHubServerConfig");var fZ=9940;function EZ(){br.initSync(!0);let e=br.get(ce.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.LEAF_SERVER),r=dn.join(br.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=$D.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[br.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==fZ?"-"+s:""),script:KD,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 br.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(EZ,"generateNatsLeafServerConfig");function hZ(){br.initSync();let e=dn.join(br.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:uZ,autorestart:!1};return br.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(hZ,"generateClusteringUpgradeV4ServiceConfig");function mZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return _d.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:YD},script:lZ}}a(mZ,"generateRestart");function pZ(){return{apps:[WD()]}}a(pZ,"generateAllServiceConfigs");QD.exports={generateAllServiceConfigs:pZ,generateMainServerConfig:WD,generateRestart:mZ,generateNatsHubServerConfig:dZ,generateNatsLeafServerConfig:EZ,generateClusteringUpgradeV4ServiceConfig:hZ}});var HS=T((i_e,cU)=>{"use strict";var Ae=b(),SZ=$(),fn=MS(),zc=_t(),Gs=ke(),zn=zD(),fd=X(),Jn=G(),TZ=Fs(),{startWorker:JD,onMessageFromWorkers:RZ}=Ze(),gZ=Fo(),n_e=require("util"),AZ=require("child_process"),OZ=require("fs"),{execFile:NZ}=AZ,pe;cU.exports={enterPM2Mode:bZ,start:Xn,stop:PS,reload:jD,restart:ZD,list:vS,describe:tU,connect:En,kill:LZ,startAllServices:DZ,startService:BS,getUniqueServicesList:rU,restartAllServices:UZ,isServiceRegistered:sU,reloadStopStart:nU,restartHdb:eU,deleteProcess:wZ,startClusteringProcesses:oU,startClusteringThreads:aU,isHdbRestartRunning:CZ,isClusteringRunning:PZ,stopClustering:MZ,reloadClustering:vZ};var Jc=!1;RZ(e=>{e.type==="restart"&&fd.initSync(!0)});function bZ(){Jc=!0}a(bZ,"enterPM2Mode");function En(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Jn.setupConsoleLogging(),r&&t(r),e(s)})})}a(En,"connect");var nr,yZ=10,XD;function Xn(e,t=!1){if(Jc)return IZ(e);let r=NZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!XD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<yZ&&(OZ.existsSync(fn.getHubConfigPath())?Xn(e):(await fn.generateNatsConfig(!0),Xn(e),await new Promise(c=>setTimeout(c,3e3)),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=fd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Gs.LOG_LEVELS[f]}if(Gs.LOG_LEVEL_HIERARCHY[o]>=Gs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Gs.LOG_LEVELS.ERR||l===Gs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{XD=!0,nr&&(nr.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)}nr.push(r)}a(Xn,"start");function IZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(IZ,"startWithPM2");function PS(e){if(!Jc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await En()}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(PS,"stop");function jD(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(jD,"reload");function ZD(e){if(!Jc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(ZD,"restart");function wZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(wZ,"deleteProcess");async function eU(){await Xn(zn.generateRestart())}a(eU,"restartHdb");async function CZ(){let e=await vS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(CZ,"isHdbRestartRunning");function vS(){return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(vS,"list");function tU(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(tU,"describe");function LZ(){if(!Jc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(LZ,"kill");async function DZ(){try{await oU(),await aU(),await Xn(zn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(DZ,"startAllServices");async function BS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=zn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=zn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=zn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=zn.generateNatsHubServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=zn.generateNatsLeafServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=zn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Xn(r)}catch(r){throw pe?.disconnect(),r}}a(BS,"startService");async function rU(){try{let e=await vS(),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(rU,"getUniqueServicesList");async function UZ(e=[]){try{let t=!1,r=await rU();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 ZD(o))}t&&await nU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(UZ,"restartAllServices");async function sU(e){if(nr?.find(r=>r.name===e))return!0;let t=await gZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(sU,"isServiceRegistered");async function nU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?fd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):fd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await tU(e),s=SZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await PS(e),await BS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await eU():await jD(e)}a(nU,"reloadStopStart");var iU;async function oU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await BS(r,e)}}a(oU,"startClusteringProcesses");async function aU(){iU=JD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await zc.createWorkQueueStream(Gs.WORK_QUEUE_CONSUMER_NAMES),await zc.updateIngestStreamConsumer(),await zc.updateLocalStreams();let e=await TZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Jn.info("Starting clustering upgrade 4.0.0 process"),JD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(aU,"startClusteringThreads");async function MZ(){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 iU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await PS(t)}}a(MZ,"stopClustering");async function PZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await sU(t)===!1)return!1}return!0}a(PZ,"isClusteringRunning");async function vZ(){await fn.generateNatsConfig(!0),await zc.reloadNATSHub(),await zc.reloadNATSLeaf(),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(vZ,"reloadClustering")});var pd=T((a_e,hU)=>{"use strict";var BZ=require("minimist"),{isMainThread:GS,parentPort:_U}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Xc}=Ve,xs=G(),xS=$(),Ed=MS(),$o=_t(),qS=ke(),dU=Er(),ks=HS(),uU=Fo(),HZ=iE(),{restartWorkers:hd,onMessageByType:qZ}=Ze(),{handleHDBError:FZ,hdb_errors:GZ}=j(),{HTTP_STATUS_CODES:xZ}=GZ,md=X();md.initSync();var jc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,kZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lU="Clustering is not enabled so cannot be restarted",VZ="Invalid service",Yo,$r;hU.exports={restart:fU,restartService:kS};GS&&qZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?kS({service:e.workerType}):fU({operation:"restart"})});async function fU(e){$r=Object.keys(e).length===0,Yo=await ks.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=BZ(process.argv);if(t.service){await kS(t);return}if($r&&!Yo){console.error(kZ);return}if($r&&console.log(jc),Yo){ks.enterPM2Mode(),xs.notify(jc);let r=HZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return xS.isEmptyOrZeroLength(Object.keys(r))||dU.updateConfigValue(void 0,void 0,r,!0,!0),YZ(),jc}return GS?(xs.notify(jc),setTimeout(()=>{hd()},50)):_U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),jc}a(fU,"restart");async function kS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw FZ(new Error,VZ,xZ.BAD_REQUEST,void 0,void 0,!0);if(Yo=await ks.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!GS)return _U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Xc.clustering:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}$r&&console.log("Restarting clustering"),xs.notify("Restarting clustering"),await EU();break;case Xc.clustering_config:case Xc["clustering config"]:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}$r&&console.log("Restarting clustering_config"),xs.notify("Restarting clustering_config"),await ks.reloadClustering();break;case"custom_functions":case"custom functions":case Xc.harperdb:case Xc.http_workers:if($r&&!Yo){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}$r&&console.log("Restarting http_workers"),xs.notify("Restarting http_workers"),$r?await ks.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(xs.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(kS,"restartService");async function $Z(){await $o.publishToStream(`${qS.SUBJECT_PREFIXES.TXN}.${qS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,qS.WORK_QUEUE_CONSUMER_NAMES.stream_name,$o.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a($Z,"postDummyNatsMsg");async function YZ(){await EU(),await ks.restart(Ve.HDB_PROC_DESCRIPTOR),await xS.async_set_timeout(2e3),md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await FS(),$r&&(await $o.closeConnection(),process.exit(0))}a(YZ,"restartPM2Mode");async function EU(){if(!dU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uU.getHDBProcessInfo()).clustering.length===0)xs.trace("Clustering not running, restart will start clustering services"),await Ed.generateNatsConfig(!0),await ks.startClusteringProcesses(),await ks.startClusteringThreads(),await FS(),$r&&await $o.closeConnection();else{await $Z(),await Ed.generateNatsConfig(!0),Yo?(xs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ks.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ks.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uU.getHDBProcessInfo()).clustering.forEach(n=>{xs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await xS.async_set_timeout(3e3),await FS(),await $o.updateLocalStreams(),$r&&await $o.closeConnection(),xs.trace("Restart clustering restarting ingest and reply service threads");let t=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EU,"restartClustering");async function FS(){await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(FS,"removeNatsConfig")});var yU=T((l_e,bU)=>{"use strict";var u_e=require("lodash"),ir=b(),{handleHDBError:mU,hdb_errors:KZ}=j(),{HDB_ERROR_MSGS:WZ,HTTP_STATUS_CODES:QZ}=KZ,VS=G();bU.exports={getRolePermissions:JZ};var Bi=Object.create(null),zZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),RU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),gU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),$S=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...gU(t,r,s,n)}),"table_perms_template"),pU=a((e,t=gU())=>({attribute_name:e,describe:NU(t),[Zc]:t[Zc],[YS]:t[YS],[KS]:t[KS]}),"attr_perms_template"),SU=a((e,t=!1)=>({attribute_name:e,describe:t,[Zc]:t}),"timestamp_attr_perms_template"),{READ:Zc,INSERT:YS,UPDATE:KS}=ir.PERMS_CRUD_ENUM,AU=Object.values(ir.PERMS_CRUD_ENUM),OU=[Zc,YS,KS];function JZ(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[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=XZ(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=zZ(s),Bi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.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 VS.error(s),VS.debug(r),mU(new Error,WZ.OUTDATED_PERMS_TRANSLATION_ERROR,QZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw VS.error(s),mU(new Error)}}}a(JZ,"getRolePermissions");function XZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.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]=jZ(t[i]);return}r[i]=RU(),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],_=ZZ(c,u);r[i].describe||AU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=$S()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=$S()})}),r}a(XZ,"translateRolePermissions");function jZ(e){let t=RU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=$S(!0,!0,!0,!0,!0)}),t}a(jZ,"createStructureUserPermissions");function ZZ(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 ir.TIME_STAMP_NAMES.includes(d)&&(f=SU(d,l[Zc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=NU(l),n.attribute_permissions.push(l),c||e5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=SU(_):l=pU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=TU(n),n}else return e.describe=TU(e),e}a(ZZ,"getTableAttrPerms");function TU(e){return AU.filter(t=>e[t]).length>0}a(TU,"getSchemaTableDescribePerm");function NU(e){return OU.filter(t=>e[t]).length>0}a(NU,"getAttributeDescribePerm");function e5(e,t){OU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(e5,"checkForHashPerms")});var IU={};Qe(IU,{Resources:()=>Sd,keyArrayToString:()=>Ko,resetResources:()=>t5,resources:()=>jn});function t5(){return jn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,jn,eu=Te(()=>{fi();Sd=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(t5,"resetResources");a(Ko,"keyArrayToString")});var Hi,WS=Te(()=>{Hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let 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 tu={};Qe(tu,{authentication:()=>vU,bypassAuth:()=>c5,login:()=>l5,logout:()=>_5,start:()=>u5});function c5(){PU=!0}async function vU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?i5?n5:[]:s5?r5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Td&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Td&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Td){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 CU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new gd.AuthAuditLog(E,h,wt.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===wt.AUTH_AUDIT_STATUS.SUCCESS?wU.notify(S):wU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,Rd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Rd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return a5&&(qi.get(h)||(qi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Zn({error:A.message},e)})}qi.set(s,d),o5&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):PU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,DU.getSuperUser)());Td&&(e.session.update=function(E){if(!u){u=(0,UU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,CU.put(E)},e.login=async function(E,h){e.user=await ut.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")&&jn.loginPath?(f.status=302,f.headers.set("Location",jn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function u5({server:e,port:t}){e.request(vU,{port:t||"all"}),LU||(LU=!0,setInterval(()=>{qi=new Map},Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),MU.user.addListener(()=>{qi=new Map}))}async function l5(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 _5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var DU,Rd,UU,Yr,wt,gd,MU,wU,r5,s5,n5,i5,CU,Td,PU,o5,a5,qi,LU,Ad=Te(()=>{DU=D(Gr());Ur();eu();Rd=D(Mc());fe();UU=require("uuid"),Yr=D(X()),wt=D(b()),gd=D(G()),MU=D(nc());WS();Wo();wU=(0,gd.loggerWithTag)("auth-event");Yr.initSync();r5=Yr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),s5=Yr.get(wt.CONFIG_PARAMS.HTTP_CORS),n5=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),i5=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),CU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,PU=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,o5=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,a5=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;ut.onInvalidatedUser(()=>{qi=new Map});a(c5,"bypassAuth");a(vU,"authentication");a(u5,"start");a(l5,"login");a(_5,"logout")});var kU=T((A_e,xU)=>{"use strict";var Se=require("joi"),BU=require("fs-extra"),HU=require("path"),mn=Fe(),qU=X(),FU=b(),GU=G(),{hdb_errors:d5}=j(),{HDB_ERROR_MSGS:xt}=d5,hn=/^[a-zA-Z0-9-_]+$/;xU.exports={getDropCustomFunctionValidator:E5,setCustomFunctionValidator:h5,addComponentValidator:T5,dropCustomFunctionProjectValidator:R5,packageComponentValidator:g5,deployComponentValidator:A5,setComponentFileValidator:m5,getComponentFileValidator:S5,dropComponentFileValidator:p5};function Od(e,t,r){try{let s=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),n=HU.join(s,t);return BU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return GU.error(s),r.message(xt.VALIDATION_ERR)}}a(Od,"checkProjectExists");function ru(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ru,"checkFilePath");function f5(e,t,r,s){try{let n=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=HU.join(n,e,t,r+".js");return BU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return GU.error(n),s.message(xt.VALIDATION_ERR)}}a(f5,"checkFileExists");function E5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(hn).custom(f5.bind(null,e.project,e.type)).custom(ru).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return mn.validateBySchema(e,t)}a(E5,"getDropCustomFunctionValidator");function h5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(ru).required(),function_content:Se.string().required()});return mn.validateBySchema(e,t)}a(h5,"setCustomFunctionValidator");function m5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(m5,"setComponentFileValidator");function p5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).optional()});return mn.validateBySchema(e,t)}a(p5,"dropComponentFileValidator");function S5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(ru).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(S5,"getComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(T5,"addComponentValidator");function R5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(R5,"dropCustomFunctionProjectValidator");function g5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return mn.validateBySchema(e,t)}a(g5,"packageComponentValidator");function A5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return mn.validateBySchema(e,t)}a(A5,"deployComponentValidator")});var Id=T((N_e,zU)=>{"use strict";var Nd=require("joi"),bd=require("path"),VU=require("fs-extra"),{exec:O5}=require("child_process"),N5=require("util"),$U=N5.promisify(O5),su=b(),{handleHDBError:Qo,hdb_errors:b5}=j(),{HTTP_STATUS_CODES:zo}=b5,nu=X(),y5=Fe(),Jo=G();nu.initSync();var QS=nu.get(su.CONFIG_PARAMS.COMPONENTSROOT),YU="npm install --omit=dev --json",I5=`${YU} --dry-run`;zU.exports={installModules:D5,auditModules:U5,installAllRootModules:w5,uninstallRootModule:C5,linkHarperdb:L5};async function w5(e=!1){await yd(),await iu(e?"npm install --ignore-scripts":"npm install",nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(w5,"installAllRootModules");async function C5(e){await iu(`npm uninstall ${e}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(C5,"uninstallRootModule");async function L5(){await yd(),await iu(`npm link ${su.PACKAGE_ROOT}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(L5,"linkHarperdb");async function iu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await $U(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
8
+ `,"")}a(nC,"runCommand");async function kJ(){try{await RJ.access(_p)}catch{return!1}let e=await nC(`${_p} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return gJ.eq(t,GJ)}a(kJ,"checkNATSServerInstalled");async function hp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await eC.getClusterUser();if(Li(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await UJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(hp,"createConnection");async function VJ(){Ss&&(await Ss.drain(),Ss=void 0,Io=void 0,wo=void 0,Co=void 0)}a(VJ,"closeConnection");var Ss,Co;async function C_(){return Co||(Co=hp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Co),Ss||Co}a(C_,"getConnection");async function Ic(){if(Io)return Io;Li(Ss)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=await Ss.jetstreamManager({domain:e,timeout:6e4}),Io}a(Ic,"getJetStreamManager");async function iC(){if(wo)return wo;Li(Ss)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=Ss.jetstream({domain:e,timeout:6e4}),wo}a(iC,"getJetStream");async function Xt(){let e=Ss||await C_(),t=Io||await Ic(),r=wo||await iC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function $J(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await eC.getClusterUser(),n=await hp(t,r,s),i=Ep(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=sC.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 dp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a($J,"getServerList");async function mp(e,t){let{jsm:r}=await Xt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:tC.File,retention:rC.Limits,subjects:t,discard:MJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(mp,"createLocalStream");async function oC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(oC,"listStreams");async function YJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(YJ,"deleteLocalStream");async function KJ(e){let{connection:t}=await Xt(),r=[],s=Ep(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(sC.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(KJ,"listRemoteStreams");async function WJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.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=fp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(WJ,"viewStream");async function*QJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.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=fp(_.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(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(QJ,"viewStreamIterator");async function zJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=aC(s,r);let{js:n}=await Xt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Zw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),qJ(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 _C(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await mp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(zJ,"publishToStream");function aC(e,t){t===void 0&&(t=vJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(aC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),FJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Li(lp)&&(lp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),lp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Li(up)&&(up={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),up;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function JJ(e){let{jsm:t}=await Xt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:tC.File,retention:rC.Limits,max_age:LJ,max_bytes:DJ,subjects:[`${ge.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:I_.Explicit,durable_name:e.durable_name,deliver_policy:w_.All,max_ack_pending:1e4});else throw s}}a(JJ,"createWorkQueueStream");async function XJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:I_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:w_.All,max_ack_pending:1e4}))}a(XJ,"updateIngestStreamConsumer");async function cC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=uC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=y_.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:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(cC,"addSourceToWorkStream");function uC(e){return e.split(".")[1]}a(uC,"extractServerName");async function lC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=y_.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(lC,"removeSourceFromWorkStream");async function jJ(e,t,r=6e4,s=Ep()){if(!dp.isObject(t))throw new Error("data param must be an object");let n=Zw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return fp(c.data)}a(jJ,"request");function pp(e){return new Promise(async(t,r)=>{let s=bJ(_p,["--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(pp,"reloadNATS");async function ZJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await pp(e)}a(ZJ,"reloadNATSHub");async function e2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await pp(e)}a(e2,"reloadNATSLeaf");function t2(e,t,r){let s;switch(e.code){case Jw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Jw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(t2,"requestErrorHandler");async function r2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await _C(async()=>{e.subscribe===!0?await cC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await lC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(r2,"updateWorkStream");function _C(e){return yJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_C,"exclusiveLock");async function dC(e,t){let r=y_.createNatsTableStreamName(e,t),s=await Cc(),n=o2(e,t,s);await mp(r,[n])}a(dC,"createLocalTableStream");async function s2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await dC(s,n)}}a(s2,"createTableStreams");async function fC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=y_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(fC,"purgeTableStream");async function n2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await fC(e,t[r])}a(n2,"purgeSchemaTableStreams");async function i2(e){return(await Ic()).streams.info(e)}a(i2,"getStreamInfo");function o2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(o2,"createSubjectName");async function Cc(){if(bc)return bc;if(bc=(await Ic())?.nc?.info?.server_name,bc===void 0)throw new Error("Unable to get jetstream manager server name");return bc}a(Cc,"getJsmServerName");async function a2(){let e=await Ic(),t=await Cc(),r=await oC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=c2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(a2,"updateLocalStreams");function c2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.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(c2,"updateStreamLimits")});var M_=T((uue,SC)=>{"use strict";var Lo=Gl(),Do=Lw(),u2=G(),l2=require("uuid").v4,cue=require("clone"),D_=un(),Uo=b(),_2=require("util"),Vn=_s(),{handleHDBError:jt,hdb_errors:d2}=j(),{HDB_ERROR_MSGS:L_,HTTP_STATUS_CODES:Zt}=d2,{SchemaEventMsg:U_}=ds(),hC=dt(),{getDatabases:f2}=(fe(),Z(Ce)),{transformReq:Mo}=$();SC.exports={createSchema:E2,createSchemaStructure:mC,createTable:h2,createTableStructure:pC,createAttribute:R2,dropSchema:m2,dropTable:p2,dropAttribute:S2,getBackup:g2};async function E2(e){let t=await mC(e);return D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),t}a(E2,"createSchema");async function mC(e){let t=Lo.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Mo(e),!await Do.checkSchemaExists(e.schema))throw jt(new Error,L_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Vn.createSchema(e),`database '${e.schema}' successfully created`}a(mC,"createSchemaStructure");async function h2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await pC(e)}a(h2,"createTable");async function pC(e){let t=Lo.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo.validateTableResidence(e.residence),!await Do.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,L_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:l2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Vn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await Vn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(pC,"createTableStructure");async function m2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Lo.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let n=await Do.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,n,!0);let i=await Do.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Vn.dropSchema(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),await hC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(m2,"dropSchema");async function p2(e){let t=Lo.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);return await Vn.dropTable(e),await hC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(p2,"dropTable");async function S2(e){let t=Lo.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await Vn.dropAttribute(e),T2(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw u2.error(`Got an error deleting attribute ${_2.inspect(e)}.`),s}}a(S2,"dropAttribute");function T2(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(T2,"dropAttributeFromGlobal");async function R2(e){Mo(e);let t=f2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await Vn.createAttribute(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(R2,"createAttribute");function g2(e){return Vn.getBackup(e)}a(g2,"getBackup")});var RC=T((_ue,TC)=>{"use strict";var{OPERATIONS_ENUM:A2}=b(),Sp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=A2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};TC.exports=Sp});var Tp=T((Eue,bC)=>{"use strict";var O2=_s(),fue=RC(),P_=$(),v_=b(),N2=X(),{handleHDBError:gC,hdb_errors:b2}=j(),{HDB_ERROR_MSGS:AC,HTTP_STATUS_CODES:OC}=b2,y2=Object.values(v_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),NC="To use this operation audit log must be enabled in harperdb-config.yaml";bC.exports=I2;async function I2(e){if(P_.isEmpty(e.schema))throw new Error(AC.SCHEMA_REQUIRED_ERR);if(P_.isEmpty(e.table))throw new Error(AC.TABLE_REQUIRED_ERR);if(!N2.get(v_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw gC(new Error,NC,OC.BAD_REQUEST,v_.LOG_LEVELS.ERROR,NC,!0);let t=P_.checkSchemaTableExist(e.schema,e.table);if(t)throw gC(new Error,t,OC.NOT_FOUND,v_.LOG_LEVELS.ERROR,t,!0);if(!P_.isEmpty(e.search_type)&&y2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await O2.readAuditLog(e)}a(I2,"readAuditLog")});var IC=T((mue,yC)=>{"use strict";var{OPERATIONS_ENUM:w2}=b(),Rp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=w2.GET_BACKUP,this.schema=t,this.table=r}};yC.exports=Rp});var LC=T((Rue,CC)=>{"use strict";var C2=_s(),Sue=IC(),gp=$(),L2=b(),Tue=X(),{handleHDBError:D2,hdb_errors:U2}=j(),{HDB_ERROR_MSGS:wC,HTTP_STATUS_CODES:M2}=U2;CC.exports=P2;async function P2(e){if(gp.isEmpty(e.schema))throw new Error(wC.SCHEMA_REQUIRED_ERR);if(gp.isEmpty(e.table))throw new Error(wC.TABLE_REQUIRED_ERR);let t=gp.checkSchemaTableExist(e.schema,e.table);if(t)throw D2(new Error,t,M2.NOT_FOUND,L2.LOG_LEVELS.ERROR,t,!0);return await C2.getBackup(read_audit_log_object)}a(P2,"getBackup")});var BC=T((Aue,vC)=>{var $n=require("validate.js"),UC=Fe(),Po=b(),{handleHDBError:v2,hdb_errors:B2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:H2}=B2,Ap=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),q2={STRUCTURE_USER:"structure_user"},DC=Object.values(Po.ROLE_TYPES_ENUM),F2="attribute_permissions",G2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,x2=[F2,...Object.values(vo)],MC=[vo.READ,vo.INSERT,vo.UPDATE],k2=[G2,...MC];function V2(e){let t=Ap();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,PC(e,t)}a(V2,"addRoleValidation");function $2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,PC(e,t)}a($2,"alterRoleValidation");function Y2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,UC.validateObject(e,t)}a(Y2,"dropRoleValidation");var K2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function PC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)K2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=UC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=W2(e);o&&st(o,r),DC.forEach(c=>{e.permission[c]&&!$n.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(DC.indexOf(o)<0){if(o===q2.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(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.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(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{x2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{$n.isDefined(_[l])?$n.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),$n.isDefined(_.attribute_permissions)){if(!$n.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.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=>{!k2.includes(p)&&p!==vo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!$n.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}MC.forEach(p=>{$n.isDefined(E[p])?$n.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.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(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Q2(r)}a(PC,"customValidate");vC.exports={addRoleValidation:V2,alterRoleValidation:$2,dropRoleValidation:Y2};function W2(e){let{operation:t,permission:r}=e;if(t===Po.OPERATIONS_ENUM.ADD_ROLE||t===Po.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 Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Po.ROLE_TYPES_ENUM.SUPER_USER:Po.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(W2,"validateNoSUPerms");function Q2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return v2(new Error,s,H2.BAD_REQUEST)}else return null}a(Q2,"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 wp=T((Nue,GC)=>{"use strict";var HC=Gr(),qC=Fr(),z2=Oi(),Np=BC(),bp=un(),J2=require("uuid").v4,X2=require("util"),B_=b(),j2=$(),yp=qC.searchByValue,Z2=qC.searchByHash,e4=X2.promisify(z2.delete),t4=Bs(),r4=No(),{hdb_errors:s4,handleHDBError:Bo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:H_}=s4,{UserEventMsg:Ip}=ds();GC.exports={addRole:n4,alterRole:i4,dropRole:o4,listRoles:a4};function Op(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(Op,"scrubRoleDetails");async function n4(e){let t=Np.addRoleValidation(e);if(t)throw t;e=Op(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 yp(r)||[])}catch(i){throw Bo(i)}if(s&&s.length>0)throw Bo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),H_.CONFLICT,void 0,void 0,!0);e.id||(e.id=J2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await HC.insert(n),bp.signalUserChange(new Ip(process.pid)),e=Op(e),e}a(n4,"addRole");async function i4(e){let t=Np.alterRoleValidation(e);if(t)throw t;e=Op(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await HC.update(r)}catch(n){throw Bo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Bo(new Error,"Invalid role id",H_.BAD_REQUEST,void 0,void 0,!0);return await bp.signalUserChange(new Ip(process.pid)),e}a(i4,"alterRole");async function o4(e){let t=Np.dropRoleValidation(e);if(t)throw Bo(new Error,t,H_.BAD_REQUEST,void 0,void 0,!0);let r=new r4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await Z2(r));if(s.length===0)throw Bo(new Error,FC.ROLE_NOT_FOUND,H_.NOT_FOUND,void 0,void 0,!0);let n=new t4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yp(n)),o=!1;if(j2.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 e4(c),bp.signalUserChange(new Ip(process.pid)),`${s[0].role} successfully deleted`}a(o4,"dropRole");async function a4(){return yp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(a4,"listRoles")});var $C=T((yue,VC)=>{"use strict";var c4=X(),Yn=require("joi"),u4=Fe(),xC=require("moment"),l4=require("fs-extra"),Cp=require("path"),_4=require("lodash"),Lc=b(),{LOG_LEVELS:Di}=b(),d4="YYYY-MM-DD hh:mm:ss",f4=Cp.resolve(__dirname,"../logs");VC.exports=function(e){return u4.validateBySchema(e,E4)};var E4=Yn.object({from:Yn.custom(kC),until:Yn.custom(kC),level:Yn.valid(Di.NOTIFY,Di.FATAL,Di.ERROR,Di.WARN,Di.INFO,Di.DEBUG,Di.TRACE),order:Yn.valid("asc","desc"),limit:Yn.number().min(1),start:Yn.number().min(0),log_name:Yn.custom(h4)});function kC(e,t){if(xC(e,xC.ISO_8601).format(d4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(kC,"validateDatetime");function h4(e,t){if(_4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=c4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Cp.join(f4,Lc.LOG_NAMES.INSTALL):Cp.join(s,n);return l4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(h4,"validateReadLogPath")});var Dp=T((wue,KC)=>{"use strict";var q_=b(),m4=G(),p4=X(),S4=$C(),Lp=require("path"),YC=require("fs-extra"),{once:T4}=require("events"),{handleHDBError:R4,hdb_errors:g4}=j(),{PACKAGE_ROOT:A4}=b(),O4=Lp.join(A4,"logs"),N4=1e3,b4=200;KC.exports=y4;async function y4(e){let t=S4(e);if(t)throw R4(t,t.message,g4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=p4.get(q_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?q_.LOG_NAMES.HDB:e.log_name,n=s===q_.LOG_NAMES.INSTALL?Lp.join(O4,q_.LOG_NAMES.INSTALL):Lp.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?N4: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(YC.statSync(n).size-(h+5)*b4,0));let S=YC.createReadStream(n,{start:p});S.on("error",F=>{m4.error(F)});let A=0,I=[],N="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+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("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=N.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&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Kn(F,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await T4(S,"close"),I}a(y4,"readLog");function Kn(e,t,r){t==="desc"?I4(e,r):t==="asc"?w4(e,r):r.push(e)}a(Kn,"pushLineToResult");function I4(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(I4,"insertDescending");function w4(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(w4,"insertAscending")});var G_=T((Mue,JC)=>{"use strict";var Up=require("joi"),{string:F_,boolean:WC,date:C4}=Up.types(),L4=Fe(),{validateSchemaExists:Lue,validateTableExists:Due,validateSchemaName:Uue}=Us(),D4=b(),U4=ke(),QC=X();QC.initSync();var M4=F_.invalid(QC.get(D4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(U4.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(),zC={operation:F_.valid("add_node","update_node"),node_name:M4,subscriptions:Up.array().items({table:F_.optional(),schema:F_.required(),subscribe:WC.required(),publish:WC.required().custom(v4),start_time:C4.iso()}).min(1).required()};function P4(e){return L4.validateBySchema(e,Up.object(zC))}a(P4,"addUpdateNodeValidator");function v4(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(v4,"checkForFalsy");JC.exports={addUpdateNodeValidator:P4,validation_schema:zC}});var jC=T((vue,XC)=>{var B4=Fe(),H4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};XC.exports=function(e){return B4.validateObject(e,H4)}});var Pp=T((Bue,ZC)=>{"use strict";var q4=b().OPERATIONS_ENUM,Mp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=q4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ZC.exports=Mp});var tL=T((que,eL)=>{"use strict";var F4={OPERATION:"operation",REFRESH:"refresh"},vp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Bp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};eL.exports={JWTTokens:vp,TOKEN_TYPE_ENUM:F4,JWTRSAKeys:Bp}});var Mc=T((Gue,iL)=>{"use strict";var Uc=require("jsonwebtoken"),Hp=require("fs-extra"),qp=$(),$r=b(),{handleHDBError:er,hdb_errors:G4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=G4,Dc=G(),rL=Zl(),xp=xr(),x4=Gr().update,k4=Pp(),V4=un(),{UserEventMsg:$4}=ds(),Wn=X();Wn.initSync();var Fp=require("path"),{JWTTokens:Y4,JWTRSAKeys:K4,TOKEN_TYPE_ENUM:x_}=tL(),W4=Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Q4=Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",k_="RS256",Gp;iL.exports={createTokens:z4,validateOperationToken:X4,refreshOperationToken:J4,validateRefreshToken:nL};async function z4(e){if(qp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await xp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Dc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await V_(),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 sL(i,r.private_key,r.passphrase),c=await Uc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Q4,algorithm:k_,subject:x_.REFRESH}),u=rL.hash(c),_=new k4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await x4(_)}catch(f){Dc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return V4.signalUserChange(new $4(process.pid)),new Y4(o,c)}a(z4,"createTokens");async function sL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:W4,algorithm:k_,subject:x_.OPERATION})}a(sL,"signOperationToken");async function V_(){if(Gp===void 0)try{let e=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hp.readFile(e)).toString(),n=(await Hp.readFile(t)).toString(),i=(await Hp.readFile(r)).toString();Gp=new K4(i,n,s)}catch(e){throw Dc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Gp}a(V_,"getJWTRSAKeys");async function J4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await nL(e.refresh_token);let t=await V_(),r=await Uc.decode(e.refresh_token);return{operation_token:await sL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(J4,"refreshOperationToken");async function X4(e){try{let t=await V_(),r=await Uc.verify(e,t.public_key,{algorithms:k_,subject:x_.OPERATION});return await xp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Dc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(X4,"validateOperationToken");async function nL(e){let t;try{let r=await V_(),s=await Uc.verify(e,r.public_key,{algorithms:k_,subject:x_.REFRESH});t=await xp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Dc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!rL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(nL,"validateRefreshToken")});var kp=T((Vue,cL)=>{"use strict";var j4=jC(),Ho=require("passport"),Z4=require("passport-local").Strategy,e3=require("passport-http").BasicStrategy,t3=require("util"),r3=xr(),aL=t3.callbackify(r3.findAndValidateUser),kue=dr(),s3=b(),oL=Mc();Ho.use(new Z4(function(e,t,r){aL(e,t,r)}));Ho.use(new e3(function(e,t,r){aL(e,t,r)}));Ho.serializeUser(function(e,t){t(null,e)});Ho.deserializeUser(function(e,t){t(null,e)});function n3(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":Ho.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===s3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?oL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):oL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ho.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(n3,"authorize");function i3(e,t){let r=j4(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(i3,"checkPermissions");cL.exports={authorize:n3,checkPermissions:i3}});var qo=T((Yue,uL)=>{"use strict";var Vp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},$p=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};uL.exports={Node:Vp,NodeSubscription:$p}});var _L=T((Wue,lL)=>{"use strict";var o3=b().OPERATIONS_ENUM,Yp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=o3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};lL.exports=Yp});var Pc=T((zue,dL)=>{"use strict";var Kp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Wp=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)}};dL.exports={RemotePayloadObject:Kp,RemotePayloadSubscription:Wp}});var EL=T((Xue,fL)=>{"use strict";var Qp=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}};fL.exports=Qp});var pL=T((rle,mL)=>{"use strict";var a3=EL(),Zue=ze(),hL=Ue(),c3=G(),{getSchemaPath:ele,getTransactionAuditStorePath:tle}=ve(),{getDatabases:u3}=(fe(),Z(Ce));mL.exports=l3;async function l3(e){let t=new a3;try{let r=u3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await hL.environmentDataSize(schema_path,e.name),o=await hL.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){c3.warn(`unable to stat table dbi due to ${r}`)}return t}a(l3,"lmdbGetTableSize")});var TL=T((nle,SL)=>{"use strict";var zp=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}};SL.exports=zp});var Fo=T((cle,OL)=>{"use strict";var _3=require("fs-extra"),d3=require("path"),Gt=require("systeminformation"),Qn=G(),f3=dt(),Jp=ke(),Y_=b(),E3=pL(),AL=Si(),{getThreadInfo:RL}=Ze(),oS=X();oS.initSync();var h3=TL(),{openEnvironment:ole}=Ue(),{getSchemaPath:ale}=ve(),{database:m3}=(fe(),Z(Ce)),$_;OL.exports={getHDBProcessInfo:eS,getNetworkInfo:rS,getDiskInfo:tS,getMemoryInfo:Zp,getCPUInfo:jp,getTimeInfo:Xp,getSystemInformation:sS,systemInformation:p3,getTableSize:nS,getMetrics:iS};function Xp(){return Gt.time()}a(Xp,"getTimeInfo");async function jp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{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}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Qn.error(`error in getCPUInfo: ${e}`),{}}}a(jp,"getCPUInfo");async function Zp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Qn.error(`error in getMemoryInfo: ${e}`),{}}}a(Zp,"getMemoryInfo");async function eS(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await _3.readFile(d3.join(oS.get(Y_.CONFIG_PARAMS.ROOTPATH),Y_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Y_.NODE_ERROR_CODES.ENOENT)Qn.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 Qn.error(`error in getHDBProcessInfo: ${t}`),e}}a(eS,"getHDBProcessInfo");async function tS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return Qn.error(`error in getDiskInfo: ${t}`),e}}a(tS,"getDiskInfo");async function rS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.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 Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Qn.error(`error in getNetworkInfo: ${t}`),e}}a(rS,"getNetworkInfo");async function sS(){if($_!==void 0)return $_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,$_=e,$_}catch(t){return Qn.error(`error in getSystemInformation: ${t}`),e}}a(sS,"getSystemInformation");async function nS(){let e=[],t=await AL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await E3(s));return e}a(nS,"getTableSize");async function iS(){let e=await AL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=m3({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){Qn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(iS,"getMetrics");async function gL(){if(oS.get(Y_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await f3.getNATSReferences(),r=await t.streams.info(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Jp.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(gL,"getNatsStreamInfo");async function p3(e){let t=new h3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await sS(),t.time=Xp(),t.cpu=await jp(),t.memory=await Zp(),t.disk=await tS(),t.network=await rS(),t.harperdb_processes=await eS(),t.table_size=await nS(),t.metrics=await iS(),t.threads=await RL(),t.replication=await gL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await sS();break;case"time":t.time=Xp();break;case"cpu":t.cpu=await jp();break;case"memory":t.memory=await Zp();break;case"disk":t.disk=await tS();break;case"network":t.network=await rS();break;case"harperdb_processes":t.harperdb_processes=await eS();break;case"table_size":t.table_size=await nS();break;case"database_metrics":case"metrics":t.metrics=await iS();break;case"threads":t.threads=await RL();break;case"replication":t.replication=await gL();break;default:break}return t}a(p3,"systemInformation")});var aS=T((lle,NL)=>{"use strict";NL.exports={version:S3,printVersion:T3};var K_=Rc();function S3(){if(K_)return K_.version}a(S3,"version");function T3(){K_&&console.log(`HarperDB Version ${K_.version}`)}a(T3,"printVersion")});var Gs=T((Ele,wL)=>{"use strict";var R3=Gr(),cS=$(),g3=require("util"),Ui=b(),bL=X();bL.initSync();var A3=kp(),yL=Fr(),{Node:dle,NodeSubscription:fle}=qo(),O3=No(),N3=_L(),{RemotePayloadObject:b3,RemotePayloadSubscription:y3}=Pc(),{handleHDBError:I3,hdb_errors:w3}=j(),{HTTP_STATUS_CODES:C3,HDB_ERROR_MSGS:L3}=w3,D3=Bs(),U3=Fo(),M3=aS(),{getDatabases:P3}=(fe(),Z(Ce)),v3=g3.promisify(A3.authorize),B3=yL.searchByHash,H3=yL.searchByValue;wL.exports={authHeaderToUser:q3,isEmpty:F3,getNodeRecord:G3,upsertNodeRecord:x3,buildNodePayloads:k3,checkClusteringEnabled:V3,getAllNodeRecords:$3,getSystemInfo:Y3,reverseSubscription:IL};async function q3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await v3(t,null),e}a(q3,"authHeaderToUser");function F3(e){return e==null}a(F3,"isEmpty");async function G3(e){let t=new O3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return B3(t)}a(G3,"getNodeRecord");async function x3(e){let t=new N3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return R3.upsert(t)}a(x3,"upsertNodeRecord");function IL(e){if(cS.isEmpty(e.subscribe)||cS.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(IL,"reverseSubscription");function k3(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=cS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=IL(c),E=P3()[u]?.[_],h=new y3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new b3(r,t,n,s)}a(k3,"buildNodePayloads");function V3(){if(!bL.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw I3(new Error,L3.CLUSTERING_NOT_ENABLED,C3.BAD_REQUEST,void 0,void 0,!0)}a(V3,"checkClusteringEnabled");async function $3(){let e=new D3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await H3(e))}a($3,"getAllNodeRecords");async function Y3(){let e=await U3.getSystemInformation();return{hdb_version:M3.version(),node_version:e.node_version,platform:e.platform}}a(Y3,"getSystemInfo")});var uS=T((mle,BL)=>{"use strict";var W_=dt(),CL=$(),LL=ke(),DL=b(),Q_=G(),UL=M_(),K3=Cm(),{RemotePayloadObject:W3}=Pc(),{handleHDBError:ML,hdb_errors:Q3}=j(),{HTTP_STATUS_CODES:PL}=Q3,{NodeSubscription:vL}=qo();BL.exports=z3;async function z3(e,t){let r;try{r=await W_.request(`${t}.${LL.REQUEST_SUFFIX}`,new W3(DL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Q_.trace("Response from remote describe all request:",r)}catch(o){Q_.error(`addNode received error from describe all request to remote node: ${o}`);let c=W_.requestErrorHandler(o,"add_node",t);throw ML(new Error,c,PL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===LL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ML(new Error,o,PL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===DL.SYSTEM_SCHEMA_NAME){await W_.createLocalTableStream(c,u);let h=new vL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=CL.doesSchemaExist(c),l=s[c]!==void 0,d=u?CL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Q_.trace(`addNode creating schema: ${c}`),await UL.createSchema({operation:"create_schema",schema:c})),!d&&f){Q_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new K3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await UL.createTable(h)}await W_.createLocalTableStream(c,u);let E=new vL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(z3,"reviewSubscriptions")});var Hc=T((Sle,FL)=>{"use strict";var{handleHDBError:z_,hdb_errors:J3}=j(),{HTTP_STATUS_CODES:J_}=J3,{addUpdateNodeValidator:X3}=G_(),vc=G(),qL=b(),HL=ke(),j3=$(),lS=dt(),Bc=Gs(),Z3=X(),eX=uS(),{Node:tX,NodeSubscription:rX}=qo(),{broadcast:sX}=Ze(),nX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",iX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",oX=Z3.get(qL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=aX;async function aX(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=X3(e);if(r)throw z_(r,r.message,J_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Bc.getNodeRecord(s);if(!j3.isEmptyOrZeroLength(d))throw z_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,J_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await eX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=nX,o;let c=Bc.buildNodePayloads(n,oX,qL.OPERATIONS_ENUM.ADD_NODE,await Bc.getSystemInfo());vc.trace("addNode sending remote payload:",c);let u;try{u=await lS.request(`${s}.${HL.REQUEST_SUFFIX}`,c)}catch(d){vc.error(`addNode received error from request: ${d}`);let f=lS.requestErrorHandler(d,"add_node",s);throw z_(new Error,f,J_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===HL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw z_(new Error,d,J_.INTERNAL_SERVER_ERROR,"error",d)}vc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];vc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await lS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new rX(E.schema,E.table,E.publish,E.subscribe))}let l=new tX(s,_,u.system_info);return await Bc.upsertNodeRecord(l),sX({type:"nats_update"}),i.length>0?o.message=iX:o.message=`Successfully added '${s}' to manifest`,o}a(aX,"addNode")});var dS=T((Rle,kL)=>{"use strict";var{handleHDBError:X_,hdb_errors:cX}=j(),{HTTP_STATUS_CODES:j_}=cX,{addUpdateNodeValidator:uX}=G_(),qc=G(),xL=b(),GL=ke(),lX=$(),_S=dt(),Fc=Gs(),_X=X(),{cloneDeep:dX}=require("lodash"),fX=uS(),{NodeSubscription:EX}=qo(),{broadcast:hX}=Ze(),mX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",SX=_X.get(xL.CONFIG_PARAMS.CLUSTERING_NODENAME);kL.exports=TX;async function TX(e){qc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=uX(e);if(t)throw X_(t,t.message,j_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=dX(await Fc.getNodeRecord(r));if(lX.isEmptyOrZeroLength(s))throw X_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,j_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await fX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=mX,o;let c=Fc.buildNodePayloads(n,SX,xL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await _S.request(`${r}.${GL.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=_S.requestErrorHandler(_,"update_node",r);throw X_(new Error,l,j_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===GL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw X_(new Error,_,j_.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await _S.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await RX(s[0],n,u.system_info),i.length>0?o.message=pX:o.message=`Successfully updated '${r}'`,o}a(TX,"updateNode");async function RX(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 EX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),hX({type:"nats_update"})}a(RX,"updateNodeTable")});var WL=T((Ale,KL)=>{"use strict";var YL=require("joi"),{string:VL}=YL.types(),gX=Fe(),$L=b(),AX=X(),OX=ke();KL.exports=NX;function NX(e){let t=VL.invalid(AX.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(OX.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=YL.object({operation:VL.valid($L.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return gX.validateBySchema(e,r)}a(NX,"removeNodeValidator")});var xc=T((Nle,ZL)=>{"use strict";var{handleHDBError:QL,hdb_errors:bX}=j(),{HTTP_STATUS_CODES:zL}=bX,yX=WL(),Gc=G(),JL=Gs(),IX=$(),Z_=b(),XL=ke(),jL=dt(),wX=X(),{RemotePayloadObject:CX}=Pc(),{NodeSubscription:LX}=qo(),DX=dc(),UX=Oi(),{broadcast:MX}=Ze(),PX=wX.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);ZL.exports=vX;async function vX(e){Gc.trace("removeNode called with:",e),JL.checkClusteringEnabled();let t=yX(e);if(t)throw QL(t,t.message,zL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await JL.getNodeRecord(r);if(IX.isEmptyOrZeroLength(s))throw QL(new Error,`Node '${r}' was not found.`,zL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new CX(Z_.OPERATIONS_ENUM.REMOVE_NODE,PX,[]),i,o=!1;try{i=await jL.request(`${r}.${XL.REQUEST_SUFFIX}`,n),Gc.trace("Remove node reply from remote node:",r,i)}catch(u){Gc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Gc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new LX(l.schema,l.table,!1,!1);await jL.updateWorkStream(d,r)}let c=new DX(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await UX.deleteRecord(c),MX({type:"nats_update"}),i?.status===XL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gc.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(vX,"removeNode")});var rD=T((yle,tD)=>{"use strict";var eD=require("joi"),{string:BX,array:HX}=eD.types(),qX=Fe(),FX=G_();tD.exports=GX;function GX(e){let t=eD.object({operation:BX.valid("configure_cluster").required(),connections:HX.items(FX.validation_schema).required()});return qX.validateBySchema(e,t)}a(GX,"configureClusterValidator")});var fS=T((wle,aD)=>{"use strict";var xX=b(),ed=G(),kX=$(),VX=xc(),$X=Hc(),sD=Gs(),YX=rD(),{handleHDBError:nD,hdb_errors:KX}=j(),{HTTP_STATUS_CODES:iD}=KX,WX="Configure cluster complete.",QX="Failed to configure the cluster. Check the logs for more details.",zX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";aD.exports=JX;async function JX(e){ed.trace("configure cluster called with:",e),sD.checkClusteringEnabled();let t=YX(e);if(t)throw nD(t,t.message,iD.BAD_REQUEST,void 0,void 0,!0);let r=await sD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(oD(VX,{operation:xX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);ed.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(oD($X,E,E.node_name))}let c=await Promise.allSettled(i);ed.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"&&(ed.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(kX.isEmptyOrZeroLength(u))return{message:WX,connections:_};if(l)return{message:zX,failed_nodes:u,connections:_};throw nD(new Error,QX,iD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(JX,"configureCluster");async function oD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(oD,"functionWrapper")});var uD=T((Lle,cD)=>{"use strict";var td=require("joi"),XX=Fe(),{validateSchemaExists:jX,validateTableExists:ZX,validateSchemaName:ej}=Us(),tj=td.object({operation:td.string().valid("purge_stream"),schema:td.string().custom(jX).custom(ej).required(),table:td.string().custom(ZX).required()});function rj(e){return XX.validateBySchema(e,tj)}a(rj,"purgeStreamValidator");cD.exports=rj});var ES=T((Ule,lD)=>{"use strict";var{handleHDBError:sj,hdb_errors:nj}=j(),{HTTP_STATUS_CODES:ij}=nj,oj=uD(),aj=dt(),cj=Gs();lD.exports=uj;async function uj(e){let t=oj(e);if(t)throw sj(t,t.message,ij.BAD_REQUEST,void 0,void 0,!0);cj.checkClusteringEnabled();let{schema:r,table:s}=e;return await aj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(uj,"purgeStream")});var sd=T((Ple,mD)=>{"use strict";var mS=Gs(),lj=dt(),fD=X(),rd=b(),Mi=ke(),_j=$(),hS=G(),{RemotePayloadObject:dj}=Pc(),{ErrorCode:_D}=require("nats"),dD=fD.get(rd.CONFIG_PARAMS.CLUSTERING_ENABLED),ED=fD.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);mD.exports={clusterStatus:fj,buildNodeStatus:hD};async function fj(){let e={node_name:ED,is_enabled:dD,connections:[]};if(!dD)return e;let t=await mS.getAllNodeRecords();if(_j.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(hD(t[s],e.connections));return await Promise.allSettled(r),e}a(fj,"clusterStatus");async function hD(e,t){let r=e.name,s=new dj(rd.OPERATIONS_ENUM.CLUSTER_STATUS,ED,void 0,await mS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await lj.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,hS.error(`Error getting node status from ${r} `,n))}catch(u){hS.warn(`Error getting node status from ${r}`,u),u.code===_D.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===_D.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ej(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!==rd.PRE_4_0_0_VERSION&&await mS.upsertNodeRecord(u)}catch(u){hS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(hD,"buildNodeStatus");function Ej(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(Ej,"NodeStatusObject")});var SS=T((Ble,pD)=>{"use strict";var{handleHDBError:hj,hdb_errors:mj}=j(),{HTTP_STATUS_CODES:pj}=mj,Sj=dt(),Tj=Gs(),pS=$(),nd=require("joi"),Rj=Fe(),gj=2e3,Aj=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});pD.exports=Oj;async function Oj(e){Tj.checkClusteringEnabled();let t=Rj.validateBySchema(e,Aj);if(t)throw hj(t,t.message,pj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||pS.autoCastBoolean(s),o=n===void 0||pS.autoCastBoolean(n),c={nodes:[]},u=await Sj.getServerList(r??gj),_={};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:pS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Oj,"clusterNetwork")});var gD=T((qle,RD)=>{"use strict";var TS=require("joi"),SD=Fe(),{route_constraints:TD}=mE();RD.exports={setRoutesValidator:Nj,deleteRoutesValidator:bj};function Nj(e){let t=TS.object({server:TS.valid("hub","leaf").required(),routes:TD.required()});return SD.validateBySchema(e,t)}a(Nj,"setRoutesValidator");function bj(e){let t=TS.object({routes:TD.required()});return SD.validateBySchema(e,t)}a(bj,"deleteRoutesValidator")});var gS=T((Gle,bD)=>{"use strict";var Pi=hr(),RS=$(),id=b(),AD=gD(),{handleHDBError:OD,hdb_errors:yj}=j(),{HTTP_STATUS_CODES:ND}=yj,Ij="cluster routes successfully set",wj="cluster routes successfully deleted";bD.exports={setRoutes:Cj,getRoutes:Lj,deleteRoutes:Dj};function Cj(e){let t=AD.setRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.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=RS.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"?Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Ij,set:o,skipped:i}}a(Cj,"setRoutes");function Lj(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Lj,"getRoutes");function Dj(e){let t=AD.deleteRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.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=RS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=RS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:wj,deleted:i,skipped:o}}a(Dj,"deleteRoutes")});var ID=T((kle,yD)=>{"use strict";var kc=require("alasql"),vi=require("recursive-iterator"),Ts=G(),Uj=$(),Vc=b(),AS=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,Pj(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=>Vc.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=>!Vc.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][Vc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Mj(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(_=>!Vc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new kc.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 Mj(e){return e.filter(t=>t[Vc.PERMS_CRUD_ENUM.READ])}a(Mj,"filterReadRestrictedAttrs");function Pj(e,t,r,s,n){vj(e,t,r,s,n)}a(Pj,"interpretAST");function $c(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($c,"addSchemaTableToMap");function vj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof kc.yy.Insert?Fj(e,t,r):e instanceof kc.yy.Select?Bj(e,t,r,s,n):e instanceof kc.yy.Update?Hj(e,t,r):e instanceof kc.yy.Delete?qj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(vj,"getRecordAttributesAST");function Bj(e,t,r,s,n){if(!e){Ts.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Uj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{$c(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),$c(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{Ts.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{Ts.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{Ts.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{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Bj,"getSelectAttributes");function Hj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(Hj,"getUpdateAttributes");function qj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(qj,"getDeleteAttributes");function Fj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;$c(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.into.tableid,n,i.columnid,t,r)}a(Fj,"getInsertAttributes");function OS(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(OS,"pushAttribute");yD.exports=AS});var yS=T(($le,DD)=>{var od=rc(),wD=require("chalk"),br=G(),CD=require("prompt"),{promisify:Gj}=require("util"),NS=b(),xj=require("fs-extra"),kj=require("path"),Vj=$(),$j=aS(),LD=X();LD.initSync();var Yj=require("moment"),Kj=Gj(CD.get),Wj=kj.join(LD.getHdbBasePath(),NS.LICENSE_KEY_DIR_NAME,NS.LICENSE_FILE_NAME,NS.LICENSE_FILE_NAME);DD.exports={getFingerprint:zj,setLicense:Qj,parseLicense:bS,register:Jj,getRegistrationInfo:jj};async function Qj(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await bS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw br.error(r),br.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Qj,"setLicense");async function zj(){let e={};try{e=await od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(zj,"getFingerprint");async function bS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=od.validateLicense(e,t);if(br.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(br.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(br.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{br.info("writing license to disk"),await xj.writeFile(Wj,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(bS,"parseLicense");async function Jj(){let e=await Xj();return bS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Jj,"register");async function Xj(){let e=await od.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:wD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:wD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{CD.start()}catch(s){br.error(s)}let r;try{r=await Kj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Xj,"promptForRegistration");async function jj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await od.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Vj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$j.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Yj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(jj,"getRegistrationInfo")});var MD=T((Kle,UD)=>{"use strict";var Zj=ke(),IS=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+Zj.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"}};UD.exports=IS});var BD=T((Qle,vD)=>{"use strict";var PD=ke(),wS=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+PD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+PD.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"}};vD.exports=wS});var qD=T((Jle,HD)=>{"use strict";var CS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};HD.exports=CS});var GD=T((jle,FD)=>{"use strict";var eZ=ke(),LS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+eZ.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=LS});var MS=T((e_e,VD)=>{"use strict";var Go=require("path"),ud=require("fs-extra"),tZ=MD(),rZ=BD(),sZ=qD(),nZ=GD(),DS=xr(),ko=$(),sr=hr(),cd=b(),Yc=ke(),{CONFIG_PARAMS:je}=cd,Kc=G(),Wc=X(),xD=an(),US=dt(),xo="clustering",iZ=1e4,kD=5;VD.exports={generateNatsConfig:aZ,removeNatsConfig:cZ,getHubConfigPath:oZ};function oZ(){let e=Wc.get(je.ROOTPATH);return Go.join(e,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER)}a(oZ,"getHubConfigPath");async function aZ(e=!1,t=void 0){Wc.initSync();let r=Wc.get(je.ROOTPATH),s=Go.join(r,xo,Yc.PID_FILES.HUB),n=Go.join(r,xo,Yc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Go.join(r,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER),c=Go.join(r,xo,Yc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await US.checkNATSServerInstalled()||ld("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await DS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await DS.getClusterUser();(ko.isEmpty(A)||A.active!==!0)&&ld(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ad(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await ad(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===cd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new nZ(te.username,xD.decrypt(te.hash))),N.push(new sZ(te.username,xD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!ko.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new tZ(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ud.writeJson(o,F),Kc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new rZ(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ud.writeJson(c,B),Kc.trace(`Leaf server config written to ${c}`))}a(aZ,"generateNatsConfig");async function ad(e){let t=Wc.get(e);return ko.isEmpty(t)&&ld(`port undefined for '${e}'`),await ko.isPortTaken(t)&&ld(`'${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(ad,"isPortAvailable");function ld(e){let t=`Error generating clustering config: ${e}`;Kc.error(t),console.error(t),process.exit(1)}a(ld,"generateNatsConfigError");async function cZ(e){let{port:t,config_file:r}=US.getServerConfig(e),{username:s,decrypt_hash:n}=await DS.getClusterUser(),i=0,o=2e3;for(;i<kD;){try{let _=await US.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Kc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=kD)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 ko.async_set_timeout(o*(i*2))}let c="0".repeat(iZ),u=Go.join(Wc.get(je.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),Kc.notify(e,"started.")}a(cZ,"removeNatsConfig")});var zD=T((r_e,QD)=>{"use strict";var yr=X(),uZ=rc(),ce=b(),Qc=ke(),dn=require("path"),{PACKAGE_ROOT:dd}=b(),$D=X(),_d=$(),Vo="/dev/null",lZ=dn.join(dd,"launchServiceScripts"),YD=dn.join(dd,"utility/scripts"),_Z=dn.join(YD,ce.HDB_RESTART_SCRIPT),KD=dn.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Qc.NATS_BINARY_NAME);function WD(){let t=uZ.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 _d.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:dd}}a(WD,"generateMainServerConfig");var dZ=9930;function fZ(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.HUB_SERVER),r=dn.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=$D.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==dZ?"-"+s:""),script:KD,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 yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(fZ,"generateNatsHubServerConfig");var EZ=9940;function hZ(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.LEAF_SERVER),r=dn.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=$D.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==EZ?"-"+s:""),script:KD,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 yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(hZ,"generateNatsLeafServerConfig");function mZ(){yr.initSync();let e=dn.join(yr.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:lZ,autorestart:!1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(mZ,"generateClusteringUpgradeV4ServiceConfig");function pZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return _d.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:YD},script:_Z}}a(pZ,"generateRestart");function SZ(){return{apps:[WD()]}}a(SZ,"generateAllServiceConfigs");QD.exports={generateAllServiceConfigs:SZ,generateMainServerConfig:WD,generateRestart:pZ,generateNatsHubServerConfig:fZ,generateNatsLeafServerConfig:hZ,generateClusteringUpgradeV4ServiceConfig:mZ}});var HS=T((i_e,cU)=>{"use strict";var Ae=b(),TZ=$(),fn=MS(),zc=dt(),xs=ke(),zn=zD(),fd=X(),Jn=G(),RZ=Gs(),{startWorker:JD,onMessageFromWorkers:gZ}=Ze(),AZ=Fo(),n_e=require("util"),OZ=require("child_process"),NZ=require("fs"),{execFile:bZ}=OZ,pe;cU.exports={enterPM2Mode:yZ,start:Xn,stop:PS,reload:jD,restart:ZD,list:vS,describe:tU,connect:En,kill:DZ,startAllServices:UZ,startService:BS,getUniqueServicesList:rU,restartAllServices:MZ,isServiceRegistered:sU,reloadStopStart:nU,restartHdb:eU,deleteProcess:CZ,startClusteringProcesses:oU,startClusteringThreads:aU,isHdbRestartRunning:LZ,isClusteringRunning:vZ,stopClustering:PZ,reloadClustering:BZ};var Jc=!1;gZ(e=>{e.type==="restart"&&fd.initSync(!0)});function yZ(){Jc=!0}a(yZ,"enterPM2Mode");function En(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Jn.setupConsoleLogging(),r&&t(r),e(s)})})}a(En,"connect");var nr,IZ=10,XD;function Xn(e,t=!1){if(Jc)return wZ(e);let r=bZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!XD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<IZ&&(NZ.existsSync(fn.getHubConfigPath())?Xn(e):(await fn.generateNatsConfig(!0),Xn(e),await new Promise(c=>setTimeout(c,3e3)),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=fd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=xs.LOG_LEVELS[f]}if(xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{XD=!0,nr&&(nr.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)}nr.push(r)}a(Xn,"start");function wZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(wZ,"startWithPM2");function PS(e){if(!Jc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await En()}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(PS,"stop");function jD(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(jD,"reload");function ZD(e){if(!Jc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(ZD,"restart");function CZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(CZ,"deleteProcess");async function eU(){await Xn(zn.generateRestart())}a(eU,"restartHdb");async function LZ(){let e=await vS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(LZ,"isHdbRestartRunning");function vS(){return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(vS,"list");function tU(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(tU,"describe");function DZ(){if(!Jc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(DZ,"kill");async function UZ(){try{await oU(),await aU(),await Xn(zn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(UZ,"startAllServices");async function BS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=zn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=zn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=zn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=zn.generateNatsHubServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=zn.generateNatsLeafServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=zn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Xn(r)}catch(r){throw pe?.disconnect(),r}}a(BS,"startService");async function rU(){try{let e=await vS(),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(rU,"getUniqueServicesList");async function MZ(e=[]){try{let t=!1,r=await rU();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 ZD(o))}t&&await nU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(MZ,"restartAllServices");async function sU(e){if(nr?.find(r=>r.name===e))return!0;let t=await AZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(sU,"isServiceRegistered");async function nU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?fd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):fd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await tU(e),s=TZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await PS(e),await BS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await eU():await jD(e)}a(nU,"reloadStopStart");var iU;async function oU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await BS(r,e)}}a(oU,"startClusteringProcesses");async function aU(){iU=JD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await zc.createWorkQueueStream(xs.WORK_QUEUE_CONSUMER_NAMES),await zc.updateIngestStreamConsumer(),await zc.updateLocalStreams();let e=await RZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Jn.info("Starting clustering upgrade 4.0.0 process"),JD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(aU,"startClusteringThreads");async function PZ(){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 iU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await PS(t)}}a(PZ,"stopClustering");async function vZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await sU(t)===!1)return!1}return!0}a(vZ,"isClusteringRunning");async function BZ(){await fn.generateNatsConfig(!0),await zc.reloadNATSHub(),await zc.reloadNATSLeaf(),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(BZ,"reloadClustering")});var pd=T((a_e,hU)=>{"use strict";var HZ=require("minimist"),{isMainThread:GS,parentPort:_U}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Xc}=Ve,ks=G(),xS=$(),Ed=MS(),$o=dt(),qS=ke(),dU=hr(),Vs=HS(),uU=Fo(),qZ=iE(),{restartWorkers:hd,onMessageByType:FZ}=Ze(),{handleHDBError:GZ,hdb_errors:xZ}=j(),{HTTP_STATUS_CODES:kZ}=xZ,md=X();md.initSync();var jc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,VZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lU="Clustering is not enabled so cannot be restarted",$Z="Invalid service",Yo,Yr;hU.exports={restart:fU,restartService:kS};GS&&FZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?kS({service:e.workerType}):fU({operation:"restart"})});async function fU(e){Yr=Object.keys(e).length===0,Yo=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=HZ(process.argv);if(t.service){await kS(t);return}if(Yr&&!Yo){console.error(VZ);return}if(Yr&&console.log(jc),Yo){Vs.enterPM2Mode(),ks.notify(jc);let r=qZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return xS.isEmptyOrZeroLength(Object.keys(r))||dU.updateConfigValue(void 0,void 0,r,!0,!0),KZ(),jc}return GS?(ks.notify(jc),setTimeout(()=>{hd()},50)):_U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),jc}a(fU,"restart");async function kS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw GZ(new Error,$Z,kZ.BAD_REQUEST,void 0,void 0,!0);if(Yo=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!GS)return _U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Xc.clustering:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}Yr&&console.log("Restarting clustering"),ks.notify("Restarting clustering"),await EU();break;case Xc.clustering_config:case Xc["clustering config"]:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}Yr&&console.log("Restarting clustering_config"),ks.notify("Restarting clustering_config"),await Vs.reloadClustering();break;case"custom_functions":case"custom functions":case Xc.harperdb:case Xc.http_workers:if(Yr&&!Yo){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}Yr&&console.log("Restarting http_workers"),ks.notify("Restarting http_workers"),Yr?await Vs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ks.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(kS,"restartService");async function YZ(){await $o.publishToStream(`${qS.SUBJECT_PREFIXES.TXN}.${qS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,qS.WORK_QUEUE_CONSUMER_NAMES.stream_name,$o.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(YZ,"postDummyNatsMsg");async function KZ(){await EU(),await Vs.restart(Ve.HDB_PROC_DESCRIPTOR),await xS.async_set_timeout(2e3),md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await FS(),Yr&&(await $o.closeConnection(),process.exit(0))}a(KZ,"restartPM2Mode");async function EU(){if(!dU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uU.getHDBProcessInfo()).clustering.length===0)ks.trace("Clustering not running, restart will start clustering services"),await Ed.generateNatsConfig(!0),await Vs.startClusteringProcesses(),await Vs.startClusteringThreads(),await FS(),Yr&&await $o.closeConnection();else{await YZ(),await Ed.generateNatsConfig(!0),Yo?(ks.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uU.getHDBProcessInfo()).clustering.forEach(n=>{ks.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await xS.async_set_timeout(3e3),await FS(),await $o.updateLocalStreams(),Yr&&await $o.closeConnection(),ks.trace("Restart clustering restarting ingest and reply service threads");let t=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EU,"restartClustering");async function FS(){await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(FS,"removeNatsConfig")});var yU=T((l_e,bU)=>{"use strict";var u_e=require("lodash"),ir=b(),{handleHDBError:mU,hdb_errors:WZ}=j(),{HDB_ERROR_MSGS:QZ,HTTP_STATUS_CODES:zZ}=WZ,VS=G();bU.exports={getRolePermissions:XZ};var Bi=Object.create(null),JZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),RU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),gU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),$S=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...gU(t,r,s,n)}),"table_perms_template"),pU=a((e,t=gU())=>({attribute_name:e,describe:NU(t),[Zc]:t[Zc],[YS]:t[YS],[KS]:t[KS]}),"attr_perms_template"),SU=a((e,t=!1)=>({attribute_name:e,describe:t,[Zc]:t}),"timestamp_attr_perms_template"),{READ:Zc,INSERT:YS,UPDATE:KS}=ir.PERMS_CRUD_ENUM,AU=Object.values(ir.PERMS_CRUD_ENUM),OU=[Zc,YS,KS];function XZ(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[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=jZ(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=JZ(s),Bi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.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 VS.error(s),VS.debug(r),mU(new Error,QZ.OUTDATED_PERMS_TRANSLATION_ERROR,zZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw VS.error(s),mU(new Error)}}}a(XZ,"getRolePermissions");function jZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.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]=ZZ(t[i]);return}r[i]=RU(),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],_=e5(c,u);r[i].describe||AU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=$S()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=$S()})}),r}a(jZ,"translateRolePermissions");function ZZ(e){let t=RU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=$S(!0,!0,!0,!0,!0)}),t}a(ZZ,"createStructureUserPermissions");function e5(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 ir.TIME_STAMP_NAMES.includes(d)&&(f=SU(d,l[Zc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=NU(l),n.attribute_permissions.push(l),c||t5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=SU(_):l=pU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=TU(n),n}else return e.describe=TU(e),e}a(e5,"getTableAttrPerms");function TU(e){return AU.filter(t=>e[t]).length>0}a(TU,"getSchemaTableDescribePerm");function NU(e){return OU.filter(t=>e[t]).length>0}a(NU,"getAttributeDescribePerm");function t5(e,t){OU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(t5,"checkForHashPerms")});var IU={};Qe(IU,{Resources:()=>Sd,keyArrayToString:()=>Ko,resetResources:()=>r5,resources:()=>jn});function r5(){return jn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,jn,eu=Te(()=>{fi();Sd=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(r5,"resetResources");a(Ko,"keyArrayToString")});var Hi,WS=Te(()=>{Hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let 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 tu={};Qe(tu,{authentication:()=>vU,bypassAuth:()=>u5,login:()=>_5,logout:()=>d5,start:()=>l5});function u5(){PU=!0}async function vU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?o5?i5:[]:n5?s5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Td&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Td&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Td){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 CU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new gd.AuthAuditLog(E,h,wt.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===wt.AUTH_AUDIT_STATUS.SUCCESS?wU.notify(S):wU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,Rd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Rd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return c5&&(qi.get(h)||(qi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Zn({error:A.message},e)})}qi.set(s,d),a5&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):PU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,DU.getSuperUser)());Td&&(e.session.update=function(E){if(!u){u=(0,UU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,CU.put(E)},e.login=async function(E,h){e.user=await ut.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")&&jn.loginPath?(f.status=302,f.headers.set("Location",jn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function l5({server:e,port:t}){e.request(vU,{port:t||"all"}),LU||(LU=!0,setInterval(()=>{qi=new Map},Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),MU.user.addListener(()=>{qi=new Map}))}async function _5(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 d5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var DU,Rd,UU,Kr,wt,gd,MU,wU,s5,n5,i5,o5,CU,Td,PU,a5,c5,qi,LU,Ad=Te(()=>{DU=D(xr());Mr();eu();Rd=D(Mc());fe();UU=require("uuid"),Kr=D(X()),wt=D(b()),gd=D(G()),MU=D(nc());WS();Wo();wU=(0,gd.loggerWithTag)("auth-event");Kr.initSync();s5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),n5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORS),i5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),o5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),CU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,PU=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,a5=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,c5=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;ut.onInvalidatedUser(()=>{qi=new Map});a(u5,"bypassAuth");a(vU,"authentication");a(l5,"start");a(_5,"login");a(d5,"logout")});var kU=T((A_e,xU)=>{"use strict";var Se=require("joi"),BU=require("fs-extra"),HU=require("path"),mn=Fe(),qU=X(),FU=b(),GU=G(),{hdb_errors:f5}=j(),{HDB_ERROR_MSGS:xt}=f5,hn=/^[a-zA-Z0-9-_]+$/;xU.exports={getDropCustomFunctionValidator:h5,setCustomFunctionValidator:m5,addComponentValidator:R5,dropCustomFunctionProjectValidator:g5,packageComponentValidator:A5,deployComponentValidator:O5,setComponentFileValidator:p5,getComponentFileValidator:T5,dropComponentFileValidator:S5};function Od(e,t,r){try{let s=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),n=HU.join(s,t);return BU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return GU.error(s),r.message(xt.VALIDATION_ERR)}}a(Od,"checkProjectExists");function ru(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ru,"checkFilePath");function E5(e,t,r,s){try{let n=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=HU.join(n,e,t,r+".js");return BU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return GU.error(n),s.message(xt.VALIDATION_ERR)}}a(E5,"checkFileExists");function h5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(hn).custom(E5.bind(null,e.project,e.type)).custom(ru).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return mn.validateBySchema(e,t)}a(h5,"getDropCustomFunctionValidator");function m5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(ru).required(),function_content:Se.string().required()});return mn.validateBySchema(e,t)}a(m5,"setCustomFunctionValidator");function p5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(p5,"setComponentFileValidator");function S5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).optional()});return mn.validateBySchema(e,t)}a(S5,"dropComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(ru).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(T5,"getComponentFileValidator");function R5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(R5,"addComponentValidator");function g5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(g5,"dropCustomFunctionProjectValidator");function A5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return mn.validateBySchema(e,t)}a(A5,"packageComponentValidator");function O5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return mn.validateBySchema(e,t)}a(O5,"deployComponentValidator")});var Id=T((N_e,zU)=>{"use strict";var Nd=require("joi"),bd=require("path"),VU=require("fs-extra"),{exec:N5}=require("child_process"),b5=require("util"),$U=b5.promisify(N5),su=b(),{handleHDBError:Qo,hdb_errors:y5}=j(),{HTTP_STATUS_CODES:zo}=y5,nu=X(),I5=Fe(),Jo=G();nu.initSync();var QS=nu.get(su.CONFIG_PARAMS.COMPONENTSROOT),YU="npm install --omit=dev --json",w5=`${YU} --dry-run`;zU.exports={installModules:U5,auditModules:M5,installAllRootModules:C5,uninstallRootModule:L5,linkHarperdb:D5};async function C5(e=!1){await yd(),await iu(e?"npm install --ignore-scripts":"npm install",nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(C5,"installAllRootModules");async function L5(e){await iu(`npm uninstall ${e}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(L5,"uninstallRootModule");async function D5(){await yd(),await iu(`npm link ${su.PACKAGE_ROOT}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(D5,"linkHarperdb");async function iu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await $U(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
10
10
  `,""))}return s&&!s.includes("Debugger listening")&&Jo.error("Error running NPM command:",e,s),Jo.trace(r,s),r.replace(`
11
- `,"")}a(iu,"runCommand");async function D5(e){Jo.info(`starting installModules for request: ${e}`);let t=QU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?I5:YU;await yd(),await WU(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 _=bd.join(QS,u),l,d=null;try{let{stdout:f,stderr:E}=await $U(n,{cwd:_});l=f?f.replace(`
11
+ `,"")}a(iu,"runCommand");async function U5(e){Jo.info(`starting installModules for request: ${e}`);let t=QU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?w5:YU;await yd(),await WU(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 _=bd.join(QS,u),l,d=null;try{let{stdout:f,stderr:E}=await $U(n,{cwd:_});l=f?f.replace(`
12
12
  `,""):null,d=E?E.replace(`
13
- `,""):null}catch(f){f.stderr?i[u].npm_error=KU(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 Jo.info(`finished installModules with response ${i}`),i}a(D5,"installModules");function KU(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(KU,"parseNPMStdErr");async function U5(e){Jo.info(`starting auditModules for request: ${e}`);let t=QU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r}=e;await yd(),await WU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=bd.join(QS,o);s[o]={npm_output:null,npm_error:null};try{let u=await iu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KU(u.stderr)}}return Jo.info(`finished auditModules with response ${s}`),s}a(U5,"auditModules");async function yd(){try{return await iu("npm -v"),!0}catch{throw Qo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",zo.BAD_REQUEST,void 0,void 0,!0)}}a(yd,"checkNPMInstalled");async function WU(e){if(!Array.isArray(e)||e.length===0)throw Qo(new Error,"projects argument must be an array with at least 1 element",zo.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=bd.join(QS,i.toString());if(!await VU.pathExists(o)){t.push(i);continue}let u=bd.join(o,"package.json");await VU.pathExists(u)||r.push(i)}if(t.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,zo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,zo.BAD_REQUEST,void 0,void 0,!0)}a(WU,"checkProjectPaths");function QU(e){let t=Nd.object({projects:Nd.array().min(1).items(Nd.string()).required(),dry_run:Nd.boolean().default(!1)});return y5.validateBySchema(e,t)}a(QU,"modulesValidator")});var JS=T((y_e,eM)=>{"use strict";var Xo=require("fs-extra"),zS=require("path"),wd=G(),JU=$(),Cd=b(),ZU=X(),M5=Er();eM.exports=P5;async function P5(){let e=v5(),t=ZU.get(Cd.CONFIG_PARAMS.ROOTPATH),r=zS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.PACKAGE_ROOT}},n=zS.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(JU.isEmptyOrZeroLength(e))return;if(u.code!==Cd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!JU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await XU(_);s.dependencies[u]=l+_}if(!o){wd.notify("Installing components"),await jU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await XU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(wd.notify("Removing component",u),c=!0);c&&(wd.notify("Updating components."),await jU(r,s,i))}a(P5,"installComponents");function v5(){let e=M5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(v5,"getComponentsConfig");async function XU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":zS.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(XU,"getPkgPrefix");async function jU(e,t,r){wd.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(ZU.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Xo.writeFile(e,JSON.stringify(r,null," ")):await Xo.unlink(e),s}}a(jU,"installPackages")});var ZS=T((C_e,nM)=>{"use strict";var Le=require("fs-extra"),XS=require("fast-glob"),le=require("path"),rM=require("tar-fs"),w_e=require("uuid").v4,jS=require("normalize-path"),Vs=kU(),pt=G(),Me=b(),nt=X(),ou=Er(),B5=$(),{PACKAGE_ROOT:H5}=b(),{handleHDBError:St,hdb_errors:q5}=j(),{basename:F5}=require("path"),G5=JS(),sM=X(),x5=b(),{Readable:k5}=require("stream"),{isMainThread:V5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Tt}=q5,$5=le.join(H5,"application-template"),tM=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Y5(){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,Fi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(Y5,"customFunctionsStatus");function K5(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{XS.sync(jS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:XS.sync(jS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:XS.sync(jS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Fi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(K5,"getCustomFunctions");function W5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.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,Fi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(W5,"getCustomFunction");function Q5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.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,Fi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(Q5,"setCustomFunction");function z5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Vs.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,Fi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(z5,"dropCustomFunction");function J5(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.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($5,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Fi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(J5,"addComponent");function X5(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.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(!B5.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 ou.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,Fi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(X5,"dropCustomFunctionProject");async function j5(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.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(tM);let i=le.join(tM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),rM.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(j5,"packageComponent");async function Z5(e){e.project&&(e.project=le.parse(e.project).name);let t=Vs.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=k5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(rM.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 ou.addConfig(s,{package:i}),!n){await G5();let f=sM.get(x5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(V5)return;let c=new Map;c.isWorker=!0;let u=(Dd(),Z(Ld)),_;u.setErrorReporter(f=>_=f);let l=F5(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(Z5,"deployComponent");async function e8(){let e=ou.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=(Dd(),Z(Ld)).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(e8,"getComponents");async function t8(e){let t=Vs.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=ou.getConfigObj()[e.project]||e.project==="harperdb"?le.join(sM.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(t8,"getComponentFile");async function r8(e){let t=Vs.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(r8,"setComponentFile");async function s8(e){let t=Vs.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),ou.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(s8,"dropComponent");nM.exports={customFunctionsStatus:Y5,getCustomFunctions:K5,getCustomFunction:W5,setCustomFunction:Q5,dropCustomFunction:z5,addComponent:J5,dropCustomFunctionProject:X5,packageComponent:j5,deployComponent:Z5,getComponents:e8,getComponentFile:t8,setComponentFile:r8,dropComponent:s8}});var eT=T((D_e,oM)=>{"use strict";var $s=require("joi"),iM=Fe();oM.exports={readTransactionLogValidator:n8,deleteTransactionLogsBeforeValidator:i8};function n8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return iM.validateBySchema(e,t)}a(n8,"readTransactionLogValidator");function i8(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return iM.validateBySchema(e,t)}a(i8,"deleteTransactionLogsBeforeValidator")});var Md=T((M_e,_M)=>{"use strict";var tT=b(),Ud=_t(),aM=$(),cM=X(),uM=an(),{handleHDBError:jo,hdb_errors:o8}=j(),{HTTP_STATUS_CODES:Zo}=o8,{readTransactionLogValidator:a8,deleteTransactionLogsBeforeValidator:c8}=eT(),lM="This operation relies on clustering and cannot run with it disable.",u8="Logs successfully deleted from transaction log.",l8="All logs successfully deleted from transaction log.";_M.exports={readTransactionLog:_8,deleteTransactionLogsBefore:d8};async function*_8(e){let t=a8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=aM.checkSchemaTableExist(r,s);if(n)throw jo(new Error,n,Zo.NOT_FOUND,void 0,void 0,!0);let i=uM.createNatsTableStreamName(r,s),o=await Ud.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===tT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(_8,"readTransactionLog");async function d8(e){let t=c8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=aM.checkSchemaTableExist(r,s);if(i)throw jo(new Error,i,Zo.NOT_FOUND,void 0,void 0,!0);let o=uM.createNatsTableStreamName(r,s),{jsm:c}=await Ud.getNATSReferences(),u=await Ud.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=u8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=l8):d=(await Ud.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(d8,"deleteTransactionLogsBefore")});var fM=T((v_e,dM)=>{"use strict";var rT=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}};dM.exports=rT});var hM=T((H_e,EM)=>{"use strict";var sT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};EM.exports=sT});var iT=T((F_e,pM)=>{"use strict";var mM=fM(),f8=hM(),{HDB_ERROR_MSGS:E8}=dr(),nT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=E8.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 mM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new f8(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 mM(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}};pM.exports=nT});var Hd=T((x_e,MM)=>{"use strict";var oT=Fr(),Pd=qr(),Wr=M_(),uu=Si(),aT=Oi(),h8=Tp(),m8=LC(),lu=Gr(),vd=wp(),dt=G(),p8=Dp(),S8=Hc(),T8=dS(),R8=xc(),g8=fS(),A8=ES(),O8=sd(),N8=SS(),cT=gS(),pn=$(),b8=ID(),uT=yS(),RM=pd(),Kr=b(),gM=yU(),y8=Fo(),AM=Mc(),OM=(Ad(),Z(tu)),NM=Er(),yr=ZS(),I8=require("alasql"),bM=Md(),yM=Id(),IM=iT(),{handleHDBError:or,hdb_errors:wM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:au}=wM,v=new Map,CM="delete",ei="insert",Sn="read",Gi="update",cu="describe",SM=uu.describeSchema.name,TM=uu.describeTable.name,LM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},w8="catchup",C8="handleGetJob",L8="handleGetJobsByStartDate",Bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},D8=[Wr.createTable.name,Wr.createAttribute.name,Wr.dropTable.name,Wr.dropAttribute.name],DM={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(oT.insert.name,new q(!1,[ei]));v.set(oT.update.name,new q(!1,[Gi]));v.set(oT.upsert.name,new q(!1,[ei,Gi]));v.set(Pd.searchByConditions.name,new q(!1,[Sn]));v.set(Pd.searchByHash.name,new q(!1,[Sn]));v.set(Pd.searchByValue.name,new q(!1,[Sn]));v.set(Pd.search.name,new q(!1,[Sn]));v.set(Wr.createSchema.name,new q(!0,[]));v.set(Wr.createTable.name,new q(!0,[]));v.set(Wr.createAttribute.name,new q(!1,[ei]));v.set(Wr.dropSchema.name,new q(!0,[]));v.set(Wr.dropTable.name,new q(!0,[]));v.set(Wr.dropAttribute.name,new q(!0,[]));v.set(uu.describeSchema.name,new q(!1,[Sn]));v.set(uu.describeTable.name,new q(!1,[Sn]));v.set(aT.deleteRecord.name,new q(!1,[CM]));v.set(lu.addUser.name,new q(!0,[]));v.set(lu.alterUser.name,new q(!0,[]));v.set(lu.dropUser.name,new q(!0,[]));v.set(lu.listUsersExternal.name,new q(!0,[]));v.set(vd.listRoles.name,new q(!0,[]));v.set(vd.addRole.name,new q(!0,[]));v.set(vd.alterRole.name,new q(!0,[]));v.set(vd.dropRole.name,new q(!0,[]));v.set(p8.name,new q(!0,[]));v.set(S8.name,new q(!0,[]));v.set(T8.name,new q(!0,[]));v.set(R8.name,new q(!0,[]));v.set(g8.name,new q(!0,[]));v.set(A8.name,new q(!0,[]));v.set(cT.setRoutes.name,new q(!0,[]));v.set(cT.getRoutes.name,new q(!0,[]));v.set(cT.deleteRoutes.name,new q(!0,[]));v.set(NM.setConfiguration.name,new q(!0,[]));v.set(O8.clusterStatus.name,new q(!0,[]));v.set(N8.name,new q(!0,[]));v.set(uT.getFingerprint.name,new q(!0,[]));v.set(uT.setLicense.name,new q(!0,[]));v.set(aT.deleteFilesBefore.name,new q(!0,[]));v.set(aT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(RM.restart.name,new q(!0,[]));v.set(RM.restartService.name,new q(!0,[]));v.set(h8.name,new q(!0,[]));v.set(m8.name,new q(!0,[Sn]));v.set(y8.systemInformation.name,new q(!0,[]));v.set(NM.getConfiguration.name,new q(!0,[]));v.set(bM.readTransactionLog.name,new q(!0,[]));v.set(bM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(yM.installModules.name,new q(!0,[]));v.set(yM.auditModules.name,new q(!0,[]));v.set(AM.createTokens.name,new q(!1,[]));v.set(AM.refreshOperationToken.name,new q(!1,[]));v.set(OM.login.name,new q(!1,[]));v.set(OM.logout.name,new q(!1,[]));v.set(yr.customFunctionsStatus.name,new q(!0,[]));v.set(yr.getCustomFunctions.name,new q(!0,[]));v.set(yr.getComponents.name,new q(!0,[]));v.set(yr.getComponentFile.name,new q(!0,[]));v.set(yr.setComponentFile.name,new q(!0,[]));v.set(yr.dropComponent.name,new q(!0,[]));v.set(yr.getCustomFunction.name,new q(!0,[]));v.set(yr.setCustomFunction.name,new q(!0,[]));v.set(yr.dropCustomFunction.name,new q(!0,[]));v.set(yr.addComponent.name,new q(!0,[]));v.set(yr.dropCustomFunctionProject.name,new q(!0,[]));v.set(yr.packageComponent.name,new q(!0,[]));v.set(yr.deployComponent.name,new q(!0,[]));v.set(uT.getRegistrationInfo.name,new q(!1,[]));v.set(lu.userInfo.name,new q(!1,[]));v.set(uu.describeAll.name,new q(!1,[]));v.set(C8,new q(!1,[]));v.set(L8,new q(!0,[]));v.set(w8,new q(!0,[]));v.set(Bd.CSV_DATA_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_URL_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_FILE_LOAD,new q(!1,[ei,Gi]));v.set(Bd.IMPORT_FROM_S3,new q(!1,[ei,Gi]));v.set(DM.EXPORT_TO_S3,new q(!0,[]));v.set(DM.EXPORT_LOCAL,new q(!0,[]));v.set(Kr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[CM]));v.set(Kr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Sn]));v.set(Kr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ei]));v.set(Kr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Gi]));MM.exports={verifyPerms:M8,verifyPermsAst:U8,verifyBulkLoadAttributePerms:v8};function U8(e,t,r){if(pn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new IM,n=new b8(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."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&LM[r])throw or(new Error,Ct.DROP_SYSTEM,au.FORBIDDEN);if(c&&!u)return null;let _=gM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof I8.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=UM(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=_T(t.role.permission,f,d[E]);lT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(U8,"verifyPermsAst");function M8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),or(new Error,Ct.DEFAULT_INVALID_REQUEST,au.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 IM;if(pn.isEmptyOrZeroLength(e.hdb_user.role)||pn.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(Ct.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(Kr.SYSTEM_SCHEMA_NAME)||n===Kr.SYSTEM_SCHEMA_NAME;if(l&&LM[r])throw or(new Error,Ct.DROP_SYSTEM,au.FORBIDDEN);if(u&&!l||_===!0&&(r===Wr.createSchema.name||r===Wr.dropSchema.name))return null;if(D8.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=gM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===SM||r===TM){if(n===Kr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===SM&&(!d[n]||!d[n][cu]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===TM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][cu]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=UM(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&&Kr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Kr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Kr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=P8(e),h=_T(e.hdb_user.role.permission,n,i);return lT(E,h,r,i,n,c,s),c.getPermsResponse()}a(M8,"verifyPerms");function UM(e,t,r,s,n){if(pn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),or(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.`),or(new Error,Ct.OP_NOT_FOUND(t),au.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][cu]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[cu]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!pn.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=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),or(wM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(UM,"hasPermissions");function lT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(pn.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[cu]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Kr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Sn)throw or(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,au.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(lT,"checkAttributePerms");function P8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Kr.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(P8,"getRecordAttributes");function _T(e,t,r){let s=new Map;if(pn.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(_T,"getAttributePermissions");function v8(e,t,r,s,n,i,o){let c=new Set(i),u=_T(e,s,n);lT(c,u,t,n,s,o,r)}a(v8,"verifyBulkLoadAttributePerms")});var Fd=T((V_e,qM)=>{"use strict";qM.exports={evaluateSQL:Q8,processAST:HM,convertSQLToAST:BM,checkASTPermissions:vM};var B8=Fr(),PM=require("util"),H8=PM.callbackify(B8.insert),q8=qr().search,F8=Ow().update,G8=PM.callbackify(F8),x8=bw().convertDelete,ti=require("alasql"),k8=Hd(),qd=G(),V8=T_(),$8=$(),_u=b(),{hdb_errors:Y8,handleHDBError:dT}=j(),{HTTP_STATUS_CODES:fT}=Y8;V8(ti);var K8=403,W8="There was a problem performing this insert. Please check the logs and try again.",ET=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Q8(e,t){let r=e.parsed_sql_object;if(!r){r=BM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ti.yy.Insert?s=n.into.databaseid:n instanceof ti.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ti.yy.Update||n instanceof ti.yy.Delete?s=n.table.databaseid:qd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ti.yy.Select)&&$8.isEmptyOrZeroLength(s))return t("No schema specified",null)}HM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Q8,"evaluateSQL");function vM(e,t){let r;try{r=k8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(vM,"checkASTPermissions");function BM(e){let t=new ET;if(!e)throw dT(new Error,"The 'sql' parameter is missing from the request body",fT.BAD_REQUEST);try{let r=e.trim(),s=ti.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?dT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fT.BAD_REQUEST):dT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fT.BAD_REQUEST)}return t}a(BM,"convertSQLToAST");function HM(e,t,r){try{let s=z8;if(!e.bypass_auth&&!t.permissions_checked){let i=vM(e,t);if(i&&i.length>0)return r(K8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case _u.VALID_SQL_OPS_ENUM.SELECT:s=q8,n=t.ast.statements[0];break;case _u.VALID_SQL_OPS_ENUM.INSERT:s=J8;break;case _u.VALID_SQL_OPS_ENUM.UPDATE:s=G8;break;case _u.VALID_SQL_OPS_ENUM.DELETE:s=x8;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(HM,"processAST");function z8(e,t){qd.info(e),t("unknown sql statement")}a(z8,"nullFunction");function J8({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=X8(i,e.values)}catch(o){return r(o)}H8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){qd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(J8,"convertInsert");function X8(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]]=ti.compile(`SELECT ${n.toString()} AS [${_u.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(W8)}}a(X8,"createDataObjects")});var hT=T((Y_e,GM)=>{"use strict";var{S3:j8,GetObjectCommand:Z8}=require("@aws-sdk/client-s3");GM.exports={getFileStreamFromS3:e6,getS3AuthObj:FM};async function e6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Z8(r))).Body}a(e6,"getFileStreamFromS3");function FM(e,t,r){return new j8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FM,"getS3AuthObj")});var Gd=T((W_e,JM)=>{"use strict";var VM=qr(),t6=Fd(),r6=hT(),{AsyncParser:s6,Transform:n6}=require("json2csv"),fu=require("stream"),Ir=$(),mT=require("fs-extra"),i6=require("path"),Qr=G(),{promisify:$M}=require("util"),du=$(),{handleHDBError:it,hdb_errors:o6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:ot}=o6,{streamAsJSON:a6}=GE(),{Upload:c6}=require("@aws-sdk/lib-storage"),xM=["search_by_value","search_by_hash","sql"],kM=["json","csv"],YM="json",KM="csv",u6="Successfully exported JSON locally.",l6="Successfully exported CSV locally.",_6=1e3,d6=VM.searchByHash,f6=VM.searchByValue,E6=$M(t6.evaluateSQL),h6=$M(fu.finished);JM.exports={export_to_s3:T6,export_local:m6,toCsvStream:WM};async function m6(e){Qr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QM(e);if(!Ir.isEmpty(t))throw Qr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ir.isEmpty(e.path))throw Qr.error(ar.MISSING_VALUE("path")),it(new Error,ar.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Ir.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(i6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ir.buildFolderPath(e.path,r);await p6(e.path);let n=await zM(e);return await S6(s,e.format,n)}a(m6,"export_local");async function p6(e){if(Qr.trace("in confirmPath"),Ir.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mT.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,Qr.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 Qr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(p6,"confirmPath");async function S6(e,t,r){if(Qr.trace("in saveToLocal"),du.isEmptyOrZeroLength(e))throw it(new Error,ar.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmptyOrZeroLength(t))throw it(new Error,ar.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmpty(r))throw it(new Error,ar.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===YM){let s=mT.createWriteStream(e);return a6(r).pipe(s),await h6(s),{message:u6,path:e}}else if(t===KM){let s=mT.createWriteStream(e),n=fu.Readable.from(r),i={},o={objectMode:!0};return await new s6(i,o).fromInput(n).toOutput(s).promise(!1),{message:l6,path:e}}throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(S6,"saveToLocal");async function T6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ar.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ar.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ar.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ar.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ar.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ar.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=QM(e);if(!Ir.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Qr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await zM(e)}catch(u){throw Qr.error(u),u}let s,n=await r6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new fu.PassThrough;if(e.format===KM){i=e.s3.key+".csv";let u=WM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YM){i=e.s3.key+".json";let u=new fu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%_6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST);return new c6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(T6,"export_to_s3");function WM(e){let t=fu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new n6(r,s);return t.pipe(n)}a(WM,"toCsvStream");function QM(e){if(Qr.trace("in exportCoreValidation"),Ir.isEmpty(e.format))return"format missing";if(kM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${kM.join(", ")}`;let t=e.search_operation.operation;if(Ir.isEmpty(t))return"search_operation.operation missing";if(xM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${xM.join(", ")}`}a(QM,"exportCoreValidation");async function zM(e){Qr.trace("in getRecords");let t,r;if(du.isEmpty(e.search_operation)||du.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ar.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=f6;break;case"search_by_hash":t=d6;break;case"sql":t=E6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Qr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(zM,"getRecords")});var nP={};Qe(nP,{contentTypes:()=>ST,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>TT,serialize:()=>$d,serializeMessage:()=>Zn});function R6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function TT(e){e.register(A6,{serializers:[{regex:/^application\/json$/,serializer:xd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(Eu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kd.Readable.from((0,Ys.encodeIter)(t,Eu)):(0,Ys.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ys.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,xi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Vd(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=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function $d(e,t,r){let s=jM&&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=Vd(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,Tn.createBrotliCompress)({params:{[Tn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Tn.constants.BROTLI_MODE_TEXT:Tn.constants.BROTLI_MODE_GENERIC,[Tn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>jM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Tn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Zn(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=Vd(t);return r=t.serialize=s.serializer.serialize,r(e)}function O6(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 ea(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||ZM(e,s);return o=>O6(o).then(i)}return e&&Lt.get(e)?.deserialize||ZM(e,s)}function ZM(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 N6(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 xd,pT,Ys,xi,Tn,kd,eP,tP,rP,Eu,Lt,ST,XM,sP,g6,A6,jM,Wo=Te(()=>{xd=D(GE()),pT=D(Gd()),Ys=require("msgpackr"),xi=require("cbor-x"),Tn=require("zlib"),kd=require("stream");Ur();eP=require("../index"),tP=D(X()),rP=D(b()),Eu={useRecords:!1,useToJSON:!0},Lt=new Map,ST=Lt;ut.contentTypes=ST;(0,eP._assignPackageExport)("contentTypes",ST);Lt.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});XM=new xi.Encoder(Eu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(Eu).end(e)},serialize:XM.encode,deserialize:XM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kd.Readable.from((0,Ys.encodeIter)(e,Eu)):(0,Ys.pack)(e)},serialize:Ys.pack,deserialize:Ys.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return kd.Readable.from(N6(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=KU(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 Jo.info(`finished installModules with response ${i}`),i}a(U5,"installModules");function KU(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(KU,"parseNPMStdErr");async function M5(e){Jo.info(`starting auditModules for request: ${e}`);let t=QU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r}=e;await yd(),await WU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=bd.join(QS,o);s[o]={npm_output:null,npm_error:null};try{let u=await iu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KU(u.stderr)}}return Jo.info(`finished auditModules with response ${s}`),s}a(M5,"auditModules");async function yd(){try{return await iu("npm -v"),!0}catch{throw Qo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",zo.BAD_REQUEST,void 0,void 0,!0)}}a(yd,"checkNPMInstalled");async function WU(e){if(!Array.isArray(e)||e.length===0)throw Qo(new Error,"projects argument must be an array with at least 1 element",zo.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=bd.join(QS,i.toString());if(!await VU.pathExists(o)){t.push(i);continue}let u=bd.join(o,"package.json");await VU.pathExists(u)||r.push(i)}if(t.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,zo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,zo.BAD_REQUEST,void 0,void 0,!0)}a(WU,"checkProjectPaths");function QU(e){let t=Nd.object({projects:Nd.array().min(1).items(Nd.string()).required(),dry_run:Nd.boolean().default(!1)});return I5.validateBySchema(e,t)}a(QU,"modulesValidator")});var JS=T((y_e,eM)=>{"use strict";var Xo=require("fs-extra"),zS=require("path"),wd=G(),JU=$(),Cd=b(),ZU=X(),P5=hr();eM.exports=v5;async function v5(){let e=B5(),t=ZU.get(Cd.CONFIG_PARAMS.ROOTPATH),r=zS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.PACKAGE_ROOT}},n=zS.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(JU.isEmptyOrZeroLength(e))return;if(u.code!==Cd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!JU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await XU(_);s.dependencies[u]=l+_}if(!o){wd.notify("Installing components"),await jU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await XU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(wd.notify("Removing component",u),c=!0);c&&(wd.notify("Updating components."),await jU(r,s,i))}a(v5,"installComponents");function B5(){let e=P5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(B5,"getComponentsConfig");async function XU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":zS.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(XU,"getPkgPrefix");async function jU(e,t,r){wd.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(ZU.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Xo.writeFile(e,JSON.stringify(r,null," ")):await Xo.unlink(e),s}}a(jU,"installPackages")});var ZS=T((C_e,nM)=>{"use strict";var Le=require("fs-extra"),XS=require("fast-glob"),le=require("path"),rM=require("tar-fs"),w_e=require("uuid").v4,jS=require("normalize-path"),$s=kU(),St=G(),Me=b(),nt=X(),ou=hr(),H5=$(),{PACKAGE_ROOT:q5}=b(),{handleHDBError:Tt,hdb_errors:F5}=j(),{basename:G5}=require("path"),x5=JS(),sM=X(),k5=b(),{Readable:V5}=require("stream"),{isMainThread:$5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Rt}=F5,Y5=le.join(q5,"application-template"),tM=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function K5(){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,Fi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(K5,"customFunctionsStatus");function W5(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{XS.sync(jS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:XS.sync(jS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:XS.sync(jS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Fi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(W5,"getCustomFunctions");function Q5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.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,Fi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(Q5,"getCustomFunction");function z5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.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,Fi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(z5,"setCustomFunction");function J5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.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,Fi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(J5,"dropCustomFunction");function X5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.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(Y5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Fi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(X5,"addComponent");function j5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.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(!H5.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 ou.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,Fi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(j5,"dropCustomFunctionProject");async function Z5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.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(tM);let i=le.join(tM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),rM.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(Z5,"packageComponent");async function e8(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.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=V5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(rM.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 ou.addConfig(s,{package:i}),!n){await x5();let f=sM.get(k5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if($5)return;let c=new Map;c.isWorker=!0;let u=(Dd(),Z(Ld)),_;u.setErrorReporter(f=>_=f);let l=G5(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(e8,"deployComponent");async function t8(){let e=ou.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=(Dd(),Z(Ld)).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(t8,"getComponents");async function r8(e){let t=$s.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=ou.getConfigObj()[e.project]||e.project==="harperdb"?le.join(sM.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(r8,"getComponentFile");async function s8(e){let t=$s.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.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(s8,"setComponentFile");async function n8(e){let t=$s.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.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),ou.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(n8,"dropComponent");nM.exports={customFunctionsStatus:K5,getCustomFunctions:W5,getCustomFunction:Q5,setCustomFunction:z5,dropCustomFunction:J5,addComponent:X5,dropCustomFunctionProject:j5,packageComponent:Z5,deployComponent:e8,getComponents:t8,getComponentFile:r8,setComponentFile:s8,dropComponent:n8}});var eT=T((D_e,oM)=>{"use strict";var Ys=require("joi"),iM=Fe();oM.exports={readTransactionLogValidator:i8,deleteTransactionLogsBeforeValidator:o8};function i8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),from:Ys.date().timestamp(),to:Ys.date().timestamp(),limit:Ys.number().min(1)});return iM.validateBySchema(e,t)}a(i8,"readTransactionLogValidator");function o8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),timestamp:Ys.date().timestamp().required()});return iM.validateBySchema(e,t)}a(o8,"deleteTransactionLogsBeforeValidator")});var Md=T((M_e,_M)=>{"use strict";var tT=b(),Ud=dt(),aM=$(),cM=X(),uM=an(),{handleHDBError:jo,hdb_errors:a8}=j(),{HTTP_STATUS_CODES:Zo}=a8,{readTransactionLogValidator:c8,deleteTransactionLogsBeforeValidator:u8}=eT(),lM="This operation relies on clustering and cannot run with it disable.",l8="Logs successfully deleted from transaction log.",_8="All logs successfully deleted from transaction log.";_M.exports={readTransactionLog:d8,deleteTransactionLogsBefore:f8};async function*d8(e){let t=c8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=aM.checkSchemaTableExist(r,s);if(n)throw jo(new Error,n,Zo.NOT_FOUND,void 0,void 0,!0);let i=uM.createNatsTableStreamName(r,s),o=await Ud.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===tT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(d8,"readTransactionLog");async function f8(e){let t=u8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=aM.checkSchemaTableExist(r,s);if(i)throw jo(new Error,i,Zo.NOT_FOUND,void 0,void 0,!0);let o=uM.createNatsTableStreamName(r,s),{jsm:c}=await Ud.getNATSReferences(),u=await Ud.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=l8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=_8):d=(await Ud.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(f8,"deleteTransactionLogsBefore")});var fM=T((v_e,dM)=>{"use strict";var rT=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}};dM.exports=rT});var hM=T((H_e,EM)=>{"use strict";var sT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};EM.exports=sT});var iT=T((F_e,pM)=>{"use strict";var mM=fM(),E8=hM(),{HDB_ERROR_MSGS:h8}=dr(),nT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=h8.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 mM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new E8(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 mM(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}};pM.exports=nT});var Hd=T((x_e,MM)=>{"use strict";var oT=Gr(),Pd=Fr(),Qr=M_(),uu=Si(),aT=Oi(),m8=Tp(),p8=LC(),lu=xr(),vd=wp(),ft=G(),S8=Dp(),T8=Hc(),R8=dS(),g8=xc(),A8=fS(),O8=ES(),N8=sd(),b8=SS(),cT=gS(),pn=$(),y8=ID(),uT=yS(),RM=pd(),Wr=b(),gM=yU(),I8=Fo(),AM=Mc(),OM=(Ad(),Z(tu)),NM=hr(),Ir=ZS(),w8=require("alasql"),bM=Md(),yM=Id(),IM=iT(),{handleHDBError:or,hdb_errors:wM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:au}=wM,v=new Map,CM="delete",ei="insert",Sn="read",Gi="update",cu="describe",SM=uu.describeSchema.name,TM=uu.describeTable.name,LM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},C8="catchup",L8="handleGetJob",D8="handleGetJobsByStartDate",Bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},U8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],DM={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(oT.insert.name,new q(!1,[ei]));v.set(oT.update.name,new q(!1,[Gi]));v.set(oT.upsert.name,new q(!1,[ei,Gi]));v.set(Pd.searchByConditions.name,new q(!1,[Sn]));v.set(Pd.searchByHash.name,new q(!1,[Sn]));v.set(Pd.searchByValue.name,new q(!1,[Sn]));v.set(Pd.search.name,new q(!1,[Sn]));v.set(Qr.createSchema.name,new q(!0,[]));v.set(Qr.createTable.name,new q(!0,[]));v.set(Qr.createAttribute.name,new q(!1,[ei]));v.set(Qr.dropSchema.name,new q(!0,[]));v.set(Qr.dropTable.name,new q(!0,[]));v.set(Qr.dropAttribute.name,new q(!0,[]));v.set(uu.describeSchema.name,new q(!1,[Sn]));v.set(uu.describeTable.name,new q(!1,[Sn]));v.set(aT.deleteRecord.name,new q(!1,[CM]));v.set(lu.addUser.name,new q(!0,[]));v.set(lu.alterUser.name,new q(!0,[]));v.set(lu.dropUser.name,new q(!0,[]));v.set(lu.listUsersExternal.name,new q(!0,[]));v.set(vd.listRoles.name,new q(!0,[]));v.set(vd.addRole.name,new q(!0,[]));v.set(vd.alterRole.name,new q(!0,[]));v.set(vd.dropRole.name,new q(!0,[]));v.set(S8.name,new q(!0,[]));v.set(T8.name,new q(!0,[]));v.set(R8.name,new q(!0,[]));v.set(g8.name,new q(!0,[]));v.set(A8.name,new q(!0,[]));v.set(O8.name,new q(!0,[]));v.set(cT.setRoutes.name,new q(!0,[]));v.set(cT.getRoutes.name,new q(!0,[]));v.set(cT.deleteRoutes.name,new q(!0,[]));v.set(NM.setConfiguration.name,new q(!0,[]));v.set(N8.clusterStatus.name,new q(!0,[]));v.set(b8.name,new q(!0,[]));v.set(uT.getFingerprint.name,new q(!0,[]));v.set(uT.setLicense.name,new q(!0,[]));v.set(aT.deleteFilesBefore.name,new q(!0,[]));v.set(aT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(RM.restart.name,new q(!0,[]));v.set(RM.restartService.name,new q(!0,[]));v.set(m8.name,new q(!0,[]));v.set(p8.name,new q(!0,[Sn]));v.set(I8.systemInformation.name,new q(!0,[]));v.set(NM.getConfiguration.name,new q(!0,[]));v.set(bM.readTransactionLog.name,new q(!0,[]));v.set(bM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(yM.installModules.name,new q(!0,[]));v.set(yM.auditModules.name,new q(!0,[]));v.set(AM.createTokens.name,new q(!1,[]));v.set(AM.refreshOperationToken.name,new q(!1,[]));v.set(OM.login.name,new q(!1,[]));v.set(OM.logout.name,new q(!1,[]));v.set(Ir.customFunctionsStatus.name,new q(!0,[]));v.set(Ir.getCustomFunctions.name,new q(!0,[]));v.set(Ir.getComponents.name,new q(!0,[]));v.set(Ir.getComponentFile.name,new q(!0,[]));v.set(Ir.setComponentFile.name,new q(!0,[]));v.set(Ir.dropComponent.name,new q(!0,[]));v.set(Ir.getCustomFunction.name,new q(!0,[]));v.set(Ir.setCustomFunction.name,new q(!0,[]));v.set(Ir.dropCustomFunction.name,new q(!0,[]));v.set(Ir.addComponent.name,new q(!0,[]));v.set(Ir.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ir.packageComponent.name,new q(!0,[]));v.set(Ir.deployComponent.name,new q(!0,[]));v.set(uT.getRegistrationInfo.name,new q(!1,[]));v.set(lu.userInfo.name,new q(!1,[]));v.set(uu.describeAll.name,new q(!1,[]));v.set(L8,new q(!1,[]));v.set(D8,new q(!0,[]));v.set(C8,new q(!0,[]));v.set(Bd.CSV_DATA_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_URL_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_FILE_LOAD,new q(!1,[ei,Gi]));v.set(Bd.IMPORT_FROM_S3,new q(!1,[ei,Gi]));v.set(DM.EXPORT_TO_S3,new q(!0,[]));v.set(DM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[CM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Sn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ei]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Gi]));MM.exports={verifyPerms:P8,verifyPermsAst:M8,verifyBulkLoadAttributePerms:B8};function M8(e,t,r){if(pn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new IM,n=new y8(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."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&LM[r])throw or(new Error,Ct.DROP_SYSTEM,au.FORBIDDEN);if(c&&!u)return null;let _=gM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof w8.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=UM(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=_T(t.role.permission,f,d[E]);lT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(M8,"verifyPermsAst");function P8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),or(new Error,Ct.DEFAULT_INVALID_REQUEST,au.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 IM;if(pn.isEmptyOrZeroLength(e.hdb_user.role)||pn.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(Ct.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(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&LM[r])throw or(new Error,Ct.DROP_SYSTEM,au.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(U8.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=gM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===SM||r===TM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===SM&&(!d[n]||!d[n][cu]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===TM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][cu]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=UM(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&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Wr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=v8(e),h=_T(e.hdb_user.role.permission,n,i);return lT(E,h,r,i,n,c,s),c.getPermsResponse()}a(P8,"verifyPerms");function UM(e,t,r,s,n){if(pn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),or(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.`),or(new Error,Ct.OP_NOT_FOUND(t),au.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][cu]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[cu]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!pn.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=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),or(wM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(UM,"hasPermissions");function lT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(pn.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[cu]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==Sn)throw or(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,au.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(lT,"checkAttributePerms");function v8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.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(v8,"getRecordAttributes");function _T(e,t,r){let s=new Map;if(pn.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(_T,"getAttributePermissions");function B8(e,t,r,s,n,i,o){let c=new Set(i),u=_T(e,s,n);lT(c,u,t,n,s,o,r)}a(B8,"verifyBulkLoadAttributePerms")});var Fd=T((V_e,qM)=>{"use strict";qM.exports={evaluateSQL:z8,processAST:HM,convertSQLToAST:BM,checkASTPermissions:vM};var H8=Gr(),PM=require("util"),q8=PM.callbackify(H8.insert),F8=Fr().search,G8=Ow().update,x8=PM.callbackify(G8),k8=bw().convertDelete,ti=require("alasql"),V8=Hd(),qd=G(),$8=T_(),Y8=$(),_u=b(),{hdb_errors:K8,handleHDBError:dT}=j(),{HTTP_STATUS_CODES:fT}=K8;$8(ti);var W8=403,Q8="There was a problem performing this insert. Please check the logs and try again.",ET=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function z8(e,t){let r=e.parsed_sql_object;if(!r){r=BM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ti.yy.Insert?s=n.into.databaseid:n instanceof ti.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ti.yy.Update||n instanceof ti.yy.Delete?s=n.table.databaseid:qd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ti.yy.Select)&&Y8.isEmptyOrZeroLength(s))return t("No schema specified",null)}HM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(z8,"evaluateSQL");function vM(e,t){let r;try{r=V8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(vM,"checkASTPermissions");function BM(e){let t=new ET;if(!e)throw dT(new Error,"The 'sql' parameter is missing from the request body",fT.BAD_REQUEST);try{let r=e.trim(),s=ti.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?dT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fT.BAD_REQUEST):dT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fT.BAD_REQUEST)}return t}a(BM,"convertSQLToAST");function HM(e,t,r){try{let s=J8;if(!e.bypass_auth&&!t.permissions_checked){let i=vM(e,t);if(i&&i.length>0)return r(W8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case _u.VALID_SQL_OPS_ENUM.SELECT:s=F8,n=t.ast.statements[0];break;case _u.VALID_SQL_OPS_ENUM.INSERT:s=X8;break;case _u.VALID_SQL_OPS_ENUM.UPDATE:s=x8;break;case _u.VALID_SQL_OPS_ENUM.DELETE:s=k8;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(HM,"processAST");function J8(e,t){qd.info(e),t("unknown sql statement")}a(J8,"nullFunction");function X8({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=j8(i,e.values)}catch(o){return r(o)}q8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){qd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(X8,"convertInsert");function j8(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]]=ti.compile(`SELECT ${n.toString()} AS [${_u.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(Q8)}}a(j8,"createDataObjects")});var hT=T((Y_e,GM)=>{"use strict";var{S3:Z8,GetObjectCommand:e6}=require("@aws-sdk/client-s3");GM.exports={getFileStreamFromS3:t6,getS3AuthObj:FM};async function t6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new e6(r))).Body}a(t6,"getFileStreamFromS3");function FM(e,t,r){return new Z8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FM,"getS3AuthObj")});var Gd=T((W_e,JM)=>{"use strict";var VM=Fr(),r6=Fd(),s6=hT(),{AsyncParser:n6,Transform:i6}=require("json2csv"),fu=require("stream"),wr=$(),mT=require("fs-extra"),o6=require("path"),zr=G(),{promisify:$M}=require("util"),du=$(),{handleHDBError:it,hdb_errors:a6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:ot}=a6,{streamAsJSON:c6}=GE(),{Upload:u6}=require("@aws-sdk/lib-storage"),xM=["search_by_value","search_by_hash","sql"],kM=["json","csv"],YM="json",KM="csv",l6="Successfully exported JSON locally.",_6="Successfully exported CSV locally.",d6=1e3,f6=VM.searchByHash,E6=VM.searchByValue,h6=$M(r6.evaluateSQL),m6=$M(fu.finished);JM.exports={export_to_s3:R6,export_local:p6,toCsvStream:WM};async function p6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QM(e);if(!wr.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(wr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),it(new Error,ar.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(wr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(o6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=wr.buildFolderPath(e.path,r);await S6(e.path);let n=await zM(e);return await T6(s,e.format,n)}a(p6,"export_local");async function S6(e){if(zr.trace("in confirmPath"),wr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mT.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,zr.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 zr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(S6,"confirmPath");async function T6(e,t,r){if(zr.trace("in saveToLocal"),du.isEmptyOrZeroLength(e))throw it(new Error,ar.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmptyOrZeroLength(t))throw it(new Error,ar.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmpty(r))throw it(new Error,ar.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===YM){let s=mT.createWriteStream(e);return c6(r).pipe(s),await m6(s),{message:l6,path:e}}else if(t===KM){let s=mT.createWriteStream(e),n=fu.Readable.from(r),i={},o={objectMode:!0};return await new n6(i,o).fromInput(n).toOutput(s).promise(!1),{message:_6,path:e}}throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(T6,"saveToLocal");async function R6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ar.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ar.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ar.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ar.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ar.MISSING_VALUE("key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ar.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=QM(e);if(!wr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await zM(e)}catch(u){throw zr.error(u),u}let s,n=await s6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new fu.PassThrough;if(e.format===KM){i=e.s3.key+".csv";let u=WM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YM){i=e.s3.key+".json";let u=new fu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%d6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST);return new u6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(R6,"export_to_s3");function WM(e){let t=fu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new i6(r,s);return t.pipe(n)}a(WM,"toCsvStream");function QM(e){if(zr.trace("in exportCoreValidation"),wr.isEmpty(e.format))return"format missing";if(kM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${kM.join(", ")}`;let t=e.search_operation.operation;if(wr.isEmpty(t))return"search_operation.operation missing";if(xM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${xM.join(", ")}`}a(QM,"exportCoreValidation");async function zM(e){zr.trace("in getRecords");let t,r;if(du.isEmpty(e.search_operation)||du.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ar.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=E6;break;case"search_by_hash":t=f6;break;case"sql":t=h6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(zM,"getRecords")});var nP={};Qe(nP,{contentTypes:()=>ST,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>TT,serialize:()=>$d,serializeMessage:()=>Zn});function g6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function TT(e){e.register(O6,{serializers:[{regex:/^application\/json$/,serializer:xd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(Eu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kd.Readable.from((0,Ks.encodeIter)(t,Eu)):(0,Ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,xi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Vd(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=Lt.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(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function $d(e,t,r){let s=jM&&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=Vd(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,Tn.createBrotliCompress)({params:{[Tn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Tn.constants.BROTLI_MODE_TEXT:Tn.constants.BROTLI_MODE_GENERIC,[Tn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>jM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Tn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Zn(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=Vd(t);return r=t.serialize=s.serializer.serialize,r(e)}function N6(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 ea(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||ZM(e,s);return o=>N6(o).then(i)}return e&&Lt.get(e)?.deserialize||ZM(e,s)}function ZM(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 b6(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 xd,pT,Ks,xi,Tn,kd,eP,tP,rP,Eu,Lt,ST,XM,sP,A6,O6,jM,Wo=Te(()=>{xd=D(GE()),pT=D(Gd()),Ks=require("msgpackr"),xi=require("cbor-x"),Tn=require("zlib"),kd=require("stream");Mr();eP=require("../index"),tP=D(X()),rP=D(b()),Eu={useRecords:!1,useToJSON:!0},Lt=new Map,ST=Lt;ut.contentTypes=ST;(0,eP._assignPackageExport)("contentTypes",ST);Lt.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});XM=new xi.Encoder(Eu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(Eu).end(e)},serialize:XM.encode,deserialize:XM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kd.Readable.from((0,Ks.encodeIter)(e,Eu)):(0,Ks.pack)(e)},serialize:Ks.pack,deserialize:Ks.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return kd.Readable.from(b6(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,8 +21,8 @@
21
21
 
22
22
  `:`data: ${e}
23
23
 
24
- `},q:.8});Lt.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()}});sP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:R6,q:.8};Lt.set("*/*",sP);Lt.set("",sP);a(R6,"tryJSONParse");a(TT,"registerContentHandlers");g6=require("fastify-plugin"),A6=g6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Vd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Vd,"findBestSerializer");jM=tP.default.get(rP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a($d,"serialize");a(Zn,"serializeMessage");a(O6,"streamToBuffer");a(ea,"getDeserializer");a(ZM,"deserializerUnknownType");a(N6,"transformIterable")});var Yd={};Qe(Yd,{start:()=>I6});async function y6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=gT.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=ea(r["content-type"],!0)(e.body)}catch(p){throw new mu.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 mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,RT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){b6[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[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),RT.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=$d(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ki.warn(i):ki.info(i):ki.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=$d(i.contentType?i:i.toString(),e,o),o}}function I6(e){RT=e,!iP&&(iP=!0,gT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return y6(t,r)}),e.server.ws(async(t,r,s)=>{hu++;let n=new ns;oP||(oP=!0,Oc(l=>{hu>0&&l.push({metric:"ws-connections",connections:hu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=ea(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{hu--,xr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=gT.getMatch(u);if(xr(!!_,"connection","ws","connect"),!_)t.send(Zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Or(h=>({count:h.count,total:hu}),"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=Zn(E.value,r);t.send(h),Or(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,mu,Dt,b6,RT,iP,gT,oP,hu,aP=Te(()=>{Wo();kn();ki=D(G()),mu=D(j());Tl();va();fi();WS();Dt=new Uint8Array(8),b6=new Float64Array(Dt.buffer,0,1),RT={};a(y6,"http");hu=0;a(I6,"start")});var AT=T((nde,cP)=>{var{recordAction:Kd,recordActionBinary:w6}=(kn(),Z(b_)),C6=require("fastify-plugin"),L6=200;cP.exports=C6(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),Kd(o,"duration",_,d,l),w6(n.raw.statusCode<400,"success",_,d,l);let f=L6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Kd(performance.now()-c,"transfer",_,d,l),Kd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Kd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var yT=T((ide,fP)=>{var Xd=require("clone"),jd=Fe(),D6=$(),zd=b(),U6=G(),Wd=require("fs"),OT=require("joi"),{string:Jd}=OT.types(),{hdb_errors:M6,handleHDBError:pu}=j(),{HDB_ERROR_MSGS:P6,HTTP_STATUS_CODES:Qd}=M6,{common_validators:ta}=Ds(),uP=1e9,lP=" is required",v6=["insert","update","upsert"],NT={database:{presence:!1,format:ta.schema_format,length:ta.schema_length},schema:{presence:!1,format:ta.schema_format,length:ta.schema_length},table:{presence:!0,format:ta.schema_format,length:ta.schema_length},action:{inclusion:{within:v6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},B6={schema:Jd.required(),table:Jd.required(),action:Jd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:H6,AWS_SECRET:q6,AWS_BUCKET:F6,AWS_FILE_KEY:G6,REGION:x6}=zd.S3_BUCKET_AUTH_KEYS,k6={s3:{presence:!0},[`s3.${H6}`]:{presence:!0,type:"String"},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${x6}`]:{presence:!0,type:"String"}},_P=Xd(NT);_P.data.presence={message:lP};var dP=Xd(NT);dP.file_path.presence={message:lP};var V6=Object.assign(Xd(NT),k6),bT=Xd(B6);bT.csv_url=Jd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bT.passthrough_headers=OT.object();function $6(e){let t=jd.validateObject(e,_P);return Zd(e,t)}a($6,"dataObject");function Y6(e){let t=jd.validateBySchema(e,OT.object(bT));return Zd(e,t)}a(Y6,"urlObject");function K6(e){let t=jd.validateObject(e,dP);return Zd(e,t)}a(K6,"fileObject");function W6(e){let t=jd.validateObject(e,V6);return Zd(e,t)}a(W6,"s3FileObject");function Zd(e,t){if(!t){let r=D6.checkGlobalSchemaTable(e.schema,e.table);if(r)return pu(new Error,r,Qd.BAD_REQUEST);if(e.operation===zd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Wd.accessSync(e.file_path,Wd.constants.R_OK|Wd.constants.F_OK)}catch(s){return s.code===zd.NODE_ERROR_CODES.ENOENT?pu(s,`No such file or directory ${s.path}`,Qd.BAD_REQUEST):s.code===zd.NODE_ERROR_CODES.EACCES?pu(s,`Permission denied ${s.path}`,Qd.BAD_REQUEST):pu(s)}try{let s=Wd.statSync(e.file_path).size;if(s>uP)return pu(new Error,P6.MAX_FILE_SIZE_ERR(s,uP),Qd.BAD_REQUEST)}catch(s){U6.error(s),console.error(s)}}}return t}a(Zd,"postValidateChecks");fP.exports={dataObject:$6,urlObject:Y6,fileObject:K6,s3FileObject:W6}});var IT=T((ade,EP)=>{"use strict";var Su=G(),ef=b();async function Q6(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===ef.OPERATIONS_ENUM.INSERT||t.operation===ef.OPERATIONS_ENUM.UPDATE||t.operation===ef.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ef.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Su.info(i.message),i):i.http_resp_msg?(Su.error(`Error calling operation: ${e.name}`),Su.error(i.http_resp_msg),i):(Su.error(`Error calling operation: ${e.name}`),Su.error(i),i)}}a(Q6,"callOperationFunctionAsAwait");EP.exports={callOperationFunctionAsAwait:Q6}});var mP=T((ude,hP)=>{"use strict";var wT=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}},CT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};hP.exports={BulkLoadFileObject:wT,BulkLoadDataObject:CT}});var SP=T((_de,pP)=>{"use strict";var LT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};pP.exports=LT});var BT=T((pde,vP)=>{"use strict";var tf=Fr(),sf=yT(),z6=require("needle"),Ts=b(),fde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:IP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:$i}=IP,sa=G(),DT=require("papaparse");ra.promisifyPapaParse();var Rs=require("fs-extra"),J6=require("path"),{chain:TP}=require("stream-chain"),RP=require("stream-json/streamers/StreamArray"),gP=require("stream-json/utils/Batch"),AP=require("stream-chain/utils/comp"),{finished:OP}=require("stream"),X6=X(),wP=IT(),j6=hT(),{BulkLoadFileObject:MT,BulkLoadDataObject:Z6}=mP(),PT=iT(),{verifyBulkLoadAttributePerms:CP}=Hd(),Ede=SP(),hde=_t(),mde=an(),{databases:e9}=(fe(),Z(Ce)),{coerceType:t9}=(nf(),Z(HT)),NP="No records parsed from csv file.",Vi=`${X6.get("HDB_ROOT")}/tmp`,{schema_regex:r9}=Ds(),bP=1024*1024*2,yP=5e3,s9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vP.exports={csvDataLoad:n9,csvURLLoad:i9,csvFileLoad:o9,importFromS3:a9};async function n9(e,t){let r=sf.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=UP(e.schema,e.table),i=DT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:UT.bind(null,n),dynamicTyping:!1}),o=new PT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&CP(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 $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new Z6(e.action,e.schema,e.table,i.data);return s=await wP.callOperationFunctionAsAwait(MP,u,null),s.message===NP?NP:PP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(n9,"csvDataLoad");async function i9(e){let t=sf.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await c9(e,r)}catch(n){throw sa.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,$i(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new MT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await vT(n);return await rf(s),i}catch(n){throw await rf(s),Yi(n)}}a(i9,"csvURLLoad");async function o9(e){let t=sf.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new MT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await vT(r)}catch(s){throw Yi(s)}}a(o9,"csvFileLoad");async function a9(e){let t=sf.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=J6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new MT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await u9(n,e);let o=await vT(i);return await rf(r),o}catch(s){throw await rf(r),Yi(s)}}a(a9,"importFromS3");async function c9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await z6("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 $e(s,n,s.statusCode,Ts.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}_9(r,e.csv_url),await l9(t,r.raw)}a(c9,"downloadCSVFile");async function u9(e,t){try{let r=`${Vi}/${e}`;await Rs.mkdirp(Vi),await Rs.writeFile(`${Vi}/${e}`,"",{flag:"a+"});let s=await Rs.createWriteStream(r),n=await j6.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(){sa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw sa.error(ft.S3_DOWNLOAD_ERR+" - "+r),$e(r,$i(ft.S3_DOWNLOAD_ERR))}}a(u9,"downloadFileFromS3");async function l9(e,t){try{await Rs.mkdirp(Vi),await Rs.writeFile(`${Vi}/${e}`,t)}catch(r){throw sa.error(ft.WRITE_TEMP_FILE_ERR),$e(r,$i(ft.DEFAULT_BULK_LOAD_ERR))}}a(l9,"writeFileToTempFolder");async function rf(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{sa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rf,"deleteTempFile");function _9(e,t){if(e.statusCode!==IP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!s9[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(_9,"validateURLResponse");async function vT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await d9(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await f9(e);break;default:throw $e(new Error,ft.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return PP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(vT,"fileLoad");async function LP(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 tf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(LP,"validateChunk");async function DP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ra.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ra.isEmpty(c)&&!ra.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 wP.callOperationFunctionAsAwait(MP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,$i(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(DP,"insertChunk");async function d9(e){let t={records:0,number_written:0},r=UP(e.schema,e.table);try{let s=new PT,n=Rs.createReadStream(e.file_path,{highWaterMark:bP});n.setEncoding("utf8"),await DT.parsePromise(n,LP.bind(null,e,s),UT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=Rs.createReadStream(e.file_path,{highWaterMark:bP}),n.setEncoding("utf8"),await DT.parsePromise(n,DP.bind(null,e,t),UT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,$i(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(d9,"callPapaParse");function UP(e,t){let r=e9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>t9(i,n));return s}a(UP,"createTransformMap");function UT(e,t,r){let s=e.get(r);return s?s(t):ra.autoCast(t)}a(UT,"typeFunction");async function f9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new PT,n=TP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await LP(e,s,r,c)})]);await new Promise((c,u)=>{OP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=TP([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await DP(e,t,r,c)})]);return await new Promise((c,u)=>{OP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,$i(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(f9,"insertJson");async function MP(e){let t={};try{e.data&&e.data.length>0&&E9(e.data[0])?t=await h9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",sa.info(t.message))}catch(r){throw Yi(r)}return t}a(MP,"callBulkFileLoad");function E9(e){let t=Object.keys(e);for(let r of t)if(!r9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(E9,"validateColumnNames");async function h9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=tf.insert;break;case"update":i=tf.update;break;case"upsert":i=tf.upsert;break;default:throw $e(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Ts.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=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(h9,"bulkFileLoad");function PP(e,t){return`successfully loaded ${t} of ${e} records`}a(PP,"buildResponseMsg");function Yi(e){return $e(e,$i(ft.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var HP=T((Tde,BP)=>{"use strict";var qT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BP.exports=qT});var GP=T((gde,FP)=>{"use strict";var m9=b(),qP=require("moment"),p9=require("uuid").v4,FT=class{static{a(this,"JobObject")}constructor(){this.id=p9(),this.type=void 0,this.start_datetime=qP().valueOf(),this.created_datetime=qP().valueOf(),this.end_datetime=void 0,this.status=m9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FP.exports=FT});var GT=T((Ode,KP)=>{"use strict";var S9=require("uuid").v4,VP=Fr(),$P=qr(),T9=vs(),R9=No(),g9=HP(),Ye=b(),A9=GP(),O9=Pp(),zr=G(),N9=Ja(),na=$(),{promisify:b9}=require("util"),Ki=require("moment"),y9=Fd(),of=yT(),xP=qh(),{deleteTransactionLogsBeforeValidator:I9}=eT(),{handleHDBError:w9,hdb_errors:C9}=j(),{HTTP_STATUS_CODES:L9}=C9,kP=$P.searchByValue,D9=$P.searchByHash,U9=VP.insert,M9=b9(y9.evaluateSQL),P9=VP.update;KP.exports={addJob:H9,updateJob:F9,handleGetJob:v9,handleGetJobsByStartDate:B9,getJobById:YP};async function v9(e){try{let t=await YP(e.id);return na.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 zr.error("There was an error getting job",t),new Error(r)}}a(v9,"handleGetJob");async function B9(e){try{let t=await q9(e);if(zr.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=Ki(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ki(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 zr.error(r),new Error(r)}}a(B9,"handleGetJobsByStartDate");async function H9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||na.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return zr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return zr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=of.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=of.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=of.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=of.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=I9(e);break;default:break}if(s)throw w9(s,s.message,L9.BAD_REQUEST,void 0,void 0,!0);let n=new A9;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new T9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await kP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=S9();try{o=await kP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return zr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new N9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await U9(u)}catch(l){return zr.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,zr.trace(l)}return t}a(H9,"addJob");async function q9(e){let t=Ki(e.from_date,Ki.ISO_8601),r=Ki(e.to_date,Ki.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 g9(s,e.hdb_user);try{return await M9(n)}catch(i){throw zr.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(q9,"getJobsInDateRange");async function YP(e){if(na.isEmptyOrZeroLength(e))return na.errorizeMessage("Invalid job ID specified.");let t=new R9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await D9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return zr.error(s),na.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(YP,"getJobById");async function F9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(na.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ki().valueOf());let t=new O9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await P9(t),r}a(F9,"updateJob")});var jP=T((bde,XP)=>{"use strict";var WP=$(),cr=b(),G9=require("moment"),af=BT(),cf=G(),QP=GT(),zP=Gd(),JP=Oi(),x9=Ze(),k9=Md(),xT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function V9(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(WP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(WP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Rn(e,af.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Rn(e,af.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Rn(e,af.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Rn(e,af.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Rn(e,zP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Rn(e,zP.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Rn(e,JP.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Rn(e,JP.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Rn(e,k9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(V9,"parseMessage");async function Rn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=G9().valueOf(),await QP.updateJob(e.job),await $9(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):cf.error(`There was an error running ${t.name} job with id ${e.job.id}`),cf.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await QP.updateJob(e.job)}catch(n){throw cf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function $9(e){cf.trace("launching job thread:",e),x9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a($9,"launchJobThread");XP.exports={parseMessage:V9,RunnerMessage:xT}});var ev=T((Ide,ZP)=>{"use strict";var kT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZP.exports=kT});var mv=T((Cde,QT)=>{"use strict";var df=qr(),YT=Fd(),uf=BT(),gn=M_(),lf=Si(),Ru=Oi(),Y9=Tp(),Tu=Gr(),_f=wp(),Mt=ZS(),Et=G(),K9=Dp(),W9=Hc(),Q9=dS(),z9=xc(),J9=fS(),X9=ES(),j9=sd(),Z9=SS(),VT=gS(),tv=Gd(),e7=Hd(),KT=GT(),P=b(),{hdb_errors:Au,handleHDBError:gu}=j(),{HTTP_STATUS_CODES:rv}=Au,$T=yS(),sv=pd(),dv=require("util"),ia=Fr(),t7=cn(),r7=Fo(),nv=jP(),iv=Mc(),ov=(Ad(),Z(tu)),av=Er(),cv=Md(),uv=Id(),{setServerUtilities:s7}=(nf(),Z(HT)),{CONTEXT:n7}=(os(),Z(DE)),{_assignPackageExport:i7}=require("../index"),{transformReq:o7}=$(),{server:a7}=(Ur(),Z(to)),c7=IT(),lv=df.searchByHash,u7=df.searchByValue,l7=dv.promisify(df.search),_7=dv.promisify(YT.evaluateSQL),d7={[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=ev();async function fv(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 c7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return d7[e.body.operation]&&t7.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(fv,"processLocalTransaction");var _v=E7();QT.exports={chooseOperation:Ev,getOperationFunction:hv,operation:WT,processLocalTransaction:fv};s7(QT.exports);a7.operation=WT;function Ev(e){let t;try{t=hv(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=YT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=YT.checkASTPermissions(e,i);if(o)throw Et.error(`${rv.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),gu(new Error,o,Au.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=e7.verifyPerms(i,n);if(o)throw Et.error(`${rv.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),gu(new Error,o,Au.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw gu(n,"There was an error when trying to choose an operation path")}return r}a(Ev,"chooseOperation");function hv(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),_v.has(e.operation))return _v.get(e.operation);throw gu(new Error,Au.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Au.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hv,"getOperationFunction");i7("operation",WT);function WT(e,t){e.hdb_user=this[n7]?.user,e.bypass_auth=!t;let r=Ev(e);return fv({body:e},r)}a(WT,"operation");async function f7(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 ia.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ia.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ia.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Ru.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(f7,"catchup");async function Ks(e){o7(e);let t,r;try{r=await KT.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new nv.RunnerMessage(t,e);return await nv.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),gu(s,n)}}a(Ks,"executeJob");function E7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(ia.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(ia.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(ia.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(df.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(u7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(l7)),e.set(P.OPERATIONS_ENUM.SQL,new H(_7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ks,uf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ks,uf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ks,uf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ks,uf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(gn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(gn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(gn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(gn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(lf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(lf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Ru.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Tu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Tu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Tu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Tu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(_f.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(_f.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(_f.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(_f.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Tu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(K9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(W9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(Q9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(z9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(J9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(X9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(av.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(j9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Z9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(VT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(VT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(VT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ks,tv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ks,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ks,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ks,tv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(KT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(KT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H($T.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H($T.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H($T.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(sv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(sv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(f7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(r7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ks,Ru.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Y9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(iv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(iv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(ov.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(ov.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(av.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(cv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ks,cv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(uv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(uv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(gn.getBackup)),e}a(E7,"initializeOperationFunctionMap")});var Ef=T((Dde,Tv)=>{"use strict";var zT=b(),h7=$(),Ou=G(),{handleHDBError:JT,hdb_errors:ff}=j(),{isMainThread:m7}=require("worker_threads"),{Readable:p7}=require("stream"),pv=require("os"),S7=require("util"),T7=kp(),R7=S7.promisify(T7.authorize),Sv=mv(),{createGzip:g7,constants:A7}=require("zlib");function O7(e){let t=`Found an uncaught exception with message: ${e.message}. ${pv.EOL}Stack: ${e.stack} ${pv.EOL}Terminating ${m7?"HDB":"thread"}.`;console.error(t),Ou.fatal(t),process.exit(1)}a(O7,"handleServerUncaughtException");function N7(e,t,r){if(Ou[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(N7,"serverErrorHandler");function b7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=JT(new Error,"Invalid JSON.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(h7.isEmpty(e.body.operation)){let s=JT(new Error,"Request body must include an 'operation' property.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(b7,"reqBodyValidationHandler");function y7(e,t,r){let s;e.body.operation!==zT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zT.OPERATIONS_ENUM.LOGOUT?R7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Ou.warn(n),Ou.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(JT(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(y7,"authHandler");async function I7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Sv.chooseOperation(e.body);let n=await Sv.processLocalTransaction(e,s);if(n instanceof p7&&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(g7({level:A7.Z_BEST_SPEED})))}return n}catch(n){throw Ou.error(n),n}}a(I7,"handlePostRequest");Tv.exports={authHandler:y7,handlePostRequest:I7,handleServerUncaughtException:O7,serverErrorHandler:N7,reqBodyValidationHandler:b7}});var Ov=T((Mde,Av)=>{"use strict";var w7=require("fastify-plugin"),{handlePostRequest:Rv,authHandler:C7,reqBodyValidationHandler:L7}=Ef();async function D7(e){e.decorate("hdbCore",{preValidation:[L7,C7],request:t=>gv(Rv(t,response)),requestWithoutAuthentication:(t,r)=>gv(Rv(t,r,!0))})}a(D7,"hdbCore");async function gv(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(gv,"convertAsyncIterators");Av.exports=w7(D7)});var bv=T((vde,Nv)=>{"use strict";var XT=require("fs"),oa=X();oa.initSync();var{CONFIG_PARAMS:Nu}=b(),U7=1024*1024*1024;function M7(e){let t=oa.get(Nu.HTTP_TIMEOUT),r=oa.get(Nu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:U7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=oa.get(Nu.TLS_PRIVATEKEY),i=oa.get(Nu.TLS_CERTIFICATE),o=oa.get(Nu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:XT.readFileSync(`${n}`),cert:XT.readFileSync(i)+(o?`
24
+ `},q:.8});Lt.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()}});sP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:g6,q:.8};Lt.set("*/*",sP);Lt.set("",sP);a(g6,"tryJSONParse");a(TT,"registerContentHandlers");A6=require("fastify-plugin"),O6=A6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Vd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Vd,"findBestSerializer");jM=tP.default.get(rP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a($d,"serialize");a(Zn,"serializeMessage");a(N6,"streamToBuffer");a(ea,"getDeserializer");a(ZM,"deserializerUnknownType");a(b6,"transformIterable")});var Yd={};Qe(Yd,{start:()=>w6});async function I6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=gT.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=ea(r["content-type"],!0)(e.body)}catch(p){throw new mu.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 mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,RT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){y6[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[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),RT.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=$d(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ki.warn(i):ki.info(i):ki.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=$d(i.contentType?i:i.toString(),e,o),o}}function w6(e){RT=e,!iP&&(iP=!0,gT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return I6(t,r)}),e.server.ws(async(t,r,s)=>{hu++;let n=new is;oP||(oP=!0,Oc(l=>{hu>0&&l.push({metric:"ws-connections",connections:hu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=ea(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{hu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=gT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(Zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:hu}),"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=Zn(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,mu,Dt,y6,RT,iP,gT,oP,hu,aP=Te(()=>{Wo();kn();ki=D(G()),mu=D(j());Tl();va();fi();WS();Dt=new Uint8Array(8),y6=new Float64Array(Dt.buffer,0,1),RT={};a(I6,"http");hu=0;a(w6,"start")});var AT=T((nde,cP)=>{var{recordAction:Kd,recordActionBinary:C6}=(kn(),Z(b_)),L6=require("fastify-plugin"),D6=200;cP.exports=L6(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),Kd(o,"duration",_,d,l),C6(n.raw.statusCode<400,"success",_,d,l);let f=D6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Kd(performance.now()-c,"transfer",_,d,l),Kd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Kd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var yT=T((ide,fP)=>{var Xd=require("clone"),jd=Fe(),U6=$(),zd=b(),M6=G(),Wd=require("fs"),OT=require("joi"),{string:Jd}=OT.types(),{hdb_errors:P6,handleHDBError:pu}=j(),{HDB_ERROR_MSGS:v6,HTTP_STATUS_CODES:Qd}=P6,{common_validators:ta}=Us(),uP=1e9,lP=" is required",B6=["insert","update","upsert"],NT={database:{presence:!1,format:ta.schema_format,length:ta.schema_length},schema:{presence:!1,format:ta.schema_format,length:ta.schema_length},table:{presence:!0,format:ta.schema_format,length:ta.schema_length},action:{inclusion:{within:B6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},H6={schema:Jd.required(),table:Jd.required(),action:Jd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:q6,AWS_SECRET:F6,AWS_BUCKET:G6,AWS_FILE_KEY:x6,REGION:k6}=zd.S3_BUCKET_AUTH_KEYS,V6={s3:{presence:!0},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String"},[`s3.${x6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${k6}`]:{presence:!0,type:"String"}},_P=Xd(NT);_P.data.presence={message:lP};var dP=Xd(NT);dP.file_path.presence={message:lP};var $6=Object.assign(Xd(NT),V6),bT=Xd(H6);bT.csv_url=Jd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bT.passthrough_headers=OT.object();function Y6(e){let t=jd.validateObject(e,_P);return Zd(e,t)}a(Y6,"dataObject");function K6(e){let t=jd.validateBySchema(e,OT.object(bT));return Zd(e,t)}a(K6,"urlObject");function W6(e){let t=jd.validateObject(e,dP);return Zd(e,t)}a(W6,"fileObject");function Q6(e){let t=jd.validateObject(e,$6);return Zd(e,t)}a(Q6,"s3FileObject");function Zd(e,t){if(!t){let r=U6.checkGlobalSchemaTable(e.schema,e.table);if(r)return pu(new Error,r,Qd.BAD_REQUEST);if(e.operation===zd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Wd.accessSync(e.file_path,Wd.constants.R_OK|Wd.constants.F_OK)}catch(s){return s.code===zd.NODE_ERROR_CODES.ENOENT?pu(s,`No such file or directory ${s.path}`,Qd.BAD_REQUEST):s.code===zd.NODE_ERROR_CODES.EACCES?pu(s,`Permission denied ${s.path}`,Qd.BAD_REQUEST):pu(s)}try{let s=Wd.statSync(e.file_path).size;if(s>uP)return pu(new Error,v6.MAX_FILE_SIZE_ERR(s,uP),Qd.BAD_REQUEST)}catch(s){M6.error(s),console.error(s)}}}return t}a(Zd,"postValidateChecks");fP.exports={dataObject:Y6,urlObject:K6,fileObject:W6,s3FileObject:Q6}});var IT=T((ade,EP)=>{"use strict";var Su=G(),ef=b();async function z6(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===ef.OPERATIONS_ENUM.INSERT||t.operation===ef.OPERATIONS_ENUM.UPDATE||t.operation===ef.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ef.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Su.info(i.message),i):i.http_resp_msg?(Su.error(`Error calling operation: ${e.name}`),Su.error(i.http_resp_msg),i):(Su.error(`Error calling operation: ${e.name}`),Su.error(i),i)}}a(z6,"callOperationFunctionAsAwait");EP.exports={callOperationFunctionAsAwait:z6}});var mP=T((ude,hP)=>{"use strict";var wT=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}},CT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};hP.exports={BulkLoadFileObject:wT,BulkLoadDataObject:CT}});var SP=T((_de,pP)=>{"use strict";var LT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};pP.exports=LT});var BT=T((pde,vP)=>{"use strict";var tf=Gr(),sf=yT(),J6=require("needle"),Rs=b(),fde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:IP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:$i}=IP,sa=G(),DT=require("papaparse");ra.promisifyPapaParse();var gs=require("fs-extra"),X6=require("path"),{chain:TP}=require("stream-chain"),RP=require("stream-json/streamers/StreamArray"),gP=require("stream-json/utils/Batch"),AP=require("stream-chain/utils/comp"),{finished:OP}=require("stream"),j6=X(),wP=IT(),Z6=hT(),{BulkLoadFileObject:MT,BulkLoadDataObject:e9}=mP(),PT=iT(),{verifyBulkLoadAttributePerms:CP}=Hd(),Ede=SP(),hde=dt(),mde=an(),{databases:t9}=(fe(),Z(Ce)),{coerceType:r9}=(nf(),Z(HT)),NP="No records parsed from csv file.",Vi=`${j6.get("HDB_ROOT")}/tmp`,{schema_regex:s9}=Us(),bP=1024*1024*2,yP=5e3,n9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vP.exports={csvDataLoad:i9,csvURLLoad:o9,csvFileLoad:a9,importFromS3:c9};async function i9(e,t){let r=sf.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=UP(e.schema,e.table),i=DT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:UT.bind(null,n),dynamicTyping:!1}),o=new PT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&CP(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 $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new e9(e.action,e.schema,e.table,i.data);return s=await wP.callOperationFunctionAsAwait(MP,u,null),s.message===NP?NP:PP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(i9,"csvDataLoad");async function o9(e){let t=sf.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await u9(e,r)}catch(n){throw sa.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,$i(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new MT(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 vT(n);return await rf(s),i}catch(n){throw await rf(s),Yi(n)}}a(o9,"csvURLLoad");async function a9(e){let t=sf.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new MT(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 vT(r)}catch(s){throw Yi(s)}}a(a9,"csvFileLoad");async function c9(e){let t=sf.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=X6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new MT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await l9(n,e);let o=await vT(i);return await rf(r),o}catch(s){throw await rf(r),Yi(s)}}a(c9,"importFromS3");async function u9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await J6("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 $e(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}d9(r,e.csv_url),await _9(t,r.raw)}a(u9,"downloadCSVFile");async function l9(e,t){try{let r=`${Vi}/${e}`;await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await Z6.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(){sa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw sa.error(Et.S3_DOWNLOAD_ERR+" - "+r),$e(r,$i(Et.S3_DOWNLOAD_ERR))}}a(l9,"downloadFileFromS3");async function _9(e,t){try{await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,t)}catch(r){throw sa.error(Et.WRITE_TEMP_FILE_ERR),$e(r,$i(Et.DEFAULT_BULK_LOAD_ERR))}}a(_9,"writeFileToTempFolder");async function rf(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{sa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rf,"deleteTempFile");function d9(e,t){if(e.statusCode!==IP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!n9[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(d9,"validateURLResponse");async function vT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await f9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await E9(e);break;default:throw $e(new Error,Et.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return PP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(vT,"fileLoad");async function LP(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 tf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(LP,"validateChunk");async function DP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ra.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ra.isEmpty(c)&&!ra.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 wP.callOperationFunctionAsAwait(MP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,$i(Et.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(DP,"insertChunk");async function f9(e){let t={records:0,number_written:0},r=UP(e.schema,e.table);try{let s=new PT,n=gs.createReadStream(e.file_path,{highWaterMark:bP});n.setEncoding("utf8"),await DT.parsePromise(n,LP.bind(null,e,s),UT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:bP}),n.setEncoding("utf8"),await DT.parsePromise(n,DP.bind(null,e,t),UT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,$i(Et.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(f9,"callPapaParse");function UP(e,t){let r=t9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>r9(i,n));return s}a(UP,"createTransformMap");function UT(e,t,r){let s=e.get(r);return s?s(t):ra.autoCast(t)}a(UT,"typeFunction");async function E9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new PT,n=TP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await LP(e,s,r,c)})]);await new Promise((c,u)=>{OP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=TP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await DP(e,t,r,c)})]);return await new Promise((c,u)=>{OP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,$i(Et.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(E9,"insertJson");async function MP(e){let t={};try{e.data&&e.data.length>0&&h9(e.data[0])?t=await m9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",sa.info(t.message))}catch(r){throw Yi(r)}return t}a(MP,"callBulkFileLoad");function h9(e){let t=Object.keys(e);for(let r of t)if(!s9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(h9,"validateColumnNames");async function m9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=tf.insert;break;case"update":i=tf.update;break;case"upsert":i=tf.upsert;break;default:throw $e(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Rs.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=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(m9,"bulkFileLoad");function PP(e,t){return`successfully loaded ${t} of ${e} records`}a(PP,"buildResponseMsg");function Yi(e){return $e(e,$i(Et.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var HP=T((Tde,BP)=>{"use strict";var qT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BP.exports=qT});var GP=T((gde,FP)=>{"use strict";var p9=b(),qP=require("moment"),S9=require("uuid").v4,FT=class{static{a(this,"JobObject")}constructor(){this.id=S9(),this.type=void 0,this.start_datetime=qP().valueOf(),this.created_datetime=qP().valueOf(),this.end_datetime=void 0,this.status=p9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FP.exports=FT});var GT=T((Ode,KP)=>{"use strict";var T9=require("uuid").v4,VP=Gr(),$P=Fr(),R9=Bs(),g9=No(),A9=HP(),Ye=b(),O9=GP(),N9=Pp(),Jr=G(),b9=Ja(),na=$(),{promisify:y9}=require("util"),Ki=require("moment"),I9=Fd(),of=yT(),xP=qh(),{deleteTransactionLogsBeforeValidator:w9}=eT(),{handleHDBError:C9,hdb_errors:L9}=j(),{HTTP_STATUS_CODES:D9}=L9,kP=$P.searchByValue,U9=$P.searchByHash,M9=VP.insert,P9=y9(I9.evaluateSQL),v9=VP.update;KP.exports={addJob:q9,updateJob:G9,handleGetJob:B9,handleGetJobsByStartDate:H9,getJobById:YP};async function B9(e){try{let t=await YP(e.id);return na.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(B9,"handleGetJob");async function H9(e){try{let t=await F9(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=Ki(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ki(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(H9,"handleGetJobsByStartDate");async function q9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||na.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Jr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=of.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=of.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=of.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=of.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=w9(e);break;default:break}if(s)throw C9(s,s.message,D9.BAD_REQUEST,void 0,void 0,!0);let n=new O9;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new R9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await kP(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=T9();try{o=await kP(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 b9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await M9(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(q9,"addJob");async function F9(e){let t=Ki(e.from_date,Ki.ISO_8601),r=Ki(e.to_date,Ki.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 A9(s,e.hdb_user);try{return await P9(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(F9,"getJobsInDateRange");async function YP(e){if(na.isEmptyOrZeroLength(e))return na.errorizeMessage("Invalid job ID specified.");let t=new g9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await U9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),na.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(YP,"getJobById");async function G9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(na.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ki().valueOf());let t=new N9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await v9(t),r}a(G9,"updateJob")});var jP=T((bde,XP)=>{"use strict";var WP=$(),cr=b(),x9=require("moment"),af=BT(),cf=G(),QP=GT(),zP=Gd(),JP=Oi(),k9=Ze(),V9=Md(),xT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $9(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(WP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(WP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Rn(e,af.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Rn(e,af.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Rn(e,af.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Rn(e,af.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Rn(e,zP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Rn(e,zP.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Rn(e,JP.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Rn(e,JP.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Rn(e,V9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a($9,"parseMessage");async function Rn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=x9().valueOf(),await QP.updateJob(e.job),await Y9(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):cf.error(`There was an error running ${t.name} job with id ${e.job.id}`),cf.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await QP.updateJob(e.job)}catch(n){throw cf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function Y9(e){cf.trace("launching job thread:",e),k9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Y9,"launchJobThread");XP.exports={parseMessage:$9,RunnerMessage:xT}});var ev=T((Ide,ZP)=>{"use strict";var kT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZP.exports=kT});var mv=T((Cde,QT)=>{"use strict";var df=Fr(),YT=Fd(),uf=BT(),gn=M_(),lf=Si(),Ru=Oi(),K9=Tp(),Tu=xr(),_f=wp(),Mt=ZS(),ht=G(),W9=Dp(),Q9=Hc(),z9=dS(),J9=xc(),X9=fS(),j9=ES(),Z9=sd(),e7=SS(),VT=gS(),tv=Gd(),t7=Hd(),KT=GT(),P=b(),{hdb_errors:Au,handleHDBError:gu}=j(),{HTTP_STATUS_CODES:rv}=Au,$T=yS(),sv=pd(),dv=require("util"),ia=Gr(),r7=cn(),s7=Fo(),nv=jP(),iv=Mc(),ov=(Ad(),Z(tu)),av=hr(),cv=Md(),uv=Id(),{setServerUtilities:n7}=(nf(),Z(HT)),{CONTEXT:i7}=(as(),Z(DE)),{_assignPackageExport:o7}=require("../index"),{transformReq:a7}=$(),{server:c7}=(Mr(),Z(to)),u7=IT(),lv=df.searchByHash,l7=df.searchByValue,_7=dv.promisify(df.search),d7=dv.promisify(YT.evaluateSQL),f7={[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=ev();async function fv(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 u7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return f7[e.body.operation]&&r7.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(fv,"processLocalTransaction");var _v=h7();QT.exports={chooseOperation:Ev,getOperationFunction:hv,operation:WT,processLocalTransaction:fv};n7(QT.exports);c7.operation=WT;function Ev(e){let t;try{t=hv(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=YT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=YT.checkASTPermissions(e,i);if(o)throw ht.error(`${rv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),gu(new Error,o,Au.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=t7.verifyPerms(i,n);if(o)throw ht.error(`${rv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),gu(new Error,o,Au.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw gu(n,"There was an error when trying to choose an operation path")}return r}a(Ev,"chooseOperation");function hv(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),_v.has(e.operation))return _v.get(e.operation);throw gu(new Error,Au.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Au.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hv,"getOperationFunction");o7("operation",WT);function WT(e,t){e.hdb_user=this[i7]?.user,e.bypass_auth=!t;let r=Ev(e);return fv({body:e},r)}a(WT,"operation");async function E7(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 ia.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ia.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ia.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Ru.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(E7,"catchup");async function Ws(e){a7(e);let t,r;try{r=await KT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new nv.RunnerMessage(t,e);return await nv.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),gu(s,n)}}a(Ws,"executeJob");function h7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(ia.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(ia.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(ia.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(df.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(l7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(_7)),e.set(P.OPERATIONS_ENUM.SQL,new H(d7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ws,uf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ws,uf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ws,uf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ws,uf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(gn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(gn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(gn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(gn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(lf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(lf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Ru.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Tu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Tu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Tu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Tu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(_f.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(_f.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(_f.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(_f.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Tu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(W9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(Q9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(z9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(J9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(X9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(j9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(av.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Z9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(e7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(VT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(VT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(VT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ws,tv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ws,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ws,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ws,tv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(KT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(KT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H($T.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H($T.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H($T.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(sv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(sv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(E7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(s7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ws,Ru.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(K9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(iv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(iv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(ov.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(ov.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(av.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(cv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ws,cv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(uv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(uv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(gn.getBackup)),e}a(h7,"initializeOperationFunctionMap")});var Ef=T((Dde,Tv)=>{"use strict";var zT=b(),m7=$(),Ou=G(),{handleHDBError:JT,hdb_errors:ff}=j(),{isMainThread:p7}=require("worker_threads"),{Readable:S7}=require("stream"),pv=require("os"),T7=require("util"),R7=kp(),g7=T7.promisify(R7.authorize),Sv=mv(),{createGzip:A7,constants:O7}=require("zlib");function N7(e){let t=`Found an uncaught exception with message: ${e.message}. ${pv.EOL}Stack: ${e.stack} ${pv.EOL}Terminating ${p7?"HDB":"thread"}.`;console.error(t),Ou.fatal(t),process.exit(1)}a(N7,"handleServerUncaughtException");function b7(e,t,r){if(Ou[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(b7,"serverErrorHandler");function y7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=JT(new Error,"Invalid JSON.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(m7.isEmpty(e.body.operation)){let s=JT(new Error,"Request body must include an 'operation' property.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(y7,"reqBodyValidationHandler");function I7(e,t,r){let s;e.body.operation!==zT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zT.OPERATIONS_ENUM.LOGOUT?g7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Ou.warn(n),Ou.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(JT(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(I7,"authHandler");async function w7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Sv.chooseOperation(e.body);let n=await Sv.processLocalTransaction(e,s);if(n instanceof S7&&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(A7({level:O7.Z_BEST_SPEED})))}return n}catch(n){throw Ou.error(n),n}}a(w7,"handlePostRequest");Tv.exports={authHandler:I7,handlePostRequest:w7,handleServerUncaughtException:N7,serverErrorHandler:b7,reqBodyValidationHandler:y7}});var Ov=T((Mde,Av)=>{"use strict";var C7=require("fastify-plugin"),{handlePostRequest:Rv,authHandler:L7,reqBodyValidationHandler:D7}=Ef();async function U7(e){e.decorate("hdbCore",{preValidation:[D7,L7],request:t=>gv(Rv(t,response)),requestWithoutAuthentication:(t,r)=>gv(Rv(t,r,!0))})}a(U7,"hdbCore");async function gv(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(gv,"convertAsyncIterators");Av.exports=C7(U7)});var bv=T((vde,Nv)=>{"use strict";var XT=require("fs"),oa=X();oa.initSync();var{CONFIG_PARAMS:Nu}=b(),M7=1024*1024*1024;function P7(e){let t=oa.get(Nu.HTTP_TIMEOUT),r=oa.get(Nu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:M7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=oa.get(Nu.TLS_PRIVATEKEY),i=oa.get(Nu.TLS_CERTIFICATE),o=oa.get(Nu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:XT.readFileSync(`${n}`),cert:XT.readFileSync(i)+(o?`
25
25
 
26
- `+XT.readFileSync(o):"")},s.http2=!0}return s}a(M7,"getServerOptions");Nv.exports=M7});var wv=T((Hde,Iv)=>{"use strict";var jT=X();jT.initSync();var{CONFIG_PARAMS:yv}=b();function P7(){let e=jT.get(yv.HTTP_CORSACCESSLIST),t=jT.get(yv.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(P7,"getCORSOptions");Iv.exports=P7});var Dv=T((Fde,Lv)=>{"use strict";var Cv=X();Cv.initSync();var v7=b();function B7(){return Cv.get(v7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(B7,"getHeaderTimeoutConfig");Lv.exports=B7});var tR={};Qe(tR,{customFunctionsServer:()=>F7,handleFile:()=>q7,ready:()=>k7});async function q7(e,t,r,s){if(!An){let c=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);An=$v(c),ut.http((await An).server)}let n=await An,i=(0,Mv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Uv.has(i)){Uv.add(i);try{n.register(x7(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 F7(){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 G7();let e=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=An=await $v(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 G7(){try{De.info("Custom Functions starting configuration."),await Fv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function x7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Pv.existsSync)(e)&&r.register(qv.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 $v(e){De.info("Custom Functions starting buildServer.");let t=(0,Gv.default)(e),r=(0,vv.default)(t);r.server.headersTimeout=(0,kv.default)(),r.setErrorHandler(Vv.serverErrorHandler);let s=(0,xv.default)();return s&&r.register(Bv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Hv.default),await r.register(H7),await r.after(),TT(r),De.info("Custom Functions completed buildServer."),r}function k7(){if(An)return An.then?An.then(e=>e.ready()):An.ready()}var Mv,Pv,vv,Bv,Hv,qv,ZT,eR,De,H7,Fv,Gv,xv,kv,Vv,An,Uv,Yv=Te(()=>{Mv=require("path"),Pv=require("fs"),vv=D(require("fastify")),Bv=D(require("@fastify/cors")),Hv=D(AT()),qv=D(require("@fastify/autoload")),ZT=D(X()),eR=D(b()),De=D(G()),H7=D(Ov()),Fv=D(Gr()),Gv=D(bv()),xv=D(wv()),kv=D(Dv()),Vv=D(Ef());Wo();Ur();Uv=new Set;a(q7,"handleFile");a(F7,"customFunctionsServer");a(G7,"setUp");a(x7,"buildRouteFolder");a($v,"buildServer");a(k7,"ready")});var rR={};Qe(rR,{start:()=>V7});function V7(e){return{handleFile(t,r,s){Wv||(Wv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Kv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Qv.default)(n,(0,zv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Kv.set(r,s)}}}var Qv,zv,Kv,Wv,Jv=Te(()=>{Qv=D(require("send")),zv=require("fs"),Kv=new Map;a(V7,"start")});function K7(e,t=1,r){if(sR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:pf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===pf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Y7.push(n),await n,aa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=mf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=aa.indexOf(s);o>-1&&aa.splice(o,1)}if(a(i,"removeWorker"),ca){let o=ca;ca=[];for(let c of o)e0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{nR?nR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),sR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function t0(e=0,t){if(typeof e=="string")try{(0,Sf.existsSync)(e)&&(0,Sf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=W7:r=Q7(t):r=iR;let s=(0,ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=e0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),nR=!0,r(o,(c,u)=>{if(!c){if(Xv){let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});Xv.deliverSocket(l,e,u),l.resume()}else sR>0?(ca.length===0&&setTimeout(()=>{ca.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ca.push(o)):(console.log("start up a dynamic thread to handle request"),K7(0));Or(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});j7(l,c,e)}Or(!0,"socket-routed")})};let n=Rc();Zv.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 iR(e,t){let r,s=0;for(let n of aa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=hf)return hf=i,t(r);s=i}hf=0,t(r)}function W7(e,t){let r={};e.getpeername(r);let s=r.address,n=la.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);iR(e,o=>{la.set(s,{worker:o,lastUsed:i}),t(o)})}function Q7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new ua.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=la.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);iR(s,d=>{la.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function J7(){hf=0;for(let e of aa)e.expectedIdle=e.recentELU.idle+z7,e.requests=1;aa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function j7(e,t,r){let s=X7++;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(),mf.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")),mf.delete(s)),n.event=="destroy"&&(e.destroy(),mf.delete(s))})}var Wi,ua,pf,Zv,Sf,$7,aa,ca,e0,Xv,sR,Y7,nR,hf,jv,la,z7,mf,X7,r0=Te(()=>{Wi=D(Ze()),ua=require("net"),pf=D(b()),Zv=D(G()),Sf=require("fs");kn();({isMainThread:$7}=require("worker_threads")),aa=[],ca=[],e0=[],sR=0,Y7=[];$7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(K7,"startHTTPWorker");a(t0,"startSocketServer");hf=0;a(iR,"findMostIdleWorker");jv=36e5,la=new Map;a(W7,"findByRemoteAddressAffinity");a(Q7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+jv<e&&la.delete(t)},jv).unref();z7=1e3;a(J7,"updateWorkerIdleness");(0,Wi.setMonitorListener)(J7);mf=new Map,X7=1;a(j7,"proxySocket")});var o0=T((Xde,i0)=>{"use strict";var Z7=require("cluster"),gs=X();gs.initSync();var n0=b(),Qde=require("util"),On=G(),oR=require("fs"),eee=require("fastify"),zde=Rc(),tee=require("@fastify/cors"),ree=require("@fastify/compress"),see=require("@fastify/static"),nee=AT(),iee=require("path"),{PACKAGE_ROOT:oee}=b(),aee=cn(),cee=$(),uee=Gr(),lee=rc(),{server:_ee}=(Ur(),Z(to)),{authHandler:dee,handlePostRequest:fee,serverErrorHandler:Eee,reqBodyValidationHandler:hee}=Ef(),Jde=require("net"),{registerContentHandlers:mee}=(Wo(),Z(nP)),pee=6e4,See=1024*1024*1024,Tee="TRUE",{CONFIG_PARAMS:Nn}=n0,Qi;i0.exports={hdbServer:s0,start:s0};async function s0(e){try{On.info("In Fastify server"+process.cwd()),On.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),On.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Z7.isMaster,await Ree();let t=gs.get(Nn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=gee(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{_ee.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),On.error(r),On.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),On.fatal(t),process.exit(1)}}a(s0,"operationsServer");async function Ree(){On.trace("Configuring HarperDB process."),aee.setSchemaDataToGlobal(),await uee.setUsersToGlobal(),await lee.getLicense()}a(Ree,"setUp");function gee(e){On.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Aee(e),r=eee(t);r.server.headersTimeout=Nee(),r.setErrorHandler(Eee);let s=Oee();s&&r.register(tee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(nee),r.register(ree),r.register(see,{root:iee.join(oee,"studio")}),mee(r);let n=gs.get(n0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!cee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[hee,dee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),fee(i,o)}),r.get("/health",()=>"HarperDB is running."),On.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(gee,"buildServer");function Aee(e){let t=gs.get(Nn.OPERATIONSAPI_NETWORK_TIMEOUT),r=gs.get(Nn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:See,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=gs.get(Nn.OPERATIONSAPI_TLS_PRIVATEKEY),i=gs.get(Nn.OPERATIONSAPI_TLS_CERTIFICATE),o=gs.get(Nn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:oR.readFileSync(n),cert:oR.readFileSync(i)+(o?`
26
+ `+XT.readFileSync(o):"")},s.http2=!0}return s}a(P7,"getServerOptions");Nv.exports=P7});var wv=T((Hde,Iv)=>{"use strict";var jT=X();jT.initSync();var{CONFIG_PARAMS:yv}=b();function v7(){let e=jT.get(yv.HTTP_CORSACCESSLIST),t=jT.get(yv.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(v7,"getCORSOptions");Iv.exports=v7});var Dv=T((Fde,Lv)=>{"use strict";var Cv=X();Cv.initSync();var B7=b();function H7(){return Cv.get(B7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(H7,"getHeaderTimeoutConfig");Lv.exports=H7});var tR={};Qe(tR,{customFunctionsServer:()=>G7,handleFile:()=>F7,ready:()=>V7});async function F7(e,t,r,s){if(!An){let c=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);An=$v(c),ut.http((await An).server)}let n=await An,i=(0,Mv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Uv.has(i)){Uv.add(i);try{n.register(k7(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 G7(){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 x7();let e=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=An=await $v(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 x7(){try{De.info("Custom Functions starting configuration."),await Fv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function k7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Pv.existsSync)(e)&&r.register(qv.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 $v(e){De.info("Custom Functions starting buildServer.");let t=(0,Gv.default)(e),r=(0,vv.default)(t);r.server.headersTimeout=(0,kv.default)(),r.setErrorHandler(Vv.serverErrorHandler);let s=(0,xv.default)();return s&&r.register(Bv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Hv.default),await r.register(q7),await r.after(),TT(r),De.info("Custom Functions completed buildServer."),r}function V7(){if(An)return An.then?An.then(e=>e.ready()):An.ready()}var Mv,Pv,vv,Bv,Hv,qv,ZT,eR,De,q7,Fv,Gv,xv,kv,Vv,An,Uv,Yv=Te(()=>{Mv=require("path"),Pv=require("fs"),vv=D(require("fastify")),Bv=D(require("@fastify/cors")),Hv=D(AT()),qv=D(require("@fastify/autoload")),ZT=D(X()),eR=D(b()),De=D(G()),q7=D(Ov()),Fv=D(xr()),Gv=D(bv()),xv=D(wv()),kv=D(Dv()),Vv=D(Ef());Wo();Mr();Uv=new Set;a(F7,"handleFile");a(G7,"customFunctionsServer");a(x7,"setUp");a(k7,"buildRouteFolder");a($v,"buildServer");a(V7,"ready")});var rR={};Qe(rR,{start:()=>$7});function $7(e){return{handleFile(t,r,s){Wv||(Wv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Kv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Qv.default)(n,(0,zv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Kv.set(r,s)}}}var Qv,zv,Kv,Wv,Jv=Te(()=>{Qv=D(require("send")),zv=require("fs"),Kv=new Map;a($7,"start")});function W7(e,t=1,r){if(sR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:pf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===pf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});K7.push(n),await n,aa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=mf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=aa.indexOf(s);o>-1&&aa.splice(o,1)}if(a(i,"removeWorker"),ca){let o=ca;ca=[];for(let c of o)e0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{nR?nR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),sR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function t0(e=0,t){if(typeof e=="string")try{(0,Sf.existsSync)(e)&&(0,Sf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Q7:r=z7(t):r=iR;let s=(0,ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=e0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),nR=!0,r(o,(c,u)=>{if(!c){if(Xv){let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});Xv.deliverSocket(l,e,u),l.resume()}else sR>0?(ca.length===0&&setTimeout(()=>{ca.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ca.push(o)):(console.log("start up a dynamic thread to handle request"),W7(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 ua.Socket({handle:o,writable:!0,readable:!0});Z7(l,c,e)}Nr(!0,"socket-routed")})};let n=Rc();Zv.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 iR(e,t){let r,s=0;for(let n of aa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=hf)return hf=i,t(r);s=i}hf=0,t(r)}function Q7(e,t){let r={};e.getpeername(r);let s=r.address,n=la.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);iR(e,o=>{la.set(s,{worker:o,lastUsed:i}),t(o)})}function z7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new ua.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=la.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);iR(s,d=>{la.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function X7(){hf=0;for(let e of aa)e.expectedIdle=e.recentELU.idle+J7,e.requests=1;aa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Z7(e,t,r){let s=j7++;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(),mf.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")),mf.delete(s)),n.event=="destroy"&&(e.destroy(),mf.delete(s))})}var Wi,ua,pf,Zv,Sf,Y7,aa,ca,e0,Xv,sR,K7,nR,hf,jv,la,J7,mf,j7,r0=Te(()=>{Wi=D(Ze()),ua=require("net"),pf=D(b()),Zv=D(G()),Sf=require("fs");kn();({isMainThread:Y7}=require("worker_threads")),aa=[],ca=[],e0=[],sR=0,K7=[];Y7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(W7,"startHTTPWorker");a(t0,"startSocketServer");hf=0;a(iR,"findMostIdleWorker");jv=36e5,la=new Map;a(Q7,"findByRemoteAddressAffinity");a(z7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+jv<e&&la.delete(t)},jv).unref();J7=1e3;a(X7,"updateWorkerIdleness");(0,Wi.setMonitorListener)(X7);mf=new Map,j7=1;a(Z7,"proxySocket")});var o0=T((Xde,i0)=>{"use strict";var eee=require("cluster"),As=X();As.initSync();var n0=b(),Qde=require("util"),On=G(),oR=require("fs"),tee=require("fastify"),zde=Rc(),ree=require("@fastify/cors"),see=require("@fastify/compress"),nee=require("@fastify/static"),iee=AT(),oee=require("path"),{PACKAGE_ROOT:aee}=b(),cee=cn(),uee=$(),lee=xr(),_ee=rc(),{server:dee}=(Mr(),Z(to)),{authHandler:fee,handlePostRequest:Eee,serverErrorHandler:hee,reqBodyValidationHandler:mee}=Ef(),Jde=require("net"),{registerContentHandlers:pee}=(Wo(),Z(nP)),See=6e4,Tee=1024*1024*1024,Ree="TRUE",{CONFIG_PARAMS:Nn}=n0,Qi;i0.exports={hdbServer:s0,start:s0};async function s0(e){try{On.info("In Fastify server"+process.cwd()),On.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),On.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=eee.isMaster,await gee();let t=As.get(Nn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=Aee(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{dee.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),On.error(r),On.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),On.fatal(t),process.exit(1)}}a(s0,"operationsServer");async function gee(){On.trace("Configuring HarperDB process."),cee.setSchemaDataToGlobal(),await lee.setUsersToGlobal(),await _ee.getLicense()}a(gee,"setUp");function Aee(e){On.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Oee(e),r=tee(t);r.server.headersTimeout=bee(),r.setErrorHandler(hee);let s=Nee();s&&r.register(ree,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(iee),r.register(see),r.register(nee,{root:oee.join(aee,"studio")}),pee(r);let n=As.get(n0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!uee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[mee,fee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Eee(i,o)}),r.get("/health",()=>"HarperDB is running."),On.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Aee,"buildServer");function Oee(e){let t=As.get(Nn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Nn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Tee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(Nn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(Nn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(Nn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:oR.readFileSync(n),cert:oR.readFileSync(i)+(o?`
27
27
 
28
- `+oR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Aee,"getServerOptions");function Oee(){let e=gs.get(Nn.OPERATIONSAPI_NETWORK_CORS),t=gs.get(Nn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Tee)&&(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(Oee,"getCORSOpts");function Nee(){return gs.get(Nn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pee}a(Nee,"getHeaderTimeoutConfig")});var S0=T((rfe,p0)=>{"use strict";var{decode:bee}=require("msgpackr"),{isMainThread:Zde,parentPort:yee,threadId:efe}=require("worker_threads"),u0=_t(),bn=ke(),Iee=b(),bu=G(),a0=X(),l0=b();Ze();var wee=an(),{recordAction:Cee,recordActionBinary:Lee}=(kn(),Z(b_)),{publishToStream:Dee}=u0,tfe={durable:bn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Uee,Mee,Pee,_0,d0;p0.exports={initialize:f0,workQueueListener:m0,setSubscription:vee,setIgnoreOrigin:Hee,getDatabaseSubscriptions:Bee};async function f0(){d0=!0,bu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await u0.getNATSReferences();Uee=e,Mee=e.info.server_name,Pee=t,_0=r}a(f0,"initialize");var Rf=new Map;function vee(e,t,r){let s=Rf.get(e);s||Rf.set(e,s=new Map),s.set(t,r),d0||f0().then(m0)}a(vee,"setSubscription");function Bee(){return Rf}a(Bee,"getDatabaseSubscriptions");var E0;function Hee(e){E0=e}a(Hee,"setIgnoreOrigin");var h0=100,c0=new Array(h0),Tf=0;async function m0(){let t=await(await _0.consumers.get(bn.WORK_QUEUE_CONSUMER_NAMES.stream_name,bn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();yee?.on("message",async r=>{let{type:s}=r;s===l0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await c0[Tf],c0[Tf]=qee(r).catch(s=>{bu.error(s)}),++Tf>=h0&&(Tf=0)}a(m0,"workQueueListener");async function qee(e){let t=bee(e.data);Cee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=a0.get(Iee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(bn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!E0),Lee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(bn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bu.trace(`messageProcessor nats msg id: ${e.headers.get(bn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Rf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:aR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:aR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:aR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}a0.get(l0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Dee(e.subject.split(".").slice(0,-1).join("."),wee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bu.error(o)}e.ack()}a(qee,"messageProcessor");function aR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aR,"convertOperation")});var fR={};Qe(fR,{disableNATS:()=>Gee,publishToStream:()=>bf,setNATSReplicator:()=>cR,setPublishToStream:()=>xee,setSubscription:()=>dR,start:()=>Fee});function Fee(){Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Vee()}function Gee(e=!0){O0=e}function xee(e,t){bf=e,dR=t}function Vee(){if(O0||process.env._DISABLE_NATS)return;let e=Es(),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];cR(n,r,i)}}ER((r,s)=>{cR(r.tableName,r.databaseName,r),s&&b0(r)}),!T0&&(T0=!0)}function cR(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[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){b0(i)}static subscribe(){let i=new ns;return dR(t,e,i),i}static subscribeOnThisThread(i){return i<kee}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 gf(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=N0;return i}a(s,"getNATSTransaction")}function b0(e){let t=Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_NODENAME);bf(`${lR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,_R.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 R0,lR,_R,g0,A0,Af,Of,Nf,O0,bf,dR,kee,N0,T0,gf,uR,y0=Te(()=>{fe();os();R0=D(_t()),lR=D(ke()),_R=D(an());va();g0=D(S0()),A0=D(hr()),Af=D(X()),Of=D(b()),Nf=D(G());a(Fee,"start");a(Gee,"disableNATS");bf=R0.publishToStream,dR=g0.setSubscription;a(xee,"setPublishToStream");kee=2;a(Vee,"assignReplicationSource");a(cR,"setNATSReplicator");a(b0,"publishSchema");gf=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=Af.default.get(Of.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||(Nf.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(bf(`${lR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,_R.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Nf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},uR=class extends gf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,A0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};N0=new uR});async function w0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hR.getResource(e,{});n=new pR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hR.get(e);i&&i.delete()}n=new If(e,t)}return n}function mR(){return yf++,yf>65500&&(yf=1),yf}var I0,_a,hR,yf,If,pR,C0=Te(()=>{fe();eu();I0=D(hr()),_a=D(G());fi();hR=et({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(w0,"getSession");yf=1;a(mR,"getNextMessageId");If=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(I=>I.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,_a.trace)("Resuming subscription from",n,"from",o);let h=jn.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,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=mR());let Q=N.id;Array.isArray(Q)&&(Q=Ko(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,_a.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=mR();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=jn.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=[]}},pR=class extends If{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=mR(),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,_a.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,I0.getNextMonotonicTime)()),(0,_a.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hR.put(this.sessionRecord)),t.qos}}});var TR={};Qe(TR,{start:()=>Yee});async function Yee({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}=U0(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;$ee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,M0.getSuperUser)());let{onMessage:u,onClose:_}=U0(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 U0(e,t,r,s,n){D0||(D0=!0,Oc(d=>{wf>0&&d.push({metric:"mqtt-connections",connections:wf,byThread:!0})}));let i;wf++;let o,c={protocolVersion:4},u=(0,Cf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wf--,i||(i=!0,o?.disconnect(),xr(!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 ut.getUser(d.username,d.password.toString()),(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&L0.notify({username:s.username,status:yn.AUTH_AUDIT_STATUS.SUCCESS,type:yn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&L0.error({username:s.username,status:yn.AUTH_AUDIT_STATUS.FAILURE,type:yn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=w0({user:s,...d}),o=await o}catch(N){return(0,Jr.error)(N),xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}xr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,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 N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.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 N of d.unsubscriptions)o.removeSubscription(N);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=ea(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Jr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),xr(!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,Cf.generate)(h,c);t(S),Or(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Cf,M0,SR,yn,Jr,L0,$ee,D0,wf,P0=Te(()=>{Cf=require("mqtt-packet");C0();M0=D(Gr());Wo();kn();Ur();SR=D(X()),yn=D(b()),Jr=D(G()),L0=(0,Jr.loggerWithTag)("auth-event"),$ee=!0;a(Yee,"start");wf=0;a(U0,"onSocket")});var B0,v0,RR,H0=Te(()=>{B0=require("os"),v0=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,B0.platform)()!="win32"&&(RR=require("node-unix-socket").createReuseportFd)});var Ld={};Qe(Ld,{component_errors:()=>da,loadComponent:()=>Lf,loadComponentDirectories:()=>K0,setErrorReporter:()=>zee});function K0(e,t){t&&(AR=t),e&&(OR=e);let r=[];if((0,As.existsSync)(gR)){let n=(0,As.readdirSync)(gR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(gR,o);r.push(Lf(c,AR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Lf(s,AR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Y0=!0})}function zee(e){wu=e}async function Lf(e,t,r,s,n,i){if(!F0.has(e)){F0.set(e,!0),n&&(OR=n);try{let o;s&&(da=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,$0.getConfigObj)():(0,G0.parseDocument)((0,As.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=NR;let u=[],_=s;for(let l in o){let d=o[l];if(da.set(s?l:(0,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,As.existsSync)(N=(0,Rt.join)(I,"node_modules",l));)if(I=(0,Rt.dirname)(I),I.length<(0,V0.getHdbBasePath)().length){N=null;break}if(N)f=await Lf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(yu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!q0.includes(I)){let N=bR.get(yR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Iu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!RR)&&(q0.push(I),t0(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),OR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,k0.handleHDBError)("Can not reference parent directories");let I=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==NR[l]?.files&&!(0,As.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,x0.default)(I,{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 Wee(Q);yu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else yu.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}`,wu?.(x),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(x),t.set(d.path||"/",new Cu(x)),da.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}`,wu?.(h),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(h),t.set(d.path||"/",new Cu(h),null,!0),da.set(s?l:(0,Rt.basename)(e),h.message)}}if(yu.isMainThread&&!Y0&&i&&(0,fa.watchDir)(e,async()=>K0()),o.extensionModule)return await Al((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;wu?.(new Error(l)),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(l),da.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}`,wu?.(o),t.set("",new Cu(o))}}}var As,Rt,yu,G0,bR,yR,x0,fa,Iu,k0,V0,Kee,$0,Wee,gR,OR,Y0,AR,da,Qee,NR,q0,F0,wu,Cu,Dd=Te(()=>{As=require("fs"),Rt=require("path"),yu=require("worker_threads"),G0=require("yaml"),bR=D(X()),yR=D(b());GA();$A();YA();aP();Yv();Jv();x0=D(require("fast-glob")),fa=D(Ze()),Iu=D(G());PE();Ur();k0=D(j());os();fe();r0();V0=D(X()),Kee=D(o0());Ad();y0();P0();$0=D(Er());H0();({readFile:Wee}=As.promises),gR=bR.get(yR.CONFIG_PARAMS.COMPONENTSROOT),OR=new Map,da=new Map;a(K0,"loadComponentDirectories");Qee={REST:Yd,rest:Yd,graphqlSchema:ME,jsResource:BE,fastifyRoutes:tR,login:qE,static:rR,operationsApi:Kee,customFunctions:{},http:{},clustering:fR,authentication:tu,mqtt:TR},NR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(NR,"static",{value:{files:"web/**"}});q0=[],F0=new Map;a(zee,"setErrorReporter");a(Lf,"loadComponent");Cu=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 z0=T((Mfe,Q0)=>{var{isMainThread:W0}=require("worker_threads"),{getTables:Jee}=(fe(),Z(Ce)),{loadComponentDirectories:Xee,loadComponent:jee}=(Dd(),Z(Ld)),{resetResources:Zee}=(eu(),Z(IU)),ete=JS(),tte=Er(),{dirname:rte}=require("path"),{getConnection:ste}=_t(),nte=X(),ite=b(),IR=new Map;async function ote(e=!1){!W0&&nte.get(ite.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ste();try{W0&&await ete()}catch(s){console.error(s)}let t=Zee();Jee(),t.isWorker=e,await jee(rte(tte.getConfigFilePath()),t,"hdb",!0,IR),await Xee(IR,t);let r=[];for(let[s]of IR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ote,"loadRootComponents");Q0.exports.loadRootComponents=ote});var Ze=T((vfe,si)=>{"use strict";var{Worker:ate,MessageChannel:cte,parentPort:Ws,isMainThread:UR,threadId:ute,workerData:In}=require("worker_threads"),{PACKAGE_ROOT:lte}=b(),{join:j0,isAbsolute:_te,extname:dte}=require("path"),{server:Z0}=(Ur(),Z(to)),{watch:fte,readdir:Ete}=require("fs/promises"),{totalmem:J0}=require("os"),Mf=b(),hte=X(),wn=G(),{randomBytes:mte}=require("crypto"),{_assignPackageExport:pte}=require("../index"),Ste=b(),Tte=1024*1024,ri=[],Xr=[],Rte=50,MR=1e4,gte="restart",eB="request_thread_info",tB="resource_report",rB="thread_info",sB="added-port",Ate="ack",wR;pte("threads",Xr);si.exports={startWorker:CR,restartWorkers:vR,shutdownWorkers:Ite,workers:ri,setMonitorListener:vte,onMessageFromWorkers:wte,onMessageByType:uB,broadcast:Lte,broadcastWithAcknowledgement:Ute,setChildListenerByType:yte,getWorkerIndex:nB,getWorkerCount:iB,getTicketKeys:oB,setMainIsWorker:Nte,setTerminateTimeout:Ote,restartNumber:In?.restartNumber||1};Xr.onMessageByType=uB;Xr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Xr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var PR;function Ote(e){MR=e}a(Ote,"setTerminateTimeout");function nB(){return In?In.workerIndex:PR?0:void 0}a(nB,"getWorkerIndex");function iB(){return In?In.workerCount:PR?1:void 0}a(iB,"getWorkerCount");function Nte(e){PR=e}a(Nte,"setMainIsWorker");var Df;function oB(){return Df||(Df=UR?mte(48):In.ticketKeys,Df)}a(oB,"getTicketKeys");Object.defineProperty(Z0,"workerIndex",{get(){return nB()}});Object.defineProperty(Z0,"workerCount",{get(){return iB()}});var aB={[eB](e,t){Mte(t)},[tB](e,t){Pte(t,e)}};function CR(e,t={}){let r=process.constrainedMemory?.()||J0();r=Math.min(r,J0());let s=Math.max(Math.floor(r/Tte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Xr){let _=new cte;_.existingPort=u,i.push(_),o.push(_.port2)}dte(e)||(e+=".js");let c=new ate(_te(e)?e:j0(lte,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:si.exports.restartNumber,ticketKeys:oB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:sB,port:u,threadId:c.threadId},[u]);return Pf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CR(e,t),c.on("error",u=>{console.error("Worker error:",u),wn.error("Worker error:",u)}),c.on("exit",u=>{ri.splice(ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rte?(t.unexpectedRestarts=c.unexpectedRestarts+1,CR(e,t)):wn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{aB[u.type]?.(u,c)}),ri.push(c),Hte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(CR,"startWorker");var bte=[Mf.THREAD_TYPES.HTTP];async function vR(e=null,t=2,r=!0){if(UR){if(r){let{loadRootComponents:o}=z0();await o()}si.exports.restartNumber++,t<1&&(t=t*ri.length);let s=[],n=[];for(let o of ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:Mf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=bte.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),MR*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===Ste.ITC_EVENT_TYPES.CHILD_STARTED&&(wn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");wn.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}=pd();r&&(e==="http"||!e)&&hte.get(Mf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ws.postMessage({type:gte,workerType:e})}a(vR,"restartWorkers");function yte(e,t){aB[e]=t}a(yte,"setChildListenerByType");function Ite(e){return vR(e,1/0,!1)}a(Ite,"shutdownWorkers");var cB=[];function wte(e){cB.push(e)}a(wte,"onMessageFromWorkers");var LR=new Map;function uB(e,t){let r=LR.get(e);r||LR.set(e,r=[]),r.push(t)}a(uB,"onMessageByType");var Cte=10;async function Lte(e){let t=0;for(let r of Xr)try{r.postMessage(e),t++>Cte&&(t=0,await new Promise(setImmediate))}catch(s){wn.error("Unable to send message to worker",s)}}a(Lte,"broadcast");var Uf=new Map,Dte=1;function Ute(e){return new Promise(t=>{let r=0;for(let s of Xr)try{let n=Dte++,i=a(()=>{Uf.delete(n),--r===0&&t(),s!==Ws&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Uf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Uf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){wn.error("Unable to send message to worker",n)}r===0&&t()})}a(Ute,"broadcastWithAcknowledgement");function Mte(e){e.postMessage({type:rB,workers:lB()})}a(Mte,"sendThreadInfo");function lB(){let e=Date.now();return ri.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(lB,"getChildWorkerInfo");function Pte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Pte,"recordResourceReport");var DR;function vte(e){DR=e}a(vte,"setMonitorListener");var Bte=1e3,X0=!1;function Hte(){X0||(X0=!0,setInterval(()=>{for(let e of ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DR&&DR()},Bte).unref())}a(Hte,"startMonitoring");var qte=1e3;if(Ws){Pf(Ws);for(let e=0,t=In.addPorts.length;e<t;e++){let r=In.addPorts[e];r.threadId=In.addThreadIds[e],Pf(r)}setInterval(()=>{let e=process.memoryUsage();Ws.postMessage({type:tB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qte).unref(),wR=a(()=>new Promise((e,t)=>{Ws.on("message",r),Ws.postMessage({type:eB});function r(s){s.type===rB&&(Ws.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wR=lB;si.exports.getThreadInfo=wR;function Pf(e,t){Xr.push(e),e.on("message",r=>{if(r.type===sB)r.port.threadId=r.threadId,Pf(r.port);else if(r.type===Ate){let s=Uf.get(r.id);s&&s()}else{for(let n of cB)n(r,e);let s=LR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){wn.error(i)}}}).on("close",()=>{Xr.splice(Xr.indexOf(e),1)}).on("exit",()=>{Xr.splice(Xr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Pf,"addPort");if(UR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Ete(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(j0(s,i.name));try{for await(let{filename:i}of fte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");si.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ws.on("message",async e=>{let{type:t}=e;t===Mf.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Ws.unref(),setTimeout(()=>{wn.warn("Thread did not voluntarily terminate",ute),process.exit(0)},MR).unref())})});function dB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ea||((0,Du.onMessageByType)(_B,d=>{fB(d.path)}),(0,Du.onMessageByType)(Fte,d=>{(0,Lu.trace)("confirming to proceed with txn",d.txnId)}),Ea=Object.create(null));let c=Ea[i]||(Ea[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=Ko(t);let _=new HR(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 fB(e,t){if(!Ea)return;let r=Ea[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:BR,exclusiveStart:!0})){BR=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ko(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,Lu.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,Lu.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"},BR,!0)}function EB(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,Du.broadcast)({type:_B,path:n}),fB(n,!0)})}}var Lu,Du,_B,Fte,Ea,xfe,HR,BR,hB=Te(()=>{Lu=D(G()),Du=D(Ze());va();eu();oo();_B="transaction",Fte="transaction-await",xfe=Buffer.alloc(4096);a(dB,"addSubscription");HR=class extends ns{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"}}},BR=Date.now();a(fB,"notifyFromTransactionData");a(EB,"listenToCommits")});var HT={};Qe(HT,{coerceType:()=>Ff,makeTable:()=>kf,setServerUtilities:()=>Qte,updateResource:()=>vu});function kf(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=[]),EB(i,u);let S=oh(i,s,u),A=0,I,N,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,Pt=2,Pe={},gt={},Zr=864e5,JR,ku,$B=10,YB=6;E&&ZR();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,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},gt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!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,Uu);switch(M.type){case"put":return k._writeUpdate(z,Uu);case"delete":return k._writeDelete(Uu);case"publish":return k._writePublish(z,Uu);case"invalidate":return k.invalidate(Uu);default:Ke.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,zi.getWorkerIndex)()):(0,zi.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)){Ke.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 vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(oi=>oi.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,Hu.signalUserChange(new qu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Sa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=Cn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return XR(m,g,{transaction:U},L,M=>{if(M?vu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new zs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[FR]=!0,xR(V,z=>(vu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=jf(this[we],this[Qs],this[me]);if(m)return this[FR]=!0,xR(m,g=>{this[Qs]=g,this[Re]=g.value,this[qf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,Zr=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Zr=Zr||(d+f)/4,Zf()}static enableAuditing(m=!0){E=m,m&&ZR(),at.audit=m}static coerceId(m){return m===""?null:Ff(m,Q)}static async dropTable(){if(delete xe[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));Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){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,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[as])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,g){let C=$u(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=GR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=$u(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=GR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[as]){let C=$u(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=GR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return $u(m)?.delete}update(m,g){if(!Cn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Qs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:gt.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Qs],L,vf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,Bf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Vu(m,g,null)}),E)S(m,null,L,C,Bf,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,AB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=Cn(C),L=this[we];Sa(L);let y=this[Qs];this[qR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[pB]||dl(m)){if(this.validate(m),C?.source?m=Ba(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&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ba(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:gt.put&&(()=>gt.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),vu(this,V));let oe=V?.value;this[qR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Vu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[as]){for await(let g of this.search(m))(await at.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=Cn(this[me]),C=this[we];Sa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:gt.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),vu(this,y)),!(y?.version>L)&&(Vu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Qs],L,0,E,this[me],0,"delete"),E||Zf()):i.remove(this[we]))}}),!0}search(m){let g=Cn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){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,zs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Ff(Ne,Ee)):Ff(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,gB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Pu.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===Pu.SEARCH_TYPES.CONTAINS||Ee===Pu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Pu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=kte:k.estimated_count=xte}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Hf.SKIP);else{let k=IE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(wE);V=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=IE(ne,y,C,at,m.allowFullScan);k=k.concat(vt)}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,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(oi,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&jf(He,oi,z,this);if(lr)return lr.then(QB=>Vt(QB))}let bs=oi?.value;if(!bs)return Hf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Hf.SKIP;return bs}return a(Vt,"processEntry"),k.map(oi=>XR(oi,z,ne,!1,Vt))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=dB(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[as]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[as]){if(L){if(R)throw new zs.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=pr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||RB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||RB(C,z)){let oe=V.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)g.send(y[--U]);y[0]&&(g.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,Gf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Qs]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=pr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)g.send(U[--V]);g.startTime=y}!m.omitCurrent&&this.doesExist()&&g.send({id:C,version:this[qf],timestamp:this[Qs]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[qR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=Cn(this[me]),R=this[we]||null;Sa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Qs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:gt.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&Zf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} 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(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(g||(g=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,y+"[*]");z&&(R[U]=z)}}else(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(g)throw new zs.ClientError(g.join(". "))}getUpdatedTime(){return this[qf]}wasLoadedFromSource(){return N?!!this[FR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new zs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new zs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,g),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Mu(),pr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Mu();let L=pr(R);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 g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Mu();let y=u.get(R);if(y){let U=pr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let KB=at.prototype;return KB[pB]=!0,d&&at.setTTLExpiration(d/1e3),B&&WB(),at;function Vu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Bu.getIndexedValues)(M);if(V){mB&&L.prefetch(V.map(z=>({key:z,value:W})),TB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Bu.getIndexedValues)(U),V){mB&&L.prefetch(V.map(z=>({key:z,value:W})),TB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Vu,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>SB)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,Gf.writeKey)(W,Kte,0)>SB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Sa,"checkValidId");function XR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>YB&&(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=[],Pt>2&&Pt--}else se=Pt,Pt<$B&&Pt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(XR,"loadLocalRecord");function $u(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Wte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a($u,"getTablePermissions");function jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(vf|Bf)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,xr(!R,"cache-hit",n)),R){let L=jR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new zs.ServerError("Entry is not cached",504);return}else return L}}}a(jf,"ensureLoadedFromSource");function Cn(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 g=m.next;if(!g)return m=m.next=new di,m.lmdbDb=i,m;m=g}while(!0)}else return new pl}a(Cn,"txnForContext");async function jR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(vf|Bf)?L(jR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Yte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,oe)=>{let k;xR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&vf;let He=M.lastModified||Vt&&R;vt=Vt||He>R||!U,He||(He=(0,Bu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Or(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,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:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=Vu(W,U,ne);ne?(gt.put?.(M,W,ne),S(W,ne,bs,He,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(gt.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(jR,"getFromSource");function Zf(){if(Zr!==JR&&(JR=Zr,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(ku&&clearTimeout(ku),!Zr)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())/Zr)*Zr+W.getTime(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),ku=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(C+Zr,Date.now())),i.rootStore.status!=="open"){clearTimeout(ku);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+$te<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Mu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(Zf,"scheduleCleanup");function ZR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(ZR,"addDeleteRemoval");function WB(){(0,zi.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:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Mu()}}catch(W){Ke.error("Error in evicting old records",W)}},Vte).unref()}a(WB,"runRecordExpirationEviction")}function GR(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 TB(){}function Qte(e){AB=e}function Ff(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"&&!zte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,xf.autoCast)(e)}function RB(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 xR(e,t,r){return e?.then?e.then(t,r):t(e)}function vu(e,t){e[Qs]=t,e[Re]=t?.value??null,e[qf]=t?.version}var Os,Hf,Bu,gB,Pu,Fu,zs,Hu,qu,Ke,Gf,zi,xf,Gte,AB,xte,kte,Vte,$te,mB,Yte,qf,pB,Qs,qR,FR,Uu,vf,Bf,Kte,SB,Wte,nEe,zte,Mu,nf=Te(()=>{Os=D(b()),Hf=require("lmdb"),Bu=D(hr()),gB=require("lodash");os();bE();Pu=D(ze()),Fu=D(X());hB();zs=D(j()),Hu=D(un()),qu=D(_s());fe();Tl();Ke=D(G());ml();fi();Gf=require("ordered-binary"),zi=D(Ze());oo();xf=D($());xa();kn();Gte=new Uint8Array(9);Gte[8]=192;xte=1e8,kte=1e7,Vte=6e4,$te=864e5;Fu.initSync();mB=Fu.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yte=1e4,qf=Symbol.for("version"),pB=Symbol.for("incremental-update"),Qs=Symbol("entry"),qR=Symbol("is-saving"),FR=Symbol("loaded-from-source"),Uu={isNotification:!0,ensureLoaded:!1},vf=1,Bf=8,Kte=Buffer.allocUnsafeSlow(8192),SB=1978,Wte={read:!0,insert:!0,update:!0,delete:!0},nEe=(0,xf.convertToMS)(Fu.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(kf,"makeTable");a(GR,"attributesAsObject");a(TB,"noop");a(Qte,"setServerUtilities");zte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ff,"coerceType");a(RB,"isDescendantId");Mu=a(()=>new Promise(setImmediate),"rest");a(xR,"when");a(vu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>zm,dropTableMeta:()=>tre,getDatabases:()=>Es,getTables:()=>Jte,onUpdatedTable:()=>ER,readMetaDb:()=>Gu,resetDatabases:()=>Xte,table:()=>et,tables:()=>mr});function Jte(){return Wf||Es(),mr||{}}function Es(){if(Wf)return xe;Wf=!0,pa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,qe.join)((0,kt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),t=(0,kt.get)(Cr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,wr.existsSync)(e)?e:(0,qe.join)((0,kt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,wr.existsSync)(e))for(let r of(0,wr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gu((0,qe.join)(e,r.name),null,s)}if((0,wr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,wr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,qe.join)((0,ma.getBaseSchemaPath)(),r.name),n=(0,qe.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,wr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);Gu((0,qe.join)(s,i.name),(0,qe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,wr.existsSync)(n))for(let o of(0,wr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,qe.extname)(o.name).toLowerCase()===".mdb"&&Gu((0,qe.join)(n,o.name),(0,qe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,qe.join)(c.path,(0,qe.basename)(o+".mdb"));(0,wr.existsSync)(u)&&Gu(u,o,r,null,!0)}}for(let r in xe){let s=pa.get(r);if(s){let n=xe[r];r.includes("delete")&&jr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(jr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in mr)delete mr[n];delete mr[Qf]}}return pa=null,xe}}function Xte(){Wf=!1;for(let[,e]of ni)e.needsDeletion=!0;Es();for(let[e,t]of ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ni.delete(e));return xe}function Gu(e,t,r=$R,s,n){let i=new kR.default(e,!1);try{let o=ni.get(e);o?o.needsDeletion=!1:(o=(0,$f.open)(i),ni.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Vf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,wr.existsSync)(s)&&(i.path=s,_=(0,$f.open)(i),_.isLegacy=!0):_=bl(o));let l=yB(r),d=l[Qf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){jr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Cr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ha)||0)&&u.putSync(ha,Y+1):(S.tableId=Y=u.get(ha),Y||(Y=1),u.putSync(ha,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Ll(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(!I[x.name]){let be=new Ji.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){jr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=IB(l,E,kf({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:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of YR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function yB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=mr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Qf]=r,pa.set(e,r)}return t}function IB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=$R),Es();let r=yB(e),s=(0,qe.join)((0,kt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),n=(0,kt.get)(Cr.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,kt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||((0,wr.existsSync)(s)?s:(0,qe.join)((0,kt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=ni.get(o);if(!c){let u=new kR.default(o,!1);c=(0,$f.open)(u),ni.set(o,c)}return c}async function zm(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ni.delete(n.path),n.status==="open"&&(await n.close(),await OB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[Qf]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=$R);let l=mc({database:t,table:e}),d=xe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Ji.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 I,N;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=bl(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,kt.get)(Cr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),jr.trace(`${e} table loading, opening primary store`);let K=new Ji.default(!1,!0),B=e+"/",x=Ll(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(ha),x.tableId||(x.tableId=1),S.putSync(ha,x.tableId+1),h.tableId=x.tableId,f=IB(d,e,kf({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,I=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A)),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(),I=!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),I=!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 Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!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&&(I=!0,F(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),jr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=ere(f,Q,Y):I&&Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of YR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),jr.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function ere(e,t,r){try{let s=e.schemaVersion;await Yf.signalSchemaChange(new Kf.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,NB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,jr.error(f)}),xu.workerData&&xu.workerData.restartNumber!==bB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>jte?await n:u>Zte&&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 Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){jr.error("Error in indexing",s)}}function tre({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 ER(e){YR.push(e)}var kt,Vf,$f,qe,wr,ma,Ji,kR,Cr,OB,VR,NB,Yf,Kf,xu,jr,bB,$R,Qf,mr,xe,ha,YR,Wf,ni,pa,jte,Zte,fe=Te(()=>{kt=D(X()),Vf=D(ze()),$f=require("lmdb"),qe=require("path"),wr=require("fs"),ma=D(ve());nf();Ji=D(Dl()),kR=D(Ml()),Cr=D(b()),OB=D(require("fs-extra")),VR=require("../index"),NB=D(hr()),Yf=D(un()),Kf=D(_s()),xu=require("worker_threads"),jr=D(G()),bB=D(Ze());oo();xa();$R="data",Qf=Symbol("defined-tables");(0,kt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,VR._assignPackageExport)("databases",xe);(0,VR._assignPackageExport)("tables",mr);ha=Symbol.for("next-table-id"),YR=[],ni=new Map;a(Jte,"getTables");a(Es,"getDatabases");a(Xte,"resetDatabases");a(Gu,"readMetaDb");a(yB,"ensureDB");a(IB,"setTable");a(mc,"database");a(zm,"dropDatabase");a(et,"table");jte=1e3,Zte=10;a(ere,"runIndexing");a(tre,"dropTableMeta");a(ER,"onUpdatedTable")});var $=T((fEe,xB)=>{"use strict";var ii=require("path"),UB=require("fs-extra"),ur=G(),wB=require("fs-extra"),zf=require("os"),rre=require("net"),sre=require("recursive-iterator"),We=b(),nre=Ug(),CB=require("papaparse"),Jf=require("moment"),{inspect:ire}=require("util"),LB=require("is-number"),dEe=require("lodash"),ore=require("minimist"),are=require("https"),cre=require("http"),{hdb_errors:Xf}=j(),ure=/^((\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)))$/,MB=require("util").promisify(setTimeout),lre=100,_re=5,dre="",fre=4,DB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};xB.exports={isEmpty:Lr,isEmptyOrZeroLength:Js,arrayHasEmptyValues:mre,arrayHasEmptyOrZeroLengthValues:pre,buildFolderPath:Sre,isBoolean:PB,errorizeMessage:Ere,stripFileExtension:Rre,autoCast:gre,autoCastJSON:vB,autoCastJSONDeep:WR,removeDir:Are,compareVersions:Ore,isCompatibleDataVersion:Nre,escapeRawValue:bre,unescapeValue:yre,stringifyProps:Ire,timeoutPromise:Cre,isClusterOperation:Dre,getClusterUser:Mre,checkGlobalSchemaTable:Ure,getHomeDir:HB,getPropsFilePath:wre,promisifyPapaParse:Pre,removeBOM:qB,createEventPromise:vre,checkProcessRunning:Bre,checkSchemaTableExist:Hre,checkSchemaExists:FB,checkTableExists:GB,getStartOfTomorrowInSeconds:qre,getLimitKey:Fre,isObject:Tre,isNotEmptyAndHasValue:hre,autoCasterIsNumberCheck:BB,backtickASTSchemaItems:Gre,isPortTaken:Lre,createForkArgs:xre,autoCastBoolean:kre,async_set_timeout:MB,getTableHashAttribute:Vre,doesSchemaExist:$re,doesTableExist:Yre,stringifyObj:Kre,ms_to_time:Wre,changeExtension:Qre,getEnvCliRootPath:QR,noBootFile:zre,httpRequest:Jre,transformReq:Xre,convertToMS:jre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Ere(e){return e instanceof Error?e:new Error(e)}a(Ere,"errorizeMessage");function Lr(e){return e==null}a(Lr,"isEmpty");function hre(e){return!Lr(e)&&(e||e===0||e===""||PB(e))}a(hre,"isNotEmptyAndHasValue");function Js(e){return Lr(e)||e.length===0||e.size===0}a(Js,"isEmptyOrZeroLength");function mre(e){if(Lr(e))return!0;for(let t=0;t<e.length;t++)if(Lr(e[t]))return!0;return!1}a(mre,"arrayHasEmptyValues");function pre(e){if(Js(e))return!0;for(let t=0;t<e.length;t++)if(Js(e[t]))return!0;return!1}a(pre,"arrayHasEmptyOrZeroLengthValues");function Sre(...e){try{return e.join(ii.sep)}catch{console.error(e)}}a(Sre,"buildFolderPath");function PB(e){return Lr(e)?!1:e===!0||e===!1}a(PB,"isBoolean");function Tre(e){return Lr(e)?!1:typeof e=="object"}a(Tre,"isObject");function Rre(e){return Js(e)?dre:e.slice(0,-fre)}a(Rre,"stripFileExtension");function gre(e){return Lr(e)||e===""||typeof e!="string"?e:DB[e]!==void 0?DB[e]:BB(e)===!0?Number(e):ure.test(e)?new Date(e):e}a(gre,"autoCast");function vB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(vB,"autoCastJSON");function WR(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=WR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=WR(r);s!==r&&(e[t]=s)}return e}else return vB(e)}a(WR,"autoCastJSONDeep");function BB(e){if(e.startsWith("0.")&&LB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&LB(e))}a(BB,"autoCasterIsNumberCheck");async function Are(e){if(Js(e))throw new Error(`Directory path: ${e} does not exist`);try{await wB.emptyDir(e),await wB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(Are,"removeDir");function Ore(e,t){if(Js(e)){ur.info("Invalid current version sent as parameter.");return}if(Js(t)){ur.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(Ore,"compareVersions");function Nre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Nre,"isCompatibleDataVersion");function bre(e){if(Lr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(bre,"escapeRawValue");function yre(e){if(Lr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yre,"unescapeValue");function Ire(e,t){if(Lr(e))return ur.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+zf.EOL}!Js(s)&&s[0]===";"?r+=" "+s+n+zf.EOL:Js(s)||(r+=s+"="+n+zf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Ire,"stringifyProps");function HB(){let e;try{e=zf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(HB,"getHomeDir");function wre(){let e=ii.join(HB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return UB.existsSync(e)||(e=ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(wre,"getPropsFilePath");function Cre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Cre,"timeoutPromise");async function Lre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=rre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Lre,"isPortTaken");function Dre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Dre,"isClusterOperation");function Ure(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ure,"checkGlobalSchemaTable");function Mre(e,t){if(Lr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Lr(e)||Js(e)){ur.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){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Mre,"getClusterUser");function Pre(){CB.parsePromise=function(e,t,r){return new Promise(function(s,n){CB.parse(e,{header:!0,transformHeader:qB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Pre,"promisifyPapaParse");function qB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(qB,"removeBOM");function vre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${ire(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(vre,"createEventPromise");async function Bre(e){let t=!0,r=0;do await MB(lre*r++),(await nre.findPs(e)).length>0&&(t=!1);while(t&&r<_re);if(t)throw new Error(`process ${e} was not started`)}a(Bre,"checkProcessRunning");function Hre(e,t){let r=FB(e);if(r)return r;let s=GB(e,t);if(s)return s}a(Hre,"checkSchemaTableExist");function FB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(FB,"checkSchemaExists");function GB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GB,"checkTableExists");function qre(){let e=Jf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Jf().utc().unix();return e-t}a(qre,"getStartOfTomorrowInSeconds");function Fre(){return Jf().utc().format("DD-MM-YYYY")}a(Fre,"getLimitKey");function Gre(e){try{let t=new sre(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){ur.error("Got an error back ticking items."),ur.error(t)}}a(Gre,"backtickASTSchemaItems");function xre(e){return[e]}a(xre,"createForkArgs");function kre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kre,"autoCastBoolean");function Vre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Vre,"getTableHashAttribute");function $re(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a($re,"doesSchemaExist");function Yre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Yre,"doesTableExist");function Kre(e){try{return JSON.stringify(e)}catch{return e}}a(Kre,"stringifyObj");function Wre(e){let t=Jf.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(Wre,"ms_to_time");function Qre(e,t){let r=ii.basename(e,ii.extname(e));return ii.join(ii.dirname(e),r+t)}a(Qre,"changeExtension");function QR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=ore(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(QR,"getEnvCliRootPath");var KR;function zre(){if(KR)return KR;let e=QR();QR()&&UB.pathExistsSync(ii.join(e,We.HDB_CONFIG_FILE))&&(KR=!0)}a(zre,"noBootFile");function Jre(e,t){let r;return e.protocol==="http:"?r=cre:r=are,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(Jre,"httpRequest");function Xre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Xre,"transformReq");function jre(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(jre,"convertToMS")});var VB=T((mEe,kB)=>{"use strict";var zR=b(),Zre=$(),ese=Fs(),Ns=G(),tse=sd(),rse=Hc(),hEe=HS(),sse=cn(),nse=xc(),ise=require("semver/functions/gte"),ose=3e4,ase=7;kB.exports=cse;async function cse(){try{Ns.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await sse.setSchemaDataToGlobalAsync();let e=await ese.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===zR.PRE_4_0_0_VERSION&&t.push(use(n))}await Promise.allSettled(t),Ns.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Ns.error(e),e}}a(cse,"updateAllNodes");async function use(e){try{let{name:t,subscriptions:r}=e;Ns.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<ase;){let i=[];if(await tse.buildNodeStatus(e,i),Ns.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&ise(i[0].system_info.hdb_version,"4.0.0")){Ns.notify("Received open status from node:",t,"calling add node");let o={operation:zR.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await rse(o,!0),Ns.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Ns.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await Zre.async_set_timeout(ose)}s||(Ns.error("4.0.0 node update was unable to update connection to node:",t),Ns.error("Removing following node record from hdb_nodes",e),await nse({operation:zR.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Ns.error(t),t}}a(use,"updateNode")});var lse=VB();(async()=>{try{await lse()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
28
+ `+oR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Oee,"getServerOptions");function Nee(){let e=As.get(Nn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Nn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ree)&&(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(Nee,"getCORSOpts");function bee(){return As.get(Nn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??See}a(bee,"getHeaderTimeoutConfig")});var S0=T((rfe,p0)=>{"use strict";var{decode:yee}=require("msgpackr"),{isMainThread:Zde,parentPort:Iee,threadId:efe}=require("worker_threads"),u0=dt(),bn=ke(),wee=b(),bu=G(),a0=X(),l0=b();Ze();var Cee=an(),{recordAction:Lee,recordActionBinary:Dee}=(kn(),Z(b_)),{publishToStream:Uee}=u0,tfe={durable:bn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Mee,Pee,vee,_0,d0;p0.exports={initialize:f0,workQueueListener:m0,setSubscription:Bee,setIgnoreOrigin:qee,getDatabaseSubscriptions:Hee};async function f0(){d0=!0,bu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await u0.getNATSReferences();Mee=e,Pee=e.info.server_name,vee=t,_0=r}a(f0,"initialize");var Rf=new Map;function Bee(e,t,r){let s=Rf.get(e);s||Rf.set(e,s=new Map),s.set(t,r),d0||f0().then(m0)}a(Bee,"setSubscription");function Hee(){return Rf}a(Hee,"getDatabaseSubscriptions");var E0;function qee(e){E0=e}a(qee,"setIgnoreOrigin");var h0=100,c0=new Array(h0),Tf=0;async function m0(){let t=await(await _0.consumers.get(bn.WORK_QUEUE_CONSUMER_NAMES.stream_name,bn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();Iee?.on("message",async r=>{let{type:s}=r;s===l0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await c0[Tf],c0[Tf]=Fee(r).catch(s=>{bu.error(s)}),++Tf>=h0&&(Tf=0)}a(m0,"workQueueListener");async function Fee(e){let t=yee(e.data);Lee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=a0.get(wee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(bn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!E0),Dee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(bn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bu.trace(`messageProcessor nats msg id: ${e.headers.get(bn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Rf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:aR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:aR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:aR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}a0.get(l0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Uee(e.subject.split(".").slice(0,-1).join("."),Cee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bu.error(o)}e.ack()}a(Fee,"messageProcessor");function aR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aR,"convertOperation")});var fR={};Qe(fR,{disableNATS:()=>xee,publishToStream:()=>bf,setNATSReplicator:()=>cR,setPublishToStream:()=>kee,setSubscription:()=>dR,start:()=>Gee});function Gee(){Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$ee()}function xee(e=!0){O0=e}function kee(e,t){bf=e,dR=t}function $ee(){if(O0||process.env._DISABLE_NATS)return;let e=hs(),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];cR(n,r,i)}}ER((r,s)=>{cR(r.tableName,r.databaseName,r),s&&b0(r)}),!T0&&(T0=!0)}function cR(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[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){b0(i)}static subscribe(){let i=new is;return dR(t,e,i),i}static subscribeOnThisThread(i){return i<Vee}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 gf(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=N0;return i}a(s,"getNATSTransaction")}function b0(e){let t=Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_NODENAME);bf(`${lR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,_R.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 R0,lR,_R,g0,A0,Af,Of,Nf,O0,bf,dR,Vee,N0,T0,gf,uR,y0=Te(()=>{fe();as();R0=D(dt()),lR=D(ke()),_R=D(an());va();g0=D(S0()),A0=D(mr()),Af=D(X()),Of=D(b()),Nf=D(G());a(Gee,"start");a(xee,"disableNATS");bf=R0.publishToStream,dR=g0.setSubscription;a(kee,"setPublishToStream");Vee=2;a($ee,"assignReplicationSource");a(cR,"setNATSReplicator");a(b0,"publishSchema");gf=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=Af.default.get(Of.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||(Nf.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(bf(`${lR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,_R.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Nf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},uR=class extends gf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,A0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};N0=new uR});async function w0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hR.getResource(e,{});n=new pR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hR.get(e);i&&i.delete()}n=new If(e,t)}return n}function mR(){return yf++,yf>65500&&(yf=1),yf}var I0,_a,hR,yf,If,pR,C0=Te(()=>{fe();eu();I0=D(mr()),_a=D(G());fi();hR=et({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(w0,"getSession");yf=1;a(mR,"getNextMessageId");If=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(I=>I.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,_a.trace)("Resuming subscription from",n,"from",o);let h=jn.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,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=mR());let Q=N.id;Array.isArray(Q)&&(Q=Ko(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,_a.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=mR();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=jn.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=[]}},pR=class extends If{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=mR(),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,_a.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,I0.getNextMonotonicTime)()),(0,_a.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hR.put(this.sessionRecord)),t.qos}}});var TR={};Qe(TR,{start:()=>Kee});async function Kee({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}=U0(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,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Yee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,M0.getSuperUser)());let{onMessage:u,onClose:_}=U0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function U0(e,t,r,s,n){D0||(D0=!0,Oc(d=>{wf>0&&d.push({metric:"mqtt-connections",connections:wf,byThread:!0})}));let i;wf++;let o,c={protocolVersion:4},u=(0,Cf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wf--,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 ut.getUser(d.username,d.password.toString()),(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&L0.notify({username:s.username,status:yn.AUTH_AUDIT_STATUS.SUCCESS,type:yn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&L0.error({username:s.username,status:yn.AUTH_AUDIT_STATUS.FAILURE,type:yn.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=w0({user:s,...d}),o=await o}catch(N){return(0,Xr.error)(N),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);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=ea(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Xr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Cf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Cf,M0,SR,yn,Xr,L0,Yee,D0,wf,P0=Te(()=>{Cf=require("mqtt-packet");C0();M0=D(xr());Wo();kn();Mr();SR=D(X()),yn=D(b()),Xr=D(G()),L0=(0,Xr.loggerWithTag)("auth-event"),Yee=!0;a(Kee,"start");wf=0;a(U0,"onSocket")});var B0,v0,RR,H0=Te(()=>{B0=require("os"),v0=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,B0.platform)()!="win32"&&(RR=require("node-unix-socket").createReuseportFd)});var Ld={};Qe(Ld,{component_errors:()=>da,loadComponent:()=>Lf,loadComponentDirectories:()=>K0,setErrorReporter:()=>Jee});function K0(e,t){t&&(AR=t),e&&(OR=e);let r=[];if((0,Os.existsSync)(gR)){let n=(0,Os.readdirSync)(gR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(gR,o);r.push(Lf(c,AR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Lf(s,AR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Y0=!0})}function Jee(e){wu=e}async function Lf(e,t,r,s,n,i){if(!F0.has(e)){F0.set(e,!0),n&&(OR=n);try{let o;s&&(da=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,$0.getConfigObj)():(0,G0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=NR;let u=[],_=s;for(let l in o){let d=o[l];if(da.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,Os.existsSync)(N=(0,gt.join)(I,"node_modules",l));)if(I=(0,gt.dirname)(I),I.length<(0,V0.getHdbBasePath)().length){N=null;break}if(N)f=await Lf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=zee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(yu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!q0.includes(I)){let N=bR.get(yR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Iu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!RR)&&(q0.push(I),t0(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),OR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,k0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==NR[l]?.files&&!(0,Os.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,x0.default)(I,{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 Qee(Q);yu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else yu.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}`,wu?.(x),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(x),t.set(d.path||"/",new Cu(x)),da.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}`,wu?.(h),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(h),t.set(d.path||"/",new Cu(h),null,!0),da.set(s?l:(0,gt.basename)(e),h.message)}}if(yu.isMainThread&&!Y0&&i&&(0,fa.watchDir)(e,async()=>K0()),o.extensionModule)return await Al((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;wu?.(new Error(l)),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(l),da.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}`,wu?.(o),t.set("",new Cu(o))}}}var Os,gt,yu,G0,bR,yR,x0,fa,Iu,k0,V0,Wee,$0,Qee,gR,OR,Y0,AR,da,zee,NR,q0,F0,wu,Cu,Dd=Te(()=>{Os=require("fs"),gt=require("path"),yu=require("worker_threads"),G0=require("yaml"),bR=D(X()),yR=D(b());GA();$A();YA();aP();Yv();Jv();x0=D(require("fast-glob")),fa=D(Ze()),Iu=D(G());PE();Mr();k0=D(j());as();fe();r0();V0=D(X()),Wee=D(o0());Ad();y0();P0();$0=D(hr());H0();({readFile:Qee}=Os.promises),gR=bR.get(yR.CONFIG_PARAMS.COMPONENTSROOT),OR=new Map,da=new Map;a(K0,"loadComponentDirectories");zee={REST:Yd,rest:Yd,graphqlSchema:ME,jsResource:BE,fastifyRoutes:tR,login:qE,static:rR,operationsApi:Wee,customFunctions:{},http:{},clustering:fR,authentication:tu,mqtt:TR},NR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(NR,"static",{value:{files:"web/**"}});q0=[],F0=new Map;a(Jee,"setErrorReporter");a(Lf,"loadComponent");Cu=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 z0=T((Mfe,Q0)=>{var{isMainThread:W0}=require("worker_threads"),{getTables:Xee}=(fe(),Z(Ce)),{loadComponentDirectories:jee,loadComponent:Zee}=(Dd(),Z(Ld)),{resetResources:ete}=(eu(),Z(IU)),tte=JS(),rte=hr(),{dirname:ste}=require("path"),{getConnection:nte}=dt(),ite=X(),ote=b(),IR=new Map;async function ate(e=!1){!W0&&ite.get(ote.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nte();try{W0&&await tte()}catch(s){console.error(s)}let t=ete();Xee(),t.isWorker=e,await Zee(ste(rte.getConfigFilePath()),t,"hdb",!0,IR),await jee(IR,t);let r=[];for(let[s]of IR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ate,"loadRootComponents");Q0.exports.loadRootComponents=ate});var Ze=T((vfe,si)=>{"use strict";var{Worker:cte,MessageChannel:ute,parentPort:Qs,isMainThread:UR,threadId:lte,workerData:In}=require("worker_threads"),{PACKAGE_ROOT:_te}=b(),{join:Z0,isAbsolute:dte,extname:fte}=require("path"),{server:eB}=(Mr(),Z(to)),{watch:Ete,readdir:hte}=require("fs/promises"),{totalmem:J0}=require("os"),Mf=b(),mte=X(),wn=G(),{randomBytes:pte}=require("crypto"),{_assignPackageExport:Ste}=require("../index"),Tte=b(),X0=1024*1024,ri=[],jr=[],Rte=50,MR=1e4,gte="restart",tB="request_thread_info",rB="resource_report",sB="thread_info",nB="added-port",Ate="ack",wR;Ste("threads",jr);si.exports={startWorker:CR,restartWorkers:vR,shutdownWorkers:Ite,workers:ri,setMonitorListener:vte,onMessageFromWorkers:wte,onMessageByType:lB,broadcast:Lte,broadcastWithAcknowledgement:Ute,setChildListenerByType:yte,getWorkerIndex:iB,getWorkerCount:oB,getTicketKeys:aB,setMainIsWorker:Nte,setTerminateTimeout:Ote,restartNumber:In?.restartNumber||1};jr.onMessageByType=lB;jr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=jr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var PR;function Ote(e){MR=e}a(Ote,"setTerminateTimeout");function iB(){return In?In.workerIndex:PR?0:void 0}a(iB,"getWorkerIndex");function oB(){return In?In.workerCount:PR?1:void 0}a(oB,"getWorkerCount");function Nte(e){PR=e}a(Nte,"setMainIsWorker");var Df;function aB(){return Df||(Df=UR?pte(48):In.ticketKeys,Df)}a(aB,"getTicketKeys");Object.defineProperty(eB,"workerIndex",{get(){return iB()}});Object.defineProperty(eB,"workerCount",{get(){return oB()}});var cB={[tB](e,t){Mte(t)},[rB](e,t){Pte(t,e)}};function CR(e,t={}){let r=process.constrainedMemory?.()||J0();r=Math.min(r,J0(),2e4*X0);let s=Math.max(Math.floor(r/X0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new ute;_.existingPort=u,i.push(_),o.push(_.port2)}fte(e)||(e+=".js");let c=new cte(dte(e)?e:Z0(_te,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:si.exports.restartNumber,ticketKeys:aB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:nB,port:u,threadId:c.threadId},[u]);return Pf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CR(e,t),c.on("error",u=>{console.error("Worker error:",u),wn.error("Worker error:",u)}),c.on("exit",u=>{ri.splice(ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rte?(t.unexpectedRestarts=c.unexpectedRestarts+1,CR(e,t)):wn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{cB[u.type]?.(u,c)}),ri.push(c),Hte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(CR,"startWorker");var bte=[Mf.THREAD_TYPES.HTTP];async function vR(e=null,t=2,r=!0){if(UR){if(r){let{loadRootComponents:o}=z0();await o()}si.exports.restartNumber++,t<1&&(t=t*ri.length);let s=[],n=[];for(let o of ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:Mf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=bte.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),MR*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===Tte.ITC_EVENT_TYPES.CHILD_STARTED&&(wn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");wn.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}=pd();r&&(e==="http"||!e)&&mte.get(Mf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Qs.postMessage({type:gte,workerType:e})}a(vR,"restartWorkers");function yte(e,t){cB[e]=t}a(yte,"setChildListenerByType");function Ite(e){return vR(e,1/0,!1)}a(Ite,"shutdownWorkers");var uB=[];function wte(e){uB.push(e)}a(wte,"onMessageFromWorkers");var LR=new Map;function lB(e,t){let r=LR.get(e);r||LR.set(e,r=[]),r.push(t)}a(lB,"onMessageByType");var Cte=10;async function Lte(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Cte&&(t=0,await new Promise(setImmediate))}catch(s){wn.error("Unable to send message to worker",s)}}a(Lte,"broadcast");var Uf=new Map,Dte=1;function Ute(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Dte++,i=a(()=>{Uf.delete(n),--r===0&&t(),s!==Qs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Uf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Uf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){wn.error("Unable to send message to worker",n)}r===0&&t()})}a(Ute,"broadcastWithAcknowledgement");function Mte(e){e.postMessage({type:sB,workers:_B()})}a(Mte,"sendThreadInfo");function _B(){let e=Date.now();return ri.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(_B,"getChildWorkerInfo");function Pte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Pte,"recordResourceReport");var DR;function vte(e){DR=e}a(vte,"setMonitorListener");var Bte=1e3,j0=!1;function Hte(){j0||(j0=!0,setInterval(()=>{for(let e of ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DR&&DR()},Bte).unref())}a(Hte,"startMonitoring");var qte=1e3;if(Qs){Pf(Qs);for(let e=0,t=In.addPorts.length;e<t;e++){let r=In.addPorts[e];r.threadId=In.addThreadIds[e],Pf(r)}setInterval(()=>{let e=process.memoryUsage();Qs.postMessage({type:rB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qte).unref(),wR=a(()=>new Promise((e,t)=>{Qs.on("message",r),Qs.postMessage({type:tB});function r(s){s.type===sB&&(Qs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wR=_B;si.exports.getThreadInfo=wR;function Pf(e,t){jr.push(e),e.on("message",r=>{if(r.type===nB)r.port.threadId=r.threadId,Pf(r.port);else if(r.type===Ate){let s=Uf.get(r.id);s&&s()}else{for(let n of uB)n(r,e);let s=LR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){wn.error(i)}}}).on("close",()=>{jr.splice(jr.indexOf(e),1)}).on("exit",()=>{jr.splice(jr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Pf,"addPort");if(UR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await hte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Z0(s,i.name));try{for await(let{filename:i}of Ete(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");si.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Qs.on("message",async e=>{let{type:t}=e;t===Mf.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Qs.unref(),setTimeout(()=>{wn.warn("Thread did not voluntarily terminate",lte),process.exit(0)},MR).unref())})});function fB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ea||((0,Du.onMessageByType)(dB,d=>{EB(d.path)}),(0,Du.onMessageByType)(Fte,d=>{(0,Lu.trace)("confirming to proceed with txn",d.txnId)}),Ea=Object.create(null));let c=Ea[i]||(Ea[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=Ko(t);let _=new HR(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 EB(e,t){if(!Ea)return;let r=Ea[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:BR,exclusiveStart:!0})){BR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ko(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,Lu.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,Lu.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"},BR,!0)}function hB(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,Du.broadcast)({type:dB,path:n}),EB(n,!0)})}}var Lu,Du,dB,Fte,Ea,xfe,HR,BR,mB=Te(()=>{Lu=D(G()),Du=D(Ze());va();eu();oo();dB="transaction",Fte="transaction-await",xfe=Buffer.alloc(4096);a(fB,"addSubscription");HR=class extends is{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"}}},BR=Date.now();a(EB,"notifyFromTransactionData");a(hB,"listenToCommits")});var HT={};Qe(HT,{coerceType:()=>Ff,makeTable:()=>kf,setServerUtilities:()=>Qte,updateResource:()=>vu});function kf(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=[]),hB(i,u);let S=oh(i,s,u),A=0,I,N,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,Pt=2,Pe={},At={},es=864e5,JR,ku,YB=10,KB=6;E&&ZR();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,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](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 y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Ns.SYSTEM_SCHEMA_NAME&&(M.table===Ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!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,Uu);switch(M.type){case"put":return k._writeUpdate(z,Uu);case"delete":return k._writeDelete(Uu);case"publish":return k._writePublish(z,Uu);case"invalidate":return k.invalidate(Uu);default:Ke.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,zi.getWorkerIndex)()):(0,zi.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)){Ke.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 vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(oi=>oi.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,Hu.signalUserChange(new qu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Sa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=Cn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return XR(m,g,{transaction:U},L,M=>{if(M?vu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Js.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[FR]=!0,xR(V,z=>(vu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=jf(this[we],this[zs],this[me]);if(m)return this[FR]=!0,xR(m,g=>{this[zs]=g,this[Re]=g.value,this[qf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,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,Zf()}static enableAuditing(m=!0){E=m,m&&ZR(),at.audit=m}static coerceId(m){return m===""?null:Ff(m,Q)}static async dropTable(){if(delete xe[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));Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){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,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[cs])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,g){let C=$u(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=GR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=$u(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=GR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[cs]){let C=$u(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=GR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return $u(m)?.delete}update(m,g){if(!Cn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[zs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:At.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[zs],L,vf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,Bf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Vu(m,g,null)}),E)S(m,null,L,C,Bf,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,OB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=Cn(C),L=this[we];Sa(L);let y=this[zs];this[qR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[SB]||dl(m)){if(this.validate(m),C?.source?m=Ba(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&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ba(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.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),vu(this,V));let oe=V?.value;this[qR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Vu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[cs]){for await(let g of this.search(m))(await at.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=Cn(this[me]),C=this[we];Sa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),vu(this,y)),!(y?.version>L)&&(Vu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[zs],L,0,E,this[me],0,"delete"),E||Zf()):i.remove(this[we]))}}),!0}search(m){let g=Cn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){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,Js.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Ff(Ne,Ee)):Ff(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,AB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Pu.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===Pu.SEARCH_TYPES.CONTAINS||Ee===Pu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Pu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=kte:k.estimated_count=xte}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Hf.SKIP);else{let k=IE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(wE);V=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=IE(ne,y,C,at,m.allowFullScan);k=k.concat(vt)}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,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(oi,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&jf(He,oi,z,this);if(lr)return lr.then(zB=>Vt(zB))}let ys=oi?.value;if(!ys)return Hf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](ys))return Hf.SKIP;return ys}return a(Vt,"processEntry"),k.map(oi=>XR(oi,z,ne,!1,Vt))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=fB(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[cs]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[cs]){if(L){if(R)throw new Js.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=Sr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||gB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=Sr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||gB(C,z)){let oe=V.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)g.send(y[--U]);y[0]&&(g.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,Gf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[zs]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=Sr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)g.send(U[--V]);g.startTime=y}!m.omitCurrent&&this.doesExist()&&g.send({id:C,version:this[qf],timestamp:this[zs]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[qR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=Cn(this[me]),R=this[we]||null;Sa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[zs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:At.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&Zf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} 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(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(g||(g=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,y+"[*]");z&&(R[U]=z)}}else(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(g)throw new Js.ClientError(g.join(". "))}getUpdatedTime(){return this[qf]}wasLoadedFromSource(){return N?!!this[FR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Js.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Js.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,g),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){El(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Mu(),Sr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Mu();let L=Sr(R);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 g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Mu();let y=u.get(R);if(y){let U=Sr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let WB=at.prototype;return WB[SB]=!0,d&&at.setTTLExpiration(d/1e3),B&&QB(),at;function Vu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Bu.getIndexedValues)(M);if(V){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Bu.getIndexedValues)(U),V){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Vu,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>TB)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,Gf.writeKey)(W,Kte,0)>TB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Sa,"checkValidId");function XR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>KB&&(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=[],Pt>2&&Pt--}else se=Pt,Pt<YB&&Pt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(XR,"loadLocalRecord");function $u(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Wte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a($u,"getTablePermissions");function jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(vf|Bf)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=jR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new Js.ServerError("Entry is not cached",504);return}else return L}}}a(jf,"ensureLoadedFromSource");function Cn(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 g=m.next;if(!g)return m=m.next=new di,m.lmdbDb=i,m;m=g}while(!0)}else return new pl}a(Cn,"txnForContext");async function jR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(vf|Bf)?L(jR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Yte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,oe)=>{let k;xR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&vf;let He=M.lastModified||Vt&&R;vt=Vt||He>R||!U,He||(He=(0,Bu.getNextMonotonicTime)());let ys=performance.now()-Ne;if(Nr(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=He,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:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,ys)=>{if(ys?.version!==R)return;let lr=Vu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,ys,He,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(At.delete?.(M,W),E||h?S(W,null,ys,He,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(jR,"getFromSource");function Zf(){if(es!==JR&&(JR=es,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(ku&&clearTimeout(ku),!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(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),ku=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(ku);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+$te<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Mu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(Zf,"scheduleCleanup");function ZR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(ZR,"addDeleteRemoval");function QB(){(0,zi.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:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Mu()}}catch(W){Ke.error("Error in evicting old records",W)}},Vte).unref()}a(QB,"runRecordExpirationEviction")}function GR(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 RB(){}function Qte(e){OB=e}function Ff(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"&&!zte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,xf.autoCast)(e)}function gB(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 xR(e,t,r){return e?.then?e.then(t,r):t(e)}function vu(e,t){e[zs]=t,e[Re]=t?.value??null,e[qf]=t?.version}var Ns,Hf,Bu,AB,Pu,Fu,Js,Hu,qu,Ke,Gf,zi,xf,Gte,OB,xte,kte,Vte,$te,pB,Yte,qf,SB,zs,qR,FR,Uu,vf,Bf,Kte,TB,Wte,nEe,zte,Mu,nf=Te(()=>{Ns=D(b()),Hf=require("lmdb"),Bu=D(mr()),AB=require("lodash");as();bE();Pu=D(ze()),Fu=D(X());mB();Js=D(j()),Hu=D(un()),qu=D(ds());fe();Tl();Ke=D(G());ml();fi();Gf=require("ordered-binary"),zi=D(Ze());oo();xf=D($());xa();kn();Gte=new Uint8Array(9);Gte[8]=192;xte=1e8,kte=1e7,Vte=6e4,$te=864e5;Fu.initSync();pB=Fu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yte=1e4,qf=Symbol.for("version"),SB=Symbol.for("incremental-update"),zs=Symbol("entry"),qR=Symbol("is-saving"),FR=Symbol("loaded-from-source"),Uu={isNotification:!0,ensureLoaded:!1},vf=1,Bf=8,Kte=Buffer.allocUnsafeSlow(8192),TB=1978,Wte={read:!0,insert:!0,update:!0,delete:!0},nEe=(0,xf.convertToMS)(Fu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(kf,"makeTable");a(GR,"attributesAsObject");a(RB,"noop");a(Qte,"setServerUtilities");zte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ff,"coerceType");a(gB,"isDescendantId");Mu=a(()=>new Promise(setImmediate),"rest");a(xR,"when");a(vu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>zm,dropTableMeta:()=>tre,getDatabases:()=>hs,getTables:()=>Jte,onUpdatedTable:()=>ER,readMetaDb:()=>Gu,resetDatabases:()=>Xte,table:()=>et,tables:()=>pr});function Jte(){return Wf||hs(),pr||{}}function hs(){if(Wf)return xe;Wf=!0,pa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,qe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,kt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,qe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gu((0,qe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,qe.join)((0,ma.getBaseSchemaPath)(),r.name),n=(0,qe.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);Gu((0,qe.join)(s,i.name),(0,qe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Cr.existsSync)(n))for(let o of(0,Cr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,qe.extname)(o.name).toLowerCase()===".mdb"&&Gu((0,qe.join)(n,o.name),(0,qe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,qe.join)(c.path,(0,qe.basename)(o+".mdb"));(0,Cr.existsSync)(u)&&Gu(u,o,r,null,!0)}}for(let r in xe){let s=pa.get(r);if(s){let n=xe[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in pr)delete pr[n];delete pr[Qf]}}return pa=null,xe}}function Xte(){Wf=!1;for(let[,e]of ni)e.needsDeletion=!0;hs();for(let[e,t]of ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ni.delete(e));return xe}function Gu(e,t,r=$R,s,n){let i=new kR.default(e,!1);try{let o=ni.get(e);o?o.needsDeletion=!1:(o=(0,$f.open)(i),ni.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Vf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Cr.existsSync)(s)&&(i.path=s,_=(0,$f.open)(i),_.isLegacy=!0):_=bl(o));let l=IB(r),d=l[Qf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ha)||0)&&u.putSync(ha,Y+1):(S.tableId=Y=u.get(ha),Y||(Y=1),u.putSync(ha,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Ll(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(!I[x.name]){let be=new Ji.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=wB(l,E,kf({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:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of YR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function IB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=pr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Qf]=r,pa.set(e,r)}return t}function wB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=$R),hs();let r=IB(e),s=(0,qe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,kt.get)(Lr.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,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,qe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=ni.get(o);if(!c){let u=new kR.default(o,!1);c=(0,$f.open)(u),ni.set(o,c)}return c}async function zm(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ni.delete(n.path),n.status==="open"&&(await n.close(),await NB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[Qf]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=$R);let l=mc({database:t,table:e}),d=xe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Ji.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 I,N;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=bl(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,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new Ji.default(!1,!0),B=e+"/",x=Ll(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(ha),x.tableId||(x.tableId=1),S.putSync(ha,x.tableId+1),h.tableId=x.tableId,f=wB(d,e,kf({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,I=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A)),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(),I=!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),I=!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 Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!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&&(I=!0,F(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=ere(f,Q,Y):I&&Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of YR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function ere(e,t,r){try{let s=e.schemaVersion;await Yf.signalSchemaChange(new Kf.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,bB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),xu.workerData&&xu.workerData.restartNumber!==yB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>jte?await n:u>Zte&&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 Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function tre({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 ER(e){YR.push(e)}var kt,Vf,$f,qe,Cr,ma,Ji,kR,Lr,NB,VR,bB,Yf,Kf,xu,Zr,yB,$R,Qf,pr,xe,ha,YR,Wf,ni,pa,jte,Zte,fe=Te(()=>{kt=D(X()),Vf=D(ze()),$f=require("lmdb"),qe=require("path"),Cr=require("fs"),ma=D(ve());nf();Ji=D(Dl()),kR=D(Ml()),Lr=D(b()),NB=D(require("fs-extra")),VR=require("../index"),bB=D(mr()),Yf=D(un()),Kf=D(ds()),xu=require("worker_threads"),Zr=D(G()),yB=D(Ze());oo();xa();$R="data",Qf=Symbol("defined-tables");(0,kt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,VR._assignPackageExport)("databases",xe);(0,VR._assignPackageExport)("tables",pr);ha=Symbol.for("next-table-id"),YR=[],ni=new Map;a(Jte,"getTables");a(hs,"getDatabases");a(Xte,"resetDatabases");a(Gu,"readMetaDb");a(IB,"ensureDB");a(wB,"setTable");a(mc,"database");a(zm,"dropDatabase");a(et,"table");jte=1e3,Zte=10;a(ere,"runIndexing");a(tre,"dropTableMeta");a(ER,"onUpdatedTable")});var $=T((fEe,kB)=>{"use strict";var ii=require("path"),MB=require("fs-extra"),ur=G(),CB=require("fs-extra"),zf=require("os"),rre=require("net"),sre=require("recursive-iterator"),We=b(),nre=Ug(),LB=require("papaparse"),Jf=require("moment"),{inspect:ire}=require("util"),DB=require("is-number"),dEe=require("lodash"),ore=require("minimist"),are=require("https"),cre=require("http"),{hdb_errors:Xf}=j(),ure=/^((\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)))$/,PB=require("util").promisify(setTimeout),lre=100,_re=5,dre="",fre=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};kB.exports={isEmpty:Dr,isEmptyOrZeroLength:Xs,arrayHasEmptyValues:mre,arrayHasEmptyOrZeroLengthValues:pre,buildFolderPath:Sre,isBoolean:vB,errorizeMessage:Ere,stripFileExtension:Rre,autoCast:gre,autoCastJSON:BB,autoCastJSONDeep:WR,removeDir:Are,compareVersions:Ore,isCompatibleDataVersion:Nre,escapeRawValue:bre,unescapeValue:yre,stringifyProps:Ire,timeoutPromise:Cre,isClusterOperation:Dre,getClusterUser:Mre,checkGlobalSchemaTable:Ure,getHomeDir:qB,getPropsFilePath:wre,promisifyPapaParse:Pre,removeBOM:FB,createEventPromise:vre,checkProcessRunning:Bre,checkSchemaTableExist:Hre,checkSchemaExists:GB,checkTableExists:xB,getStartOfTomorrowInSeconds:qre,getLimitKey:Fre,isObject:Tre,isNotEmptyAndHasValue:hre,autoCasterIsNumberCheck:HB,backtickASTSchemaItems:Gre,isPortTaken:Lre,createForkArgs:xre,autoCastBoolean:kre,async_set_timeout:PB,getTableHashAttribute:Vre,doesSchemaExist:$re,doesTableExist:Yre,stringifyObj:Kre,ms_to_time:Wre,changeExtension:Qre,getEnvCliRootPath:QR,noBootFile:zre,httpRequest:Jre,transformReq:Xre,convertToMS:jre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Ere(e){return e instanceof Error?e:new Error(e)}a(Ere,"errorizeMessage");function Dr(e){return e==null}a(Dr,"isEmpty");function hre(e){return!Dr(e)&&(e||e===0||e===""||vB(e))}a(hre,"isNotEmptyAndHasValue");function Xs(e){return Dr(e)||e.length===0||e.size===0}a(Xs,"isEmptyOrZeroLength");function mre(e){if(Dr(e))return!0;for(let t=0;t<e.length;t++)if(Dr(e[t]))return!0;return!1}a(mre,"arrayHasEmptyValues");function pre(e){if(Xs(e))return!0;for(let t=0;t<e.length;t++)if(Xs(e[t]))return!0;return!1}a(pre,"arrayHasEmptyOrZeroLengthValues");function Sre(...e){try{return e.join(ii.sep)}catch{console.error(e)}}a(Sre,"buildFolderPath");function vB(e){return Dr(e)?!1:e===!0||e===!1}a(vB,"isBoolean");function Tre(e){return Dr(e)?!1:typeof e=="object"}a(Tre,"isObject");function Rre(e){return Xs(e)?dre:e.slice(0,-fre)}a(Rre,"stripFileExtension");function gre(e){return Dr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:HB(e)===!0?Number(e):ure.test(e)?new Date(e):e}a(gre,"autoCast");function BB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(BB,"autoCastJSON");function WR(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=WR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=WR(r);s!==r&&(e[t]=s)}return e}else return BB(e)}a(WR,"autoCastJSONDeep");function HB(e){if(e.startsWith("0.")&&DB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&DB(e))}a(HB,"autoCasterIsNumberCheck");async function Are(e){if(Xs(e))throw new Error(`Directory path: ${e} does not exist`);try{await CB.emptyDir(e),await CB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(Are,"removeDir");function Ore(e,t){if(Xs(e)){ur.info("Invalid current version sent as parameter.");return}if(Xs(t)){ur.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(Ore,"compareVersions");function Nre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Nre,"isCompatibleDataVersion");function bre(e){if(Dr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(bre,"escapeRawValue");function yre(e){if(Dr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yre,"unescapeValue");function Ire(e,t){if(Dr(e))return ur.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+zf.EOL}!Xs(s)&&s[0]===";"?r+=" "+s+n+zf.EOL:Xs(s)||(r+=s+"="+n+zf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Ire,"stringifyProps");function qB(){let e;try{e=zf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(qB,"getHomeDir");function wre(){let e=ii.join(qB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return MB.existsSync(e)||(e=ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(wre,"getPropsFilePath");function Cre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Cre,"timeoutPromise");async function Lre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=rre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Lre,"isPortTaken");function Dre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Dre,"isClusterOperation");function Ure(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ure,"checkGlobalSchemaTable");function Mre(e,t){if(Dr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Dr(e)||Xs(e)){ur.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){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Mre,"getClusterUser");function Pre(){LB.parsePromise=function(e,t,r){return new Promise(function(s,n){LB.parse(e,{header:!0,transformHeader:FB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Pre,"promisifyPapaParse");function FB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FB,"removeBOM");function vre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${ire(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(vre,"createEventPromise");async function Bre(e){let t=!0,r=0;do await PB(lre*r++),(await nre.findPs(e)).length>0&&(t=!1);while(t&&r<_re);if(t)throw new Error(`process ${e} was not started`)}a(Bre,"checkProcessRunning");function Hre(e,t){let r=GB(e);if(r)return r;let s=xB(e,t);if(s)return s}a(Hre,"checkSchemaTableExist");function GB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(GB,"checkSchemaExists");function xB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xB,"checkTableExists");function qre(){let e=Jf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Jf().utc().unix();return e-t}a(qre,"getStartOfTomorrowInSeconds");function Fre(){return Jf().utc().format("DD-MM-YYYY")}a(Fre,"getLimitKey");function Gre(e){try{let t=new sre(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){ur.error("Got an error back ticking items."),ur.error(t)}}a(Gre,"backtickASTSchemaItems");function xre(e){return[e]}a(xre,"createForkArgs");function kre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kre,"autoCastBoolean");function Vre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Vre,"getTableHashAttribute");function $re(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a($re,"doesSchemaExist");function Yre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Yre,"doesTableExist");function Kre(e){try{return JSON.stringify(e)}catch{return e}}a(Kre,"stringifyObj");function Wre(e){let t=Jf.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(Wre,"ms_to_time");function Qre(e,t){let r=ii.basename(e,ii.extname(e));return ii.join(ii.dirname(e),r+t)}a(Qre,"changeExtension");function QR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=ore(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(QR,"getEnvCliRootPath");var KR;function zre(){if(KR)return KR;let e=QR();QR()&&MB.pathExistsSync(ii.join(e,We.HDB_CONFIG_FILE))&&(KR=!0)}a(zre,"noBootFile");function Jre(e,t){let r;return e.protocol==="http:"?r=cre:r=are,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(Jre,"httpRequest");function Xre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Xre,"transformReq");function jre(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(jre,"convertToMS")});var $B=T((mEe,VB)=>{"use strict";var zR=b(),Zre=$(),ese=Gs(),bs=G(),tse=sd(),rse=Hc(),hEe=HS(),sse=cn(),nse=xc(),ise=require("semver/functions/gte"),ose=3e4,ase=7;VB.exports=cse;async function cse(){try{bs.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await sse.setSchemaDataToGlobalAsync();let e=await ese.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===zR.PRE_4_0_0_VERSION&&t.push(use(n))}await Promise.allSettled(t),bs.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw bs.error(e),e}}a(cse,"updateAllNodes");async function use(e){try{let{name:t,subscriptions:r}=e;bs.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<ase;){let i=[];if(await tse.buildNodeStatus(e,i),bs.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&ise(i[0].system_info.hdb_version,"4.0.0")){bs.notify("Received open status from node:",t,"calling add node");let o={operation:zR.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await rse(o,!0),bs.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),bs.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await Zre.async_set_timeout(ose)}s||(bs.error("4.0.0 node update was unable to update connection to node:",t),bs.error("Removing following node record from hdb_nodes",e),await nse({operation:zR.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw bs.error(t),t}}a(use,"updateNode")});var lse=$B();(async()=>{try{await lse()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();