harperdb 4.2.5 → 4.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +33 -33
- package/bin/lite.js +20 -20
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +17 -17
- package/launchServiceScripts/launchNatsReplyService.js +17 -17
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +17 -17
- package/npm-shrinkwrap.json +34 -34
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +17 -17
- package/server/threads/threadServer.js +20 -20
- package/utility/scripts/restartHdb.js +17 -17
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
"use strict";var QB=Object.create;var Sa=Object.defineProperty;var zB=Object.getOwnPropertyDescriptor;var JB=Object.getOwnPropertyNames;var XB=Object.getPrototypeOf,jB=Object.prototype.hasOwnProperty;var a=(e,t)=>Sa(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)Sa(e,r,{get:t[r],enumerable:!0})},ZR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of JB(t))!jB.call(e,n)&&n!==r&&Sa(e,n,{get:()=>t[n],enumerable:!(s=zB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?QB(XB(e)):{},ZR(t||!e||!e.__esModule?Sa(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>ZR(Sa({},"__esModule",{value:!0}),e);var rg=T((Zre,tg)=>{var ZB=require("fast-glob"),{statSync:jf,existsSync:Zf,readFileSync:eH,writeFileSync:tH}=require("fs"),{spawnSync:rH,spawn:sH,execFileSync:jre}=require("child_process"),{isMainThread:nH}=require("worker_threads"),{join:wn,relative:eg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:iH,platform:oH}=require("os");require("source-map-support").install();var aH=["resources","server","dataLayer","components"],Ta="ts-build",eE,cH=__filename.endsWith("tsBuild.js");if(cH){if(nH){let r;try{jf(wn(ts,Ta)),r=!0}catch{}if(r)for(let s of ZB.sync(aH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=jf(wn(ts,s)).mtimeMs-5e3,i=jf(wn(ts,Ta,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."),eE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),eE=!0;if(eE){let s=wn(ts,"node_modules/.bin/tsc");oH()==="win32"&&(s+=".cmd");let n=rH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=wn(iH(),"harperdb-tsc.pid"),o;if(Zf(i))try{process.kill(+eH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=sH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});tH(i,c.pid.toString()),c.unref()}}}}let e=tg.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=eg(ts,s[0]),o;i.startsWith(Ta)?o=wn(ts,eg(Ta,i)):o=wn(ts,Ta,i);let c=wn(o,r),u=c+".js";if(Zf(u))return u;if(c.includes(".")&&Zf(c))return c}return t(r,s,n)}}});var b=T((rse,mg)=>{"use strict";var Ur=require("path"),uH=require("fs"),{relative:ese,join:tse}=Ur,{existsSync:lH}=uH;function _H(){let e=__dirname;for(;!lH(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(_H,"getHDBPackageRoot");var Cn=_H(),sg="js",Vu=sg,dH="harperdb-config.yaml",fH="defaultConfig.yaml",EH="hdb",ng=`harperdb.${Vu}`,ig=`customFunctionsServer.${Vu}`,hH=`restartHdb.${Vu}`,rE="HarperDB",ku="Custom Functions",$u="Clustering Hub",Yu="Clustering Leaf",mH="Clustering Ingest Service",pH="Clustering Reply Service",SH="foreground.pid",TH="hdb.pid",RH="data",gH={HDB:rE,CLUSTERING_HUB:$u,CLUSTERING_LEAF:Yu,CLUSTERING_INGEST_SERVICE:mH,CLUSTERING_REPLY_SERVICE:pH,CUSTOM_FUNCTIONS:ku,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"},AH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},OH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NH={harperdb:rE,"clustering hub":$u,"clustering leaf":Yu,"custom functions":ku,custom_functions:ku,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},bH={CLUSTERING_HUB_PROC_DESCRIPTOR:$u,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yu},tE={HDB:Ur.join(Cn,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Cn,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Cn,"server/nats"),CLUSTERING_LEAF:Ur.join(Cn,"server/nats")},yH={HDB:Ur.join(tE.HDB,ng),CUSTOM_FUNCTIONS:Ur.join(tE.CUSTOM_FUNCTIONS,ig)},IH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},wH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},og="support@harperdb.io",CH="customer-success@harperdb.io",ag=1,LH=4141,cg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",DH="https://www.harperdb.io/product",UH=`For support, please submit a request at ${cg} or contact ${og}`,ug=`For license support, please contact ${CH}`,MH="None of the specified records were found.",PH="hash attribute not found",vH=`Your current license only supports ${ag} role. ${ug}`,BH="Your current license only supports 3 connections to a node.",HH="127.0.0.1",FH=1,qH=/^\.$/,GH=/^\.\.$/,xH="U+002E",kH=/\//g,VH="U+002F",$H=/U\+002F/g,YH=/^U\+002E$/,KH=/^U\+002EU\+002E$/,WH="d",QH=999999,zH="*",JH="--max-old-space-size=",XH="system",jH="__hdb_hash",ZH=".harperdb",eF=".hdb",tF="keys",rF="hdb_boot_properties.file",sF=".updateConfig.json",nF="SIGTSTP",iF=24,oF=6e4,aF=448,cF="blob",uF="trash",lF="database",_F="schema",dF="transactions",fF=".count",EF="id",hF="PROCESS_NAME",lg={SETTINGS_PATH_KEY:"settings_path"},_g=require("lodash"),mF={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"},pF={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},SF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},TF={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"},RF={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:",gF={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"},AF={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"},OF="060493.ks",NF=".license",bF={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"},yF={CSV:".csv",JSON:".json"},IF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},wF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ra={};Ra[J.INSERT]=J.INSERT;Ra[J.UPDATE]=J.UPDATE;Ra[J.UPSERT]=J.UPSERT;Ra[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 CF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},LF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dg={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"},DF=_g.invert(dg),UF={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"},fg={settings_path:lg.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];fg[t.toLowerCase()]=t}var MF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},PF={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"},vF={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"},BF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},HF={VERSION_DEFAULT:"2.2.0"},FF={DEVELOPMENT:8192,DEFAULT:512},qF={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"},GF={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"},xF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Eg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},kF=Symbol("metadata"),VF="__clustering__",$F=Object.values(Eg),YF=15984864e5,hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},KF=_g.invert(hg),WF={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"},QF=111,zF=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(js,"createLogRecord");function
|
|
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:wq.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(Uq,"findPs")});var ze=T((lse,Mg)=>{"use strict";var Mq="__dbis__",Pq="__txns__",vq="__environment_name__",Bq="__dbi_defintion__",Hq={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"},Fq=["__createdtime__","__updatedtime__"],qq="\uFFFF",Ug={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Gq=Object.values(Ug);Mg.exports={AUDIT_STORE_NAME:Pq,INTERNAL_DBIS_NAME:Mq,DBI_DEFINITION_NAME:Bq,SEARCH_TYPES:Hq,TIMESTAMP_NAMES:Fq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:vq,TRANSACTIONS_DBI_NAMES_ENUM:Ug,TRANSACTIONS_DBIS:Gq,OVERFLOW_MARKER:qq}});var dr=T((_se,kg)=>{"use strict";var Pg=b(),vg=ze(),Bg={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},Hg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:Hg("There was an error processing your request."),400:"Invalid request"},xq=Fg[Bg.INTERNAL_SERVER_ERROR],kq={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.`},Vq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},$q={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"},Yq={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 ${vg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vg.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"},Kq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Pg.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 ${Pg.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"},qg={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"},Wq={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."},Qq={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`},zq={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"},Jq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Xq={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`},Gg={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.`},xg={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}`},jq={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."},Zq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},eG={...qg,...$q,...kq,...Wq,...Qq,...zq,...Jq,...Xq,...Kq,...Gg,...xg,...jq,...Zq,...Vq};kg.exports={CHECK_LOGS_WRAPPER:Hg,HDB_ERROR_MSGS:eG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:xq,HTTP_STATUS_CODES:Bg,LMDB_ERRORS_ENUM:Yq,AUTHENTICATION_ERROR_MSGS:qg,VALIDATION_ERROR_MSGS:Gg,ITC_ERRORS:xg}});var j=T((fse,Yg)=>{"use strict";var ji=dr(),tG=G(),rG=b(),Ju=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Vg),this.statusCode=s||ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ji.DEFAULT_ERROR_MSGS[s]?ji.DEFAULT_ERROR_MSGS[s]:ji.DEFAULT_ERROR_MSGS[ji.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&&tG[n](i)}},_E=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}},dE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Vg(e,t,r,s=rG.LOG_LEVELS.ERROR,n=null,i=!1){if($g(e))return e;let o=new Ju(e,t,r,s,n);return i&&delete o.stack,o}a(Vg,"handleHDBError");function $g(e){return e.__proto__.constructor.name===Ju.name}a($g,"isHDBError");Yg.exports={isHDBError:$g,handleHDBError:Vg,ClientError:_E,ServerError:dE,hdb_errors:ji}});var Wg=T((hse,Kg)=>{"use strict";var sG={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
1
|
+
"use strict";var WB=Object.create;var Ta=Object.defineProperty;var QB=Object.getOwnPropertyDescriptor;var zB=Object.getOwnPropertyNames;var JB=Object.getPrototypeOf,XB=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})},jR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of zB(t))!XB.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=QB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?WB(JB(e)):{},jR(t||!e||!e.__esModule?Ta(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>jR(Ta({},"__esModule",{value:!0}),e);var tg=T((jre,eg)=>{var jB=require("fast-glob"),{statSync:Zf,existsSync:eE,readFileSync:ZB,writeFileSync:eH}=require("fs"),{spawnSync:tH,spawn:rH,execFileSync:Xre}=require("child_process"),{isMainThread:sH}=require("worker_threads"),{join:Cn,relative:ZR}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:nH,platform:iH}=require("os");require("source-map-support").install();var oH=["resources","server","dataLayer","components"],Ra="ts-build",tE,aH=__filename.endsWith("tsBuild.js");if(aH){if(sH){let r;try{Zf(Cn(ts,Ra)),r=!0}catch{}if(r)for(let s of jB.sync(oH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=Zf(Cn(ts,s)).mtimeMs-5e3,i=Zf(Cn(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."),tE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),tE=!0;if(tE){let s=Cn(ts,"node_modules/.bin/tsc");iH()==="win32"&&(s+=".cmd");let n=tH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Cn(nH(),"harperdb-tsc.pid"),o;if(eE(i))try{process.kill(+ZB(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});eH(i,c.pid.toString()),c.unref()}}}}let e=eg.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=ZR(ts,s[0]),o;i.startsWith(Ra)?o=Cn(ts,ZR(Ra,i)):o=Cn(ts,Ra,i);let c=Cn(o,r),u=c+".js";if(eE(u))return u;if(c.includes(".")&&eE(c))return c}return t(r,s,n)}}});var b=T((tse,hg)=>{"use strict";var Ur=require("path"),cH=require("fs"),{relative:Zre,join:ese}=Ur,{existsSync:uH}=cH;function lH(){let e=__dirname;for(;!uH(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(lH,"getHDBPackageRoot");var Ln=lH(),rg="js",$u=rg,_H="harperdb-config.yaml",dH="defaultConfig.yaml",fH="hdb",sg=`harperdb.${$u}`,ng=`customFunctionsServer.${$u}`,EH=`restartHdb.${$u}`,sE="HarperDB",Vu="Custom Functions",Yu="Clustering Hub",Ku="Clustering Leaf",hH="Clustering Ingest Service",mH="Clustering Reply Service",pH="foreground.pid",SH="hdb.pid",TH="data",RH={HDB:sE,CLUSTERING_HUB:Yu,CLUSTERING_LEAF:Ku,CLUSTERING_INGEST_SERVICE:hH,CLUSTERING_REPLY_SERVICE:mH,CUSTOM_FUNCTIONS:Vu,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"},gH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OH={harperdb:sE,"clustering hub":Yu,"clustering leaf":Ku,"custom functions":Vu,custom_functions:Vu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},NH={CLUSTERING_HUB_PROC_DESCRIPTOR:Yu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ku},rE={HDB:Ur.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Ln,"server/nats"),CLUSTERING_LEAF:Ur.join(Ln,"server/nats")},bH={HDB:Ur.join(rE.HDB,sg),CUSTOM_FUNCTIONS:Ur.join(rE.CUSTOM_FUNCTIONS,ng)},yH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},IH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ig="support@harperdb.io",wH="customer-success@harperdb.io",og=1,CH=4141,ag="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",LH="https://www.harperdb.io/product",DH=`For support, please submit a request at ${ag} or contact ${ig}`,cg=`For license support, please contact ${wH}`,UH="None of the specified records were found.",MH="hash attribute not found",PH=`Your current license only supports ${og} role. ${cg}`,vH="Your current license only supports 3 connections to a node.",BH="127.0.0.1",HH=1,FH=/^\.$/,GH=/^\.\.$/,qH="U+002E",xH=/\//g,kH="U+002F",VH=/U\+002F/g,$H=/^U\+002E$/,YH=/^U\+002EU\+002E$/,KH="d",WH=999999,QH="*",zH="--max-old-space-size=",JH="system",XH="__hdb_hash",jH=".harperdb",ZH=".hdb",eF="keys",tF="hdb_boot_properties.file",rF=".updateConfig.json",sF="SIGTSTP",nF=24,iF=6e4,oF=448,aF="blob",cF="trash",uF="database",lF="schema",_F="transactions",dF=".count",fF="id",EF="PROCESS_NAME",ug={SETTINGS_PATH_KEY:"settings_path"},lg=require("lodash"),hF={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"},mF={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},pF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},SF={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"},TF={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:",RF={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"},gF={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"},AF="060493.ks",OF=".license",NF={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"},bF={CSV:".csv",JSON:".json"},yF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},IF={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 wF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},CF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},_g={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"},LF=lg.invert(_g),DF={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"},dg={settings_path:ug.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];dg[t.toLowerCase()]=t}var UF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},MF={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"},PF={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"},vF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},BF={VERSION_DEFAULT:"2.2.0"},HF={DEVELOPMENT:8192,DEFAULT:512},FF={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"},GF={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"},qF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},fg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xF=Symbol("metadata"),kF="__clustering__",VF=Object.values(fg),$F=15984864e5,Eg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},YF=lg.invert(Eg),KF={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"},WF=111,QF=`\r
|
|
2
|
+
`,zF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},JF=["*","%"],XF="unauthorized_access",jF="func_val",ZF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},eG={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},tG={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},rG={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},sG={HTTP:"http"},nG={STOPPED:"stopped",ONLINE:"online"},iG="3.x.x",oG={SUCCESS:"success",FAILURE:"failure"},aG={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};hg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:ig,HDB_SUPPORT_URL:ag,HDB_PRICING_URL:LH,SUPPORT_HELP_MSG:DH,LICENSE_HELP_MSG:cg,HDB_PROC_NAME:sg,HDB_PROC_DESCRIPTOR:sE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Ku,CLUSTERING_HUB_PROC_DESCRIPTOR:Yu,SYSTEM_SCHEMA_NAME:JH,HASH_FOLDER_NAME:XH,HDB_HOME_DIR_NAME:jH,UPDATE_FILE_NAME:rF,LICENSE_KEY_DIR_NAME:eF,BOOT_PROPS_FILE_NAME:tF,JOB_TYPE_ENUM:MF,JOB_STATUS_ENUM:NF,SYSTEM_TABLE_NAMES:SF,SYSTEM_TABLE_HASH_ATTRIBUTES:TF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:bF,S3_BUCKET_AUTH_KEYS:yF,VALID_SQL_OPS_ENUM:IF,GEO_CONVERSION_ENUM:CF,HDB_SETTINGS_NAMES:_g,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:LF,SERVICE_ACTIONS_ENUM:wF,CLUSTER_MESSAGE_TYPE_ENUM:PF,CLUSTER_CONNECTION_DIRECTION_ENUM:vF,CLUSTER_EVENTS_DEFS_ENUM:FF,PERIOD_REGEX:FH,DOUBLE_PERIOD_REGEX:GH,UNICODE_PERIOD:qH,FORWARD_SLASH_REGEX:xH,UNICODE_FORWARD_SLASH:kH,ESCAPED_FORWARD_SLASH_REGEX:VH,ESCAPED_PERIOD_REGEX:$H,ESCAPED_DOUBLE_PERIOD_REGEX:YH,REG_KEY_FILE_NAME:AF,RESTART_TIMEOUT_MS:iF,HDB_FILE_PERMISSIONS:oF,DATABASES_DIR_NAME:uF,LEGACY_DATABASES_DIR_NAME:lF,TRANSACTIONS_DIR_NAME:_F,LIMIT_COUNT_NAME:dF,ID_ATTRIBUTE_STRING:fF,INSERT_MODULE_ENUM:mF,UPGRADE_JSON_FIELD_NAMES_ENUM:pF,RESTART_CODE:sF,RESTART_CODE_NUM:nF,CLUSTER_OPERATIONS:ga,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:gF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:RF,CLUSTERING_MESSAGE_TYPES:KF,HDB_FILE_SUFFIX:ZH,BLOB_FOLDER_NAME:aF,HDB_TRASH_DIR:cF,ORIGINATOR_SET_VALUE:WF,LICENSE_VALUES:BF,RAM_ALLOCATION_ENUM:HF,TIME_STAMP_NAMES_ENUM:fg,TIME_STAMP_NAMES:VF,PERMS_UPDATE_RELEASE_TIMESTAMP:$F,SEARCH_NOT_FOUND_MESSAGE:UH,SEARCH_ATTRIBUTE_NOT_FOUND:MH,LICENSE_ROLE_DENIED_RESPONSE:PH,LICENSE_MAX_CONNS_REACHED:vH,BASIC_LICENSE_MAX_NON_CU_ROLES:og,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:CH,VALUE_SEARCH_COMPARATORS:Eg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:YF,LICENSE_FILE_NAME:OF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:GF,NEW_LINE:QF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:HH,MOMENT_DAYS_TAG:KH,API_TURNOVER_SEC:WH,LOOPBACK:BH,CODE_EXTENSION:$u,WILDCARD_SEARCH_VALUE:QH,NODE_ERROR_CODES:qF,JAVASCRIPT_EXTENSION:rg,PERMS_CRUD_ENUM:zF,UNAUTHORIZED_PERMISSION_NAME:XF,SEARCH_WILDCARDS:JF,FUNC_VAL:jF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:ZF,JWT_ENUM:eG,CLUSTERING_FLAG:kF,ITC_EVENT_TYPES:tG,CUSTOM_FUNCTION_PROC_NAME:ng,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Vu,SERVICES:rG,THREAD_TYPES:sG,MEM_SETTING_KEY:zH,HDB_RESTART_SCRIPT:EH,PROCESS_DESCRIPTORS:RH,SERVICE_SERVERS:bH,SERVICE_SERVERS_CWD:rE,PROCESS_DESCRIPTORS_VALIDATE:OH,LAUNCH_SERVICE_SCRIPTS:yH,LOG_LEVELS:AH,PROCESS_NAME_ENV_PROP:EF,LOG_NAMES:gH,PM2_PROCESS_STATUSES:nG,CONFIG_PARAM_MAP:dg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:_H,HDB_DEFAULT_CONFIG_FILE:dH,ROLE_TYPES_ENUM:IH,BOOT_PROP_PARAMS:ug,INSTALL_PROMPTS:hF,HDB_ROOT_DIR_NAME:fH,CLUSTERING_PROCESSES:NH,FOREGROUND_PID_FILE:pH,PACKAGE_ROOT:Ln,PRE_4_0_0_VERSION:iG,DATABASES_PARAM_CONFIG:UF,METADATA_PROPERTY:xF,AUTH_AUDIT_STATUS:oG,AUTH_AUDIT_TYPES:aG,HDB_PID_FILE:SH,DEFAULT_DATABASE_NAME:TH,LEGACY_CONFIG_PARAMS:DF};tg()});var nE=T((sse,Sg)=>{"use strict";var mg=require("minimist");Sg.exports=cG;function cG(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pg(process.env),s=pg(mg(process.argv))):(r=process.env,s=mg(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(cG,"assignCMDENVVariables");function pg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pg,"objKeysToLowerCase")});var q=T((ise,_E)=>{"use strict";var ai=require("fs-extra"),{workerData:uG,threadId:lG}=require("worker_threads"),Xs=require("path"),gg=require("yaml"),Ag=require("properties-reader"),ct=b(),Tg=nE(),_G=require("os"),{PACKAGE_ROOT:oE}=b(),{_assignPackageExport:dG}=require("../../index"),Oa={};for(let e in console)Oa[e]||(Oa[e]=console[e]);var $t={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Og={STDOUT:"stdOut",STDERR:"stdErr"},fG=Xs.join(oE,"logs"),EG=Xs.join(oE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),hG=1e4,Js,ys,Vt,Wu,Qu,Na,ji,Aa;Aa===void 0&&Ng();_E.exports={notify:Ig,fatal:wg,error:ba,warn:lE,info:zu,debug:uE,trace:cE,setLogLevel:AG,log_level:Vt,loggerWithTag:mG,suppressLogging:pG,initLogSettings:Ng,setupConsoleLogging:bg,logCustomLevel:RG,closeLogFile:aE,getLogFilePath:()=>Na,OUTPUTS:Og,AuthAuditLog:bG};dG("logger",_E.exports);function Ng(e=!1){try{if(Aa===void 0||e){aE();let t=gG(),r=Tg(["ROOTPATH"]);try{Aa=Ag(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ai.pathExistsSync(Xs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:Vt,config_log_path:Qu,to_file:Js,to_stream:ys}=OG(r.ROOTPATH?Xs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Aa.get("settings_path"))),Wu=ct.LOG_NAMES.HDB,Na=Xs.join(Qu,Wu)}}catch(t){if(Aa=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=Tg(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){Vt=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=NG();Js=Js===void 0?n:Js,Js=Rg(Js),ys=ys===void 0?i:ys,ys=Rg(ys),Vt=Vt===void 0?s:Vt,Qu=fG,Wu=ct.LOG_NAMES.INSTALL,Na=Xs.join(Qu,Wu);return}throw ba("Error initializing log settings"),ba(t),t}process.env.DEV_MODE&&(ys=!0),bg()}a(Ng,"initLogSettings");var iE=!0;function bg(){Xi("error",ba),Xi("warn",lE),Xi("log",zu),Xi("info",zu),Xi("debug",uE),Xi("trace",cE)}a(bg,"setupConsoleLogging");function Xi(e,t){console[e]=function(...r){if(iE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Oa[e](...r)}}a(Xi,"logConsole");function mG(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Ig),fatal:r(wg),error:r(ba),warn:r(lE),info:r(zu),debug:r(uE),trace:r(cE)};function r(s){return function(...n){return s(t,...n)}}}a(mG,"loggerWithTag");function pG(e){try{iE=!1,e()}finally{iE=!0}}a(pG,"suppressLogging");var SG=uG?.name?.replace(/ /g,"-")||"main";function js(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||SG+"/"+lG);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(js,"createLogRecord");function ya(e){Js&&yg(e),ys&&process.stdout.write(e)}a(ya,"logStdOut");function Ju(e){Js&&yg(e),ys&&process.stderr.write(e)}a(Ju,"logStdErr");function yg(e){TG(),ji?ai.appendFileSync(ji,e):Oa.log(e)}a(yg,"logToFile");function aE(){try{ai.closeSync(ji)}catch{}ji=null}a(aE,"closeLogFile");function TG(){if(!ji){try{if(!Na)debugger;ji=ai.openSync(Na,"a")}catch(e){Oa.error(e)}setTimeout(()=>{aE()},hG).unref()}}a(TG,"openLogFile");function zu(...e){$t[Vt]<=$t.info&&ya(js("info",e))}a(zu,"info");function cE(...e){$t[Vt]<=$t.trace&&ya(js("trace",e))}a(cE,"trace");function ba(...e){$t[Vt]<=$t.error&&Ju(js("error",e))}a(ba,"error");function uE(...e){$t[Vt]<=$t.debug&&ya(js("debug",e))}a(uE,"debug");function Ig(...e){$t[Vt]<=$t.notify&&ya(js("notify",e))}a(Ig,"notify");function wg(...e){$t[Vt]<=$t.fatal&&Ju(js("fatal",e))}a(wg,"fatal");function lE(...e){$t[Vt]<=$t.warn&&Ju(js("warn",e))}a(lE,"warn");function RG(e,t,...r){t===Og.STDERR?Ju(js(e,r)):ya(js(e,r))}a(RG,"logCustomLevel");function gG(){let e;try{e=_G.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return ai.existsSync(t)||(t=Xs.join(oE,"utility/hdb_boot_properties.file")),t}a(gG,"getPropsFilePath");function AG(e){Vt=e}a(AG,"setLogLevel");function Rg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Rg,"autoCastBoolean");function OG(e){try{if(e.includes("config/settings.js")){let o=Ag(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.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=gg.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(OG,"getLogConfig");function NG(){try{let e=gg.parseDocument(ai.readFileSync(EG,"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(NG,"getDefaultConfig");function bG(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(bG,"AuthAuditLog")});var Lg=T((ase,Cg)=>{"use strict";var yG=require("util"),IG=require("path"),wG=require("child_process"),CG=yG.promisify(wG.execFile),LG=1e3*1e3*10;Cg.exports={findPs:DG};async function DG(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await CG("ps",["wwxo",`pid,${r}`],{maxBuffer:LG});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:IG.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(DG,"findPs")});var ze=T((use,Ug)=>{"use strict";var UG="__dbis__",MG="__txns__",PG="__environment_name__",vG="__dbi_defintion__",BG={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},HG=["__createdtime__","__updatedtime__"],FG="\uFFFF",Dg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},GG=Object.values(Dg);Ug.exports={AUDIT_STORE_NAME:MG,INTERNAL_DBIS_NAME:UG,DBI_DEFINITION_NAME:vG,SEARCH_TYPES:BG,TIMESTAMP_NAMES:HG,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:PG,TRANSACTIONS_DBI_NAMES_ENUM:Dg,TRANSACTIONS_DBIS:GG,OVERFLOW_MARKER:FG}});var dr=T((lse,xg)=>{"use strict";var Mg=b(),Pg=ze(),vg={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},Bg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Hg={500:Bg("There was an error processing your request."),400:"Invalid request"},qG=Hg[vg.INTERNAL_SERVER_ERROR],xG={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kG={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},VG={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},$G={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Pg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Pg.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},YG={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Mg.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 ${Mg.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"},Fg={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},KG={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},WG={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},QG={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},zG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},JG={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Gg={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.`},qg={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},XG={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},jG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},ZG={...Fg,...VG,...xG,...KG,...WG,...QG,...zG,...JG,...YG,...Gg,...qg,...XG,...jG,...kG};xg.exports={CHECK_LOGS_WRAPPER:Bg,HDB_ERROR_MSGS:ZG,DEFAULT_ERROR_MSGS:Hg,DEFAULT_ERROR_RESP:qG,HTTP_STATUS_CODES:vg,LMDB_ERRORS_ENUM:$G,AUTHENTICATION_ERROR_MSGS:Fg,VALIDATION_ERROR_MSGS:Gg,ITC_ERRORS:qg}});var j=T((dse,$g)=>{"use strict";var Zi=dr(),eq=q(),tq=b(),Xu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,kg),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&&eq[n](i)}},dE=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}},fE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function kg(e,t,r,s=tq.LOG_LEVELS.ERROR,n=null,i=!1){if(Vg(e))return e;let o=new Xu(e,t,r,s,n);return i&&delete o.stack,o}a(kg,"handleHDBError");function Vg(e){return e.__proto__.constructor.name===Xu.name}a(Vg,"isHDBError");$g.exports={isHDBError:Vg,handleHDBError:kg,ClientError:dE,ServerError:fE,hdb_errors:Zi}});var Kg=T((Ese,Yg)=>{"use strict";var rq={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
5
5
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
6
|
-
`)},nG="certificate.pem",iG="privateKey.pem",oG="ca.pem";Kg.exports={CERTIFICATE_VALUES:sG,CERTIFICATE_PEM_NAME:nG,PRIVATEKEY_PEM_NAME:iG,CA_PEM_NAME:oG}});var qe=T((mse,Qg)=>{"use strict";var Yt=require("validate.js");Yt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Yt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Yt.validators.type.checks={Object:function(e){return Yt.isObject(e)&&!Yt.isArray(e)},Array:Yt.isArray,Integer:Yt.isInteger,Number:Yt.isNumber,String:Yt.isString,Date:Yt.isDate,Boolean:function(e){return typeof e=="boolean"}};Yt.validators.hasValidFileExt=function(e,t){return Yt.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};Qg.exports={validateObject:aG,validateObjectAsync:cG,validateBySchema:uG};function aG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Yt(e,t,{format:"flat"});return r?new Error(r):null}a(aG,"validateObject");async function cG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Yt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(cG,"validateObjectAsync");function uG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(uG,"validateBySchema")});var EE=T((Tse,Zg)=>{"use strict";var jg=require("fs-extra"),ce=require("joi"),lG=require("os"),{boolean:Ie,string:Is,number:Ot,array:fE}=ce.types(),{totalmem:zg}=require("os"),Zi=require("path"),_G=G(),ju=$(),Sse=Wg(),Jg=b(),dG=qe(),Xg="log",fG="components",EG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SG="rootPath config parameter is undefined",TG="clustering.enabled config parameter is undefined",ai=Ot.min(0).required(),Zu=fE.items({host:Is.required(),port:ai}).empty(null),Zs;Zg.exports={configValidator:RG,routesValidator:yG,route_constraints:Zu};function RG(e){if(Zs=e.rootPath,ju.isEmpty(Zs))throw SG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(bG),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xu),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Xu),c=ce.custom(AG).empty(null).default(Xu),u=e.clustering?.enabled;if(ju.isEmpty(u))throw TG;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ai,routes:Zu}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ai}).required()}).required(),network:ce.object({port:ai}).required()}).required(),leafServer:ce.object({network:ce.object({port:ai,routes:Zu}).required(),streams:ce.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:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Is.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ce.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Is.custom(NG).optional().empty(null),maxSize:Is.custom(OG).optional().empty(null),path:Is.optional().empty(null).default(Xu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:fE.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:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:fE.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:ce.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:ce.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(RG,"configValidator");function gG(e){return jg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(gG,"doesPathExist");function AG(e,t){ce.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=gG(e);if(r)return t.message(r)}a(AG,"validatePath");function OG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(mG):e}a(OG,"validateRotationMaxSize");function NG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pG):e}a(NG,"validateRotationInterval");function bG(e,t){let r=t.state.path.join("."),s=lG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zg();return i=Math.round(Math.min(i,zg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),_G.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(bG,"setDefaultThreads");function Xu(e,t){if(!ju.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ju.isEmpty(Zs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(Zs,fG);case"logging.root":return Zi.join(Zs,Xg);case"clustering.leafServer.streams.path":return Zi.join(Zs,"clustering","leaf");case"storage.path":let s=Zi.join(Zs,Jg.LEGACY_DATABASES_DIR_NAME);return jg.existsSync(s)?s:Zi.join(Zs,Jg.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(Zs,Xg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xu,"setDefaultRoot");function yG(e){let t=ce.object({routes:Zu});return dG.validateBySchema({routes:e},t)}a(yG,"routesValidator")});var eo={};Qe(eo,{server:()=>ut});var eA,ut,Mr=Te(()=>{eA=require("../../index"),ut={};(0,eA._assignPackageExport)("server",ut)});var hr=T((Ase,uA)=>{"use strict";var Er=b(),mt=$(),lt=G(),{configValidator:IG,routesValidator:tA}=EE(),Kt=require("fs-extra"),wG=require("yaml"),rs=require("path"),CG=require("is-number"),sA=require("properties-reader"),LG=require("lodash"),{handleHDBError:DG}=j(),{HTTP_STATUS_CODES:UG,HDB_ERROR_MSGS:el}=dr(),gse=require("minimist"),{server:MG}=(Mr(),Z(eo)),{DATABASES_PARAM_CONFIG:ya,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,PG="Unable to get config value because config is uninitialized",vG="Config successfully initialized",BG="Error backing up config file",HG="Empty parameter sent to getConfigValue",nA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),FG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rA={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"},tl,_t,rl;uA.exports={createConfigFile:qG,getDefaultConfig:GG,getConfigValue:oA,initConfig:mE,flattenConfig:to,updateConfigValue:aA,updateConfigObject:kG,getConfiguration:YG,setConfiguration:KG,readConfigFile:SE,getClusteringRoutes:WG,initOldConfig:cA,getConfigFromFile:QG,getConfigFilePath:ci,addConfig:zG,deleteConfigFromFile:JG,getConfigObj:XG};function qG(e){let t=Ln(nA);tl=to(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("_"),_=hE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&iA(t,r),pE(t);let s=t.toJSON();_t=to(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Kt.createFileSync(i),Kt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(qG,"createConfigFile");function iA(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(ya.TABLES))for(let i in s[n][ya.TABLES])for(let o in s[n][ya.TABLES][i]){let c=s[n][ya.TABLES][i][o],u=[fr.DATABASES,n,ya.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(iA,"setSchemasConfig");function GG(e){if(tl===void 0){let r=Ln(nA);tl=to(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return tl[t.toLowerCase()]}a(GG,"getDefaultConfig");function oA(e){if(e==null){lt.error(HG);return}if(_t===void 0){lt.trace(PG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(oA,"getConfigValue");function ci(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):sA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function mE(e=!1){if(_t===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{Kt.accessSync(t,Kt.constants.F_OK|Kt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{cA(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ln(r)}catch(i){if(i.code===Er.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
|
|
7
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xG(s,r),pE(s);let n=s.toJSON();if(MG.config=n,_t=to(n),_t.logging_rotation_rotate)for(let i in rA)_t[i]&<.error(`Config ${rA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(vG)}}a(mE,"initConfig");function xG(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"),Kt.writeFileSync(t,String(e)))}a(xG,"checkForUpdatedConfig");function pE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=IG(t);if(r.error)throw el.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(pE,"validateConfig");function kG(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(kG,"updateConfigObject");function aA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&mE();let o=oA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Ln(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=hE(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=hE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&iA(u,_),pE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&VG(c,l),Kt.writeFileSync(d,String(u)),n&&(_t=to(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aA,"updateConfigValue");function VG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Kt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(BG),lt.error(r)}}a(VG,"backupConfigFile");var $G=["databases"];function to(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)),rl=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])&&!$G.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(to,"flattenConfig");function hE(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(CG(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(hE,"castConfigValue");function YG(){let e=mt.getPropsFilePath(),t=ci(e);return Ln(t).toJSON()}a(YG,"getConfiguration");async function KG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aA(void 0,void 0,n,!0),FG}catch(i){throw typeof i=="string"||i instanceof String?DG(i,i,UG.BAD_REQUEST,void 0,void 0,!0):i}}a(KG,"setConfiguration");function SE(){let e=mt.getPropsFilePath();try{Kt.accessSync(e,Kt.constants.F_OK|Kt.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=ci(e);return Ln(t).toJSON()}a(SE,"readConfigFile");function Ln(e){return wG.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ln,"parseYamlDoc");function WG(){let e=SE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=tA(t);if(r)throw el.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=tA(s);if(n)throw el.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 el.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(WG,"getClusteringRoutes");function cA(e){let t=sA(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(cA,"initOldConfig");function QG(e){let t=SE();return LG.get(t,e.replaceAll("_","."))}a(QG,"getConfigFromFile");async function zG(e,t){let r=Ln(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(ci(),String(r))}a(zG,"addConfig");function JG(e){let t=ci(mt.getPropsFilePath()),r=Ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Kt.writeFileSync(n,String(r))}a(JG,"deleteConfigFromFile");function XG(){return rl||(mE(),rl)}a(XG,"getConfigObj")});var X=T((Nse,dA)=>{"use strict";var TE=require("fs-extra"),ns=require("path"),lA=require("os"),jG=require("properties-reader"),Ia=G(),ui=$(),ee=b(),sl=hr(),ZG="Error initializing environment manager",nl="BOOT_PROPS_FILE_PATH",_A=!1,ex={[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},en={};dA.exports={BOOT_PROPS_FILE_PATH:nl,getHdbBasePath:tx,setHdbBasePath:rx,get:sx,initSync:ix,setProperty:he,initTestEnvironment:ox};function tx(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(tx,"getHdbBasePath");function rx(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(rx,"setHdbBasePath");function sx(e){let t=sl.getConfigValue(e);return t===void 0?en[e]:t}a(sx,"get");function he(e,t){ex[e]&&(en[e]=t),sl.updateConfigObject(e,t)}a(he,"setProperty");function nx(){let e;try{e=ui.getPropsFilePath(),TE.accessSync(e,TE.constants.F_OK|TE.constants.R_OK),_A=!0;let t=jG(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[nl]=e,!0}catch{return Ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(nx,"doesPropFileExist");function ix(e=!1){try{(_A||nx()||ui.noBootFile())&&(sl.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=sl.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ia.error(ZG),Ia.error(t),console.error(t),process.exit(1)}}a(ix,"initSync");function ox(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");en[nl]=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,lA.userInfo()?lA.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,ui.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ui.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ui.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ui.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,ui.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 ${nl}. Please check your boot props and settings files`;Ia.fatal(r),Ia.error(t)}}a(ox,"initTestEnvironment")});var ve=T((yse,TA)=>{"use strict";var Ua=b(),ax=$(),Wt=X(),Ma=require("path"),cx=require("minimist"),fA=require("fs-extra"),EA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:wa,SYSTEM_SCHEMA_NAME:il}=Ua,Ca,La,Da;function hA(){if(Ca!==void 0)return Ca;if(Wt.getHdbBasePath()!==void 0)return Ca=Wt.get(Dn.STORAGE_PATH)||Ma.join(Wt.getHdbBasePath(),Ua.DATABASES_DIR_NAME),Ca}a(hA,"getBaseSchemaPath");function mA(){if(La!==void 0)return La;if(Wt.getHdbBasePath()!==void 0)return La=SA(il),La}a(mA,"getSystemSchemaPath");function pA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=Wt.get(Ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ma.join(Wt.getHdbBasePath(),Ua.TRANSACTIONS_DIR_NAME),Da}a(pA,"getTransactionAuditStoreBasePath");function ux(e,t){let r=Wt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ma.join(pA(),e.toString())}a(ux,"getTransactionAuditStorePath");function SA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ua.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ma.join(hA(),e)}a(SA,"getSchemaPath");function lx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cx(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ax.isObject(s))throw o;i=s}for(let o of i){let c=o[il];if(!c)continue;let u=Wt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[wa.PATH];if(_)return EA.set(u,[il,wa.TABLES,t,wa.PATH],_),Wt.setProperty(Dn.DATABASES,u),_;let l=c?.[wa.PATH];if(l)return EA.set(u,[il,wa.PATH],l),Wt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!fA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ma.join(n,e);return fA.mkdirsSync(i),Wt.setProperty(Dn.STORAGE_PATH,n),i}return mA()}a(lx,"initSystemSchemaPaths");function _x(){Ca=void 0,La=void 0,Da=void 0}a(_x,"resetPaths");TA.exports={getBaseSchemaPath:hA,getSystemSchemaPath:mA,getTransactionAuditStorePath:ux,getTransactionAuditStoreBasePath:pA,getSchemaPath:SA,initSystemSchemaPaths:lx,resetPaths:_x}});var mr=T((Lse,NA)=>{"use strict";var dx=dr().LMDB_ERRORS_ENUM,wse=require("lmdb"),fx=ze(),Cse=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ol}=fx,gA=["number","string","symbol","boolean","bigint"];function Ex(e){if(e=e?.primaryStore||e,!e)throw new Error(dx.ENV_REQUIRED)}a(Ex,"validateEnv");function hx(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(hx,"stringifyData");function mx(e){return e instanceof Date?e.valueOf():e}a(mx,"convertKeyValueToWrite");function px(e){if(e==null)return;if(gA.includes(typeof e))return e.length>ol?[e.slice(0,ol)+RA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(gA.includes(typeof n))n.length>ol?t.push(n.slice(0,ol)+RA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(px,"getIndexedValues");var al=0,AA=0;function OA(){AA=Date.now()-performance.now()}a(OA,"adjustStartTime");OA();var Sx=6e4;setInterval(OA,Sx).unref();function Tx(){let e=performance.now()+AA;return e>al?(al=e,e):(al+=488e-6,al)}a(Tx,"getNextMonotonicTime");NA.exports={validateEnv:Ex,stringifyData:hx,convertKeyValueToWrite:mx,getNextMonotonicTime:Tx,getIndexedValues:px}});var bA,is,RE,Pa=Te(()=>{bA=require("events"),is=class extends bA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new RE;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)}},RE=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[vt]||(e[vt]=Object.create(null))}function _l(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[vt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=yA(d,o);if(f)return l||(l=this[vt]=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[vt];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[vt],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 yA(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}},_l(r,t)),new r(e)):new cl(e);case Array:let s=new ll(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=yA(o,t?.elements)),s[n]=o}return s}}function dl(e){let t=e[vt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=dl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function va(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=va(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[vt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=va(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ul(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||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(ul(i))return!0}else return!0}}else{let r=e[vt];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(ul(n))return!0}else return!0}else return!0}}return!1}var os,vt,cl,li,ll,fl=Te(()=>{as();os=D(j()),vt=Symbol("own-data");a(Pr,"getChanges");a(_l,"assignTrackedAccessors");a(yA,"trackObject");cl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};_l(cl,{});a(dl,"collapseData");a(va,"deepFreeze");a(ul,"hasChanges");li=Symbol.for("has-array-changes"),ll=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};ll.prototype.constructor=Array});function Ox(){Ax=setInterval(function(){for(let e of gE)if(e.stale){let t=e[me]?.url;IA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},gx).unref()}var AE,IA,Rx,gE,_i,El,gx,Ax,OE=Te(()=>{AE=D(mr()),IA=D(G());as();Rx=100,gE=new Set,_i=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(),gE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(gE.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,AE.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<Rx>>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=[]}},El=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,AE.getNextMonotonicTime)())}getReadTxn(){}},gx=3e4;a(Ox,"startMonitoringTxns");Ox()});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 _i;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 wA,di=Te(()=>{wA=require("../../index");as();OE();a(Ge,"transaction");(0,wA._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 bE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new ro.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(DA[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+"\uFFFF";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 ro.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 ro.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=yE(e);if(!S)throw new ro.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:LA.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 yE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),DA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return ws(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()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.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 ro.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 hl(e){if(!e)return;let t=new NE,r,s,n,i,o,c=CA;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=Nx[_],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?bx:CA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var ro,pt,Cs,LA,Nx,DA,CA,bx,NE,ml=Te(()=>{ro=D(j()),pt=D(ze()),Cs=require("ordered-binary"),LA=require("lmdb"),Nx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(bE,"idsForCondition");DA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(yE,"filterByType");a(ws,"attributeComparator");CA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,bx=/([^&|*=]+)([&|*=]*)/g;a(hl,"parseQuery");NE=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 CE={};Qe(CE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>HA,snake_case:()=>Ix});function Ix(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UA(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 wE(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[HA]=!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 pl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new pl(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 BA.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 IE(e){let t=e[Re];if(t){let r=e[vt];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 MA(e){if(typeof e=="string")return t=>IE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=IE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=IE(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 PA,vA,BA,me,we,cs,HA,Re,yx,Nt,pl,wE,as=Te(()=>{PA=require("crypto");Pa();vA=require("../../index"),BA=D(j());fl();di();ml();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),HA=Symbol("save-updates"),Re=Symbol("stored-record"),yx={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 _=MA(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,PA.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=MA(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 hl(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&&yx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:UA(t,this)}}return UA(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,vA._assignPackageExport)("Resource",Nt);a(Ix,"snake_case");pl=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(UA,"pathToId");wE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(IE,"selectFromObject");a(MA,"transformForSelect")});var DE={};Qe(DE,{loadGQLSchema:()=>Lx,start:()=>LE,startOnMainThread:()=>Cx});function LE({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(q){if(q.kind==="NonNullType"){let B=Q(q.type);return B.nullable=!1,B}if(q.kind==="ListType")return{type:"array",elements:Q(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.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 q of S.directives){if(q.name.value==="table"){for(let w of q.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(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="export"){N.export=!0;for(let w of q.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let q of S.fields){let w=Q(q.type);w.name=q.name.value,I.push(w);for(let K of q.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):wx.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,Sl.dirname)(s),S.tableClass):i.set((0,Sl.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,Sl.dirname)(s)+"/"+S.name,A.tableClass)}}}var Sl,FA,wx,Cx,Lx,qA=Te(()=>{Sl=require("path");fe();FA=D(Ze()),wx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(LE,"start");Cx=LE,Lx=LE({ensureTable:et}).handleFile});async function Tl(e){return Dx?(Ba||(Ba=Ux(Px)),(await(await Ba).import(e)).namespace):import(e)}async function Ux(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ba=new Compartment({console,Math,Date,fetch:Mx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xA.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,GA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ba}function Mx(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 Px(){return{Resource:Nt,tables:pr}}var GA,xA,Dx,Ba,UE=Te(()=>{as();fe();GA=require("fs/promises"),xA=require("path"),Dx=!1;a(Tl,"secureImport");a(Ux,"getCompartment");a(Mx,"secureOnlyFetch");a(Px,"getGlobalVars")});var PE={};Qe(PE,{handleFile:()=>vx});async function vx(e,t,r,s){let n=new Map,i=(0,kA.pathToFileURL)(r).toString(),o=await Tl(i);u(o.default)&&s.set((0,ME.dirname)(t),o.default),c(o,(0,ME.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 kA,ME,VA=Te(()=>{kA=require("url");UE();ME=require("path");a(vx,"handleFile")});var BE={};Qe(BE,{start:()=>Bx});function Bx({resources:e}){e.set("login",vE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vE,$A=Te(()=>{as();a(Bx,"start");vE=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 FE=T((cne,WA)=>{"use strict";var{Readable:Hx}=require("stream"),Fx=1e4;WA.exports={streamAsJSON(e){return new HE({value:e})}};var HE=class extends Hx{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),YA)}catch(n){yield YA(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);KA(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 KA(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 YA(e){return console.error(e),JSON.stringify(e.toString())}a(YA,"handleError");function KA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(KA,"when")});var oO=T((_ne,iO)=>{"use strict";var qE=require("recursive-iterator"),qx=require("alasql"),GE=require("clone"),QA=$(),{handleHDBError:zA,hdb_errors:Gx}=j(),{HDB_ERROR_MSGS:JA,HTTP_STATUS_CODES:XA}=Gx,{getDatabases:xx}=(fe(),Z(Ce)),kx=["DISTINCT_ARRAY"],jA=Symbol("validateTables"),xE=Symbol("validateTable"),lne=Symbol("getAllColumns"),ZA=Symbol("validateAllColumns"),Rl=Symbol("findColumn"),eO=Symbol("validateOrderBy"),Ha=Symbol("validateSegment"),kE=Symbol("validateColumn"),tO=Symbol("setColumnsForTable"),rO=Symbol("checkColumnsForAsterisk"),sO=Symbol("validateGroupBy"),nO=Symbol("hasColumns"),VE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[jA](),this[rO](),this[ZA]()}[jA](){if(this[nO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xE](t.table)})}}[nO](){let t=!1,r=new qE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[xE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=xx();if(!r[t.databaseid])throw zA(new Error,JA.SCHEMA_NOT_FOUND(t.databaseid),XA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zA(new Error,JA.TABLE_NOT_FOUND(t.databaseid,t.tableid),XA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=GE(n);i.table=GE(t),this.attributes.push(i)})}[Rl](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)}[rO](){let t=new qE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tO](r.tableid)}[tO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new qx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZA](){this[Ha](this.statement.columns,!1),this[Ha](this.statement.joins,!1),this[Ha](this.statement.where,!1),this[sO](this.statement.group,!1),this[Ha](this.statement.order,!0)}[Ha](t,r){if(!t)return;let s=new qE(t),n=[];for(let{node:i,path:o}of s)!QA.isEmpty(i)&&!QA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eO](i):n.push(this[kE](i)));return n}[sO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&kx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=GE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Rl](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[Rl](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`}[eO](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[kE](t)}[kE](t){let r=this[Rl](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]}};iO.exports=VE});var cO=T((fne,aO)=>{"use strict";var $E=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")}};aO.exports=$E});var lO=T((hne,uO)=>{"use strict";var YE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uO.exports=YE});var AO={};Qe(AO,{AUDIT_STORE_OPTIONS:()=>RO,createAuditEntry:()=>Ol,openAuditStore:()=>Al,readAuditEntry:()=>Sr,setAuditRetention:()=>Vx,transactionKeyEncoder:()=>TO});function Al(e){let t=e.auditStore=e.openDB(hO.AUDIT_STORE_NAME,RO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,pO.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()-KE})){if((n[0]&15)===QE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},KE/10).unref())}),t}function Vx(e){clearTimeout(Fa),Fa=null,KE=e}function Ol(e,t,r,s,n,i,o){let c=gO[i],u=1;s&&(s>1?so.setFloat64(0,s):Hr.set(XE),u=9),f(0),f(t),d(r),so.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,no.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),so.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,so.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new zE(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:gO[s&7],tableId:i,get recordId(){return EO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?EO(e,l,d):void 0},getValue(f){return s&WE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return JE.error("Reading audit entry error",e),{}}}function EO(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,gl,hO,mO,pO,SO,JE,Hr,so,TO,RO,KE,Fa,WE,_O,QE,dO,fO,gO,zE,io=Te(()=>{no=require("ordered-binary"),gl=D(X()),hO=D(ze()),mO=D(b()),pO=D(Ze()),SO=D($());Ga();JE=D(G());(0,gl.initSync)();Hr=Buffer.alloc(1024),so=new DataView(Hr.buffer,Hr.byteOffset,1024),TO={writeKey(e,t,r){return e===qa?(t.set(qa,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.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,no.readKey)(e,t,r)}},RO={encoding:"binary",keyEncoder:TO},KE=(0,SO.convertToMS)((0,gl.get)(mO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Al,"openAuditStore");a(Vx,"setAuditRetention");WE=16,_O=1,QE=2,dO=3,fO=4,gO={put:_O|WE,[_O]:"put",delete:QE,[QE]:"delete",message:dO|WE,[dO]:"message",invalidate:fO,[fO]:"invalidate"};a(Ol,"createAuditEntry");a(Sr,"readAuditEntry");zE=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(EO,"readKeySafely")});var wO={};Qe(wO,{HAS_EXPIRATION:()=>sh,LAST_TIMESTAMP_PLACEHOLDER:()=>qa,LOCAL_TIMESTAMP:()=>$x,METADATA:()=>xa,NO_TIMESTAMP:()=>jE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>XE,RecordEncoder:()=>rh,TIMESTAMP_ASSIGN_LAST:()=>Kx,TIMESTAMP_ASSIGN_NEW:()=>bO,TIMESTAMP_ASSIGN_PREVIOUS:()=>yO,TIMESTAMP_PLACEHOLDER:()=>Nl,TIMESTAMP_RECORD_PREVIOUS:()=>ZE,getUpdateRecord:()=>nh,handleLocalTimeForGets:()=>Il});function IO(){return ao[0]=ao[0]^64,Yx.getFloat64(0)}function Il(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Wx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=IO())}}}}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,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function nh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?ZE|yO:jE:oo=u?i?.localTime?ZE|16384:bO|16384:jE,l>0&&(c|=sh),yl=c,th=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>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=eh,A.timestampOffset=eh.start||0))}if(u){let A=_?.user?.username;if(E&&(bl=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,Ol(o,t,s,Y,A,d,bl),{ifVersion:p}),S}}r.put(qa,Ol(o,t,s,i?.localTime?1:0,A,d,bl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var OO,NO,Nl,qa,XE,$x,xa,ao,Yx,jE,bO,Kx,yO,ZE,sh,eh,bl,oo,yl,th,rh,Wx,fi,Ga=Te(()=>{OO=require("msgpackr");io();NO=D(G()),Nl=new Uint8Array([1,1,1,1,4,64,0,0]),qa=new Uint8Array([1,1,1,1,1,0,0,0]),XE=new Uint8Array([1,1,1,1,3,64,0,0]),$x=Symbol("local-timestamp"),xa=Symbol("metadata"),ao=new Uint8Array(8),Yx=new DataView(ao.buffer,0,8),jE=0,bO=0,Kx=1,yO=3,ZE=4,sh=16,oo=0,yl=-1,th=0,rh=class extends OO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||yl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=yl,u=th;c>=0&&(i+=2,yl=-1,u&&(i+=8,th=0));let _=eh=r.call(this,s,n|2048|i);bl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Nl[4]=o,Nl[5]=o>>8,_.set(Nl,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(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=IO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&sh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(IO,"getTimestamp");Wx=Map.prototype.get;a(Il,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&NO.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(nh,"getUpdateRecord")});var wl=T((gne,CO)=>{"use strict";var oh=X(),ah=b(),{RecordEncoder:Qx}=(Ga(),Z(wO));oh.initSync();var zx=oh.get(ah.CONFIG_PARAMS.STORAGE_COMPRESSION),Jx=oh.get(ah.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Xx=ah.UPDATES_PROPERTY,ih=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=zx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Jx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Qx},this.alwaysLazyProperty=s=>s===Xx)}};CO.exports=ih});var Ll=T((One,DO)=>{"use strict";var co=X(),ka=b();co.initSync();var jx=co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",LO=co.get(ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Zx=co.get(ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Cl=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=jx,this.noFSAccess=!0,LO!==void 0&&(this.overlappingSync=LO),this.noReadAhead=Zx}};DO.exports=Cl;Cl.MAX_DBS=1e4});var Ue=T((bne,xO)=>{"use strict";var uh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Dl=mr(),PO=G(),Qt=dr().LMDB_ERRORS_ENUM,Ul=lO(),lh=wl(),vO=Ll(),Un=ze(),UO=b(),{table:ek,resetDatabases:tk}=(fe(),Z(Ce)),MO=X(),ls=Un.INTERNAL_DBIS_NAME,BO=Un.DBI_DEFINITION_NAME,rk="data.mdb",sk="lock.mdb",Va=".mdb",nk="-lock",ch=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new uh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ml(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Ml,"pathEnvNameValidation");async function _h(e,t,r=!0){try{await us.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.INVALID_BASE_PATH):s}try{let s=Tr.join(e,t+Va);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,rk),us.constants.R_OK|us.constants.F_OK),Tr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(_h,"validateEnvironmentPath");function Pl(e,t){if(Dl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Pl,"validateEnvDBIName");async function ik(e,t,r=!1,s=!1){Ml(e,t);let n=Tr.basename(e);t=t.toString();let i=MO.get(UO.CONFIG_PARAMS.DATABASES);i||MO.setProperty(UO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await _h(e,t,s),HO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=Tr.join(e,t);await us.mkdirp(s?c:e);let u=new vO(s?c:c+Va,!1),_=uh.open(u);_.dbis=Object.create(null);let l=new lh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=dh(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ik,"createEnvironment");async function ok(e,t,r,s=!0){Ml(e,t),t=t.toString();let n=Tr.join(e,t);return ek({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ok,"copyEnvironment");async function HO(e,t,r=!1){Ml(e,t),t=t.toString();let s=dh(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 _h(e,t),i=Tr.join(e,t+Va),o=n!=i,c=new vO(n,o),u=uh.open(c);u.dbis=Object.create(null);let _=qO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(HO,"openEnvironment");async function ak(e,t,r=!1){Ml(e,t),t=t.toString();let s=Tr.join(e,t+Va),n=await _h(e,t);if(global.lmdb_map!==void 0){let i=dh(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+nk:Tr.join(Tr.dirname(n),sk))}a(ak,"deleteEnvironment");async function FO(e){Dl.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function dh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(dh,"getCachedEnvironmentName");function ck(e){Dl.validateEnv(e);let t=Object.create(null),r=Fr(e,ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ls)try{t[s]=Object.assign(new Ul,n)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ck,"listDBIDefinitions");function qO(e){Dl.validateEnv(e);let t=[],r=Fr(e,ls);for(let{key:s}of r.getRange({start:!1}))s!==ls&&t.push(s);return t}a(qO,"listDBIs");function uk(e,t){let s=Fr(e,ls).getEntry(t),n=new Ul;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(uk,"getDBIDefinition");function GO(e,t,r,s=!r){if(Pl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new lh(r,s===!0),o=e.openDB(t,i),c=new Ul(r===!0,s);return o[BO]=c,Fr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GO,"createDBI");function Fr(e,t){if(Pl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=uk(e,t):r=new Ul,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new lh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[BO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function lk(e,t){Pl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(lk,"statDBI");async function _k(e,t){try{let r=Tr.join(e,t+Va);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(_k,"environmentDataSize");function dk(e,t){if(Pl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,ls).removeSync(t)}a(dk,"dropDBI");function fk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)GO(e,i,i!==t,i===t),s=!0;else throw o}}s&&tk()}a(fk,"initializeDBIs");xO.exports={openDBI:Fr,openEnvironment:HO,createEnvironment:ik,listDBIs:qO,listDBIDefinitions:ck,createDBI:GO,dropDBI:dk,statDBI:lk,deleteEnvironment:ak,initializeDBIs:fk,TransactionCursor:ch,environmentDataSize:_k,copyEnvironment:ok,closeEnvironment:FO}});var VO=T((Ine,kO)=>{"use strict";var fh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};kO.exports=fh});var YO=T((Cne,$O)=>{"use strict";var Eh=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}};$O.exports=Eh});var WO=T((Dne,KO)=>{"use strict";var hh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};KO.exports=hh});var uo=T((Bne,JO)=>{"use strict";var Ek=Ue(),hk=VO(),mk=YO(),pk=WO(),Ls=mr(),$a=dr().LMDB_ERRORS_ENUM,Sk=ze(),tn=b(),Tk=$(),Rk=require("uuid"),Mne=require("lmdb"),{handleHDBError:gk,hdb_errors:Ak}=j(),{OVERFLOW_MARKER:Pne,MAX_SEARCH_KEY_LENGTH:vne}=Sk,QO=X();QO.initSync();var vl=QO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ok(e,t,r,s,n=Ls.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new hk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];zO(_,!0,n);let l=Nk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Sh(o,c,s,i,n)}a(Ok,"insertRecords");function Nk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){vl&&_.prefetch(u.map(l=>({key:l,value:n})),Bl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}vl&&e.dbis[t].prefetch([n],Bl),e.dbis[t].put(n,s,s[Ei])})}a(Nk,"insertRecord");function bk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(bk,"removeSkippedRecords");function zO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mh]))&&(e[mh]=r||Ls.getNextMonotonicTime()):delete e[mh]}a(zO,"setTimestamps");function ph(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Ek.initializeDBIs(e,t,r)}a(ph,"initializeTransaction");async function yk(e,t,r,s,n=Ls.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new mk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Th(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Sh(c,u,s,i,n,o)}a(yk,"updateRecords");async function Ik(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Rh(e,t,r,s)}catch(u){throw gk(u,u.message,Ak.HTTP_STATUS_CODES.BAD_REQUEST)}ph(e,t,r);let i=new pk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Tk.isEmpty(_[t])?(l=Rk.v4(),_[t]=l):l=_[t];let d=Th(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Sh(o,c,s,i,n)}a(Ik,"upsertRecords");async function Sh(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(),bk(r,i),s}a(Sh,"finalizeWrite");function Th(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(zO(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])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][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);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[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Th(e,t,r,s,n,i,o))}a(Th,"updateUpsertRecord");function wk(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error($a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($a.WRITE_ATTRIBUTES_REQUIRED):new Error($a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(wk,"validateBasic");function Rh(e,t,r,s){if(wk(e,t,r),!Array.isArray(s))throw s===void 0?new Error($a.RECORDS_REQUIRED):new Error($a.RECORDS_MUST_BE_ARRAY)}a(Rh,"validateWrite");function Bl(){}a(Bl,"noop");JO.exports={insertRecords:Ok,updateRecords:yk,upsertRecords:Ik}});var hi=T((Fne,Ck)=>{Ck.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((qne,ZO)=>{"use strict";var jO=$(),XO=b(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Mn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Lk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required(),Dk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()),Uk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required();function Mk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Mk,"checkValidTable");function Pk(e,t){return jO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Pk,"validateSchemaExists");function vk(e,t){let r=t.state.ancestors[0].schema;return jO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(vk,"validateTableExists");function Bk(e,t){return e.toLowerCase()===XO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Bk,"validateSchemaName");ZO.exports={common_validators:Mn,schema_regex:lo,hdb_schema_table:Lk,validateSchemaExists:Pk,validateTableExists:vk,validateSchemaName:Bk,checkValidTable:Mk,hdb_database:Dk,hdb_table:Uk}});var Hl=T((xne,eN)=>{var{common_validators:Us}=Ds(),Ka=qe(),Ya="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 Wa(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(Wa,"makeAttributesStrings");function Hk(e){return e=Wa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Hk,"schema_object");function Fk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Fk,"table_object");function qk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,Ka.validateObject(e,tt)}a(qk,"create_table_object");function Gk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence={message:Ya},tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Gk,"attribute_object");function xk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(xk,"describe_table");function kk(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(kk,"validateTableResidence");eN.exports={schema_object:Hk,create_table_object:qk,table_object:Fk,attribute_object:Gk,describe_table:xk,validateTableResidence:kk}});var rN=T((Vne,tN)=>{"use strict";var Vk=require("uuid"),gh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vk.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=gh});var Fl=T((Yne,sN)=>{"use strict";var $k=rN(),Ah=class extends $k{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}};sN.exports=Ah});var iN=T((Wne,nN)=>{"use strict";nN.exports=Kk;var Yk="inserted";function Kk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Kk,"returnObject")});var ql=T((zne,lN)=>{"use strict";var Wk=b(),Oh=Ue(),Qk=uo(),{getSystemSchemaPath:zk,getSchemaPath:Jk}=ve(),Xk=hi(),jk=Hl(),Zk=Fl(),eV=iN(),{handleHDBError:oN,hdb_errors:cN}=j(),aN=$(),{HTTP_STATUS_CODES:tV}=cN,Nh=Xk.hdb_attribute,uN=[];for(let e=0;e<Nh.attributes.length;e++)uN.push(Nh.attributes[e].attribute);var rV="inserted";lN.exports=sV;async function sV(e){let t=jk.attribute_object(e);if(t)throw oN(new Error,t.message,cN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&aN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oN(new Error,r,tV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aN.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 Zk(e.schema,e.table,e.attribute,e.id);try{let i=await Oh.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}`);Oh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Oh.openEnvironment(zk(),Wk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Qk.insertRecords(o,Nh.hash_attribute,uN,[n]);return eV(rV,c,{records:[n]},u)}catch(i){throw i}}a(sV,"lmdbCreateAttribute")});var yh=T((Xne,dN)=>{var{hdb_table:nV,hdb_database:_N}=Ds(),iV=qe(),bh=require("joi"),oV={undefined:"undefined",null:"null"},aV=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||oV[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"),cV=bh.object({database:_N,schema:_N,table:nV,records:bh.array().items(bh.object().custom(aV)).required()});dN.exports=function(e){return iV.validateBySchema(e,cV)}});var Qa=T((eie,EN)=>{"use strict";var sn=$(),fN=G(),Zne=yh(),{getDatabases:uV}=(fe(),Z(Ce)),{ClientError:mi}=j();EN.exports=lV;function lV(e){if(sn.isEmpty(e))throw new mi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new mi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new mi("invalid table specified.");if(!Array.isArray(e.records))throw new mi("records must be an array");let t=uV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new mi("a valid hash attribute must be provided with update record, check log for more info");if(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(lV,"insertUpdateValidate")});var za=T((rie,hN)=>{"use strict";var _V=b().OPERATIONS_ENUM,Ih=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=_V.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};hN.exports=Ih});var Za=T((iie,mN)=>{"use strict";var nie=za(),Gl=b(),Ch=$(),wh=G(),dV=require("uuid"),{handleHDBError:Ja,hdb_errors:fV}=j(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:ja}=fV;mN.exports=EV;function EV(e,t,r){for(let n=0;n<t.length;n++)hV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];mV(i,r,e.operation)}}a(EV,"processRows");function hV(e){if(Buffer.byteLength(String(e))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),ja.BAD_REQUEST,void 0,void 0,!0);if(Ch.isEmptyOrZeroLength(e)||Ch.isEmpty(e.trim()))throw Ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(hV,"validateAttribute");function mV(e,t,r){if(!e.hasOwnProperty(t)||Ch.isEmptyOrZeroLength(e[t])){if(r===Gl.OPERATIONS_ENUM.INSERT||r===Gl.OPERATIONS_ENUM.UPSERT){e[t]=dV.v4();return}throw wh.error("Update transaction aborted due to record with no hash value:",e),Ja(new Error,Xa.RECORD_MISSING_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wh.error(e),Ja(new Error,Xa.HASH_VAL_LENGTH_ERR,ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw wh.error(e),Ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(mV,"validateHash")});var SN=T((aie,pN)=>{"use strict";var Lh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=Lh});var gN=T((uie,RN)=>{"use strict";var Dh=Ue(),pV=G(),TN=dr().LMDB_ERRORS_ENUM;RN.exports=SV;async function SV(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 Dh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==TN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Dh.closeEnvironment(global.lmdb_map[s]),await Dh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==TN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){pV.error(t)}}a(SV,"cleanLMDBMap")});var nn=T((_ie,bN)=>{"use strict";var ec=require("crypto"),TV=X(),{CONFIG_PARAMS:RV}=b(),ON="aes-256-cbc",gV=32,AV=16,Uh=64,NN=32,OV=Uh+NN,AN=new Map;bN.exports={encrypt:NV,decrypt:bV,createNatsTableStreamName:yV};function NV(e){let t=ec.randomBytes(gV),r=ec.randomBytes(AV),s=ec.createCipheriv(ON,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(NV,"encrypt");function bV(e){let t=e.substr(0,Uh),r=e.substr(Uh,NN),s=e.substr(OV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ec.createDecipheriv(ON,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(bV,"decrypt");function yV(e,t){let r=TV.get(RV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=AN.get(r);return s||(s=ec.createHash("md5").update(r).digest("hex"),AN.set(r,s)),s}a(yV,"createNatsTableStreamName")});var pi=T((Eie,IN)=>{"use strict";var fie=qr(),xl=G(),yN=Hl(),IV=nn(),kl=$(),{handleHDBError:Vl,hdb_errors:wV}=j(),{HDB_ERROR_MSGS:$l,HTTP_STATUS_CODES:Mh}=wV,CV=X();CV.initSync();var{getDatabases:Ph}=(fe(),Z(Ce));IN.exports={describeAll:LV,describeTable:Yl,describeSchema:DV};async function LV(e){try{let t=kl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Ph(),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 Yl({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 Yl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){xl.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 xl.error("Got an error in describeAll"),xl.error(t),Vl(new Error,$l.DESCRIBE_ALL_ERR)}}a(LV,"describeAll");async function Yl(e,t){kl.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=yN.describe_table(e);if(i)throw i;let c=Ph()[r];if(!c)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let u=c[s];if(!u)throw Vl(new Error,$l.TABLE_NOT_FOUND(e.schema,e.table),Mh.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=IV.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){xl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Yl,"descTable");async function DV(e){kl.transformReq(e);let t=yN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Ph()[s];if(!i)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),kl.isEmpty(u)||u.describe){let _=await Yl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(DV,"describeSchema")});var Pn=T((Sie,UN)=>{var UV=hi(),{callbackify:CN,promisify:MV}=require("util"),{getDatabases:LN}=(fe(),Z(Ce));UN.exports={setSchemaDataToGlobal:wN,getTableSchema:PV,getSystemSchema:vV,setSchemaDataToGlobalAsync:MV(wN)};var DN=pi(),mie=CN(DN.describeAll),pie=CN(DN.describeTable);function wN(e){global.hdb_schema=LN(),e&&e()}a(wN,"setSchemaDataToGlobal");function PV(e,t,r){let s=LN()[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(PV,"getTableSchema");function vV(){return UV}a(vV,"getSystemSchema")});var Gr=T((Rie,BN)=>{"use strict";var Wl=yh(),bt=$(),BV=require("util"),Ql=_s(),HV=Pn(),MN=G(),{handleHDBError:Si,hdb_errors:FV}=j(),{HTTP_STATUS_CODES:Ti}=FV,qV=BV.promisify(HV.getTableSchema),GV="updated",PN="inserted",vN="upserted";BN.exports={insert:kV,update:VV,upsert:$V,validation:xV,flush:YV};async function xV(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 qV(e.schema,e.table),r=Wl(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 MN.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 MN.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(xV,"validation");async function kV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.createRecords(e);return Kl(PN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(kV,"insertData");async function VV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.updateRecords(e);return bt.isEmpty(s.existing_rows)?Kl(GV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Kl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(VV,"updateData");async function $V(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.upsertRecords(e);return Kl(vN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a($V,"upsertData");function Kl(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===PN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===vN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Kl,"returnObject");function YV(e){return bt.transformReq(e),Ql.flush(e.schema,e.table)}a(YV,"flush")});var Bh=T((Aie,qN)=>{var KV=qe(),vh=require("joi"),{hdb_table:WV,hdb_database:HN}=Ds(),FN={schema:HN,database:HN,table:WV},QV={date:vh.date().iso().required()},zV={timestamp:vh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qN.exports=function(e,t){let r=t==="timestamp"?{...FN,...zV}:{...FN,...QV},s=vh.object(r);return KV.validateBySchema(e,s)}});var kN=T((Oie,xN)=>{var JV=qe(),Hh=require("joi"),{hdb_table:XV,hdb_database:GN}=Ds(),jV=Hh.object({schema:GN,database:GN,table:XV,hash_values:Hh.array().required(),ids:Hh.array()});xN.exports=function(e){return JV.validateBySchema(e,jV)}});var $N=T((Nie,VN)=>{"use strict";var Fh=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}},qh=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}},Gh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:Fh,NoSQLSeachObject:qh,DeleteResponseObject:Gh}});var Ai=T((yie,zN)=>{"use strict";var KN=Bh(),ZV=kN(),Ri=$(),YN=require("moment"),WN=G(),{promisify:e$,callbackify:t$}=require("util"),gi=b(),r$=Pn(),xh=e$(r$.getTableSchema),kh=_s(),{DeleteResponseObject:s$}=$N(),{handleHDBError:vn,hdb_errors:n$}=j(),{HDB_ERROR_MSGS:zl,HTTP_STATUS_CODES:Bn}=n$,i$="records successfully deleted",o$=t$(QN);zN.exports={delete:o$,deleteRecord:QN,deleteFilesBefore:a$,deleteAuditLogsBefore:c$};async function a$(e){let t=KN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw vn(new Error,zl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await kh.deleteRecordsBefore(e);if(await xh(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(a$,"deleteFilesBefore");async function c$(e){let t=KN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,zl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await kh.deleteAuditLogsBefore(e);return await xh(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(c$,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=ZV(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await xh(e.schema,e.table);let s=await kh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${i$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new s$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QN,"deleteRecord")});var Jl=T((wie,jN)=>{var u$=require("crypto"),JN=9;function l$(e){let t=d$(JN),r=XN(e+t);return t+r}a(l$,"createHash");function _$(e,t){let r=e.substr(0,JN),s=r+XN(t+r);return e===s}a(_$,"validateHash");function d$(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(d$,"generateSalt");function XN(e){return u$.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:l$,validate:_$}});var eb=T((Lie,ZN)=>{var Vh=qe(),Bt={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 f$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Vh.validateObject(e,Bt)}a(f$,"addUserValidation");function E$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Vh.validateObject(e,Bt)}a(E$,"alterUserValidation");function h$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Vh.validateObject(e,Bt)}a(h$,"dropUserValidation");ZN.exports={addUserValidation:f$,alterUserValidation:E$,dropUserValidation:h$}});var ke=T((Mie,rb)=>{"use strict";var{platform:Uie}=require("os"),m$="nats-server.zip",$h="nats-server",p$=process.platform==="win32"?`${$h}.exe`:$h,Yh="HDB",S$=/^[^\s.,*>]+$/,tb="__request__",T$=a(e=>`${e}.${tb}`,"REQUEST_SUBJECT"),R$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},g$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},A$={HUB:"hub.pid",LEAF:"leaf.pid"},O$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},N$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Yh,deliver_subject:"__HDB__.WORKQUEUE"},b$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Yh,deliver_subject:"HDB.SCHEMAQUEUE"},y$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Yh,deliver_subject:"HDB.USERQUEUE"},I$={SUCCESS:"success",ERROR:"error"},w$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},C$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},L$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},D$={debug:"-D",trace:"-DVV"};rb.exports={NATS_SERVER_ZIP:m$,NATS_SERVER_NAME:$h,NATS_BINARY_NAME:p$,PID_FILES:A$,NATS_CONFIG_FILES:g$,SERVER_SUFFIX:O$,WORK_QUEUE_CONSUMER_NAMES:N$,SCHEMA_QUEUE_CONSUMER_NAMES:b$,USER_QUEUE_CONSUMER_NAMES:y$,NATS_TERM_CONSTRAINTS_RX:S$,REQUEST_SUFFIX:tb,UPDATE_REMOTE_RESPONSE_STATUSES:I$,CLUSTER_STATUS_STATUSES:w$,REQUEST_SUBJECT:T$,SUBJECT_PREFIXES:C$,MSG_HEADERS:R$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:D$,LOG_LEVEL_HIERARCHY:L$}});var nb=T((vie,sb)=>{"use strict";var Xl=b(),jl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Kh=class extends jl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};sb.exports={BaseLicense:jl,ExtendedLicense:Kh}});var tc=T((Hie,lb)=>{"use strict";var Eo=require("fs-extra"),ib=Jl(),ob=require("crypto"),U$=require("moment"),M$=require("uuid").v4,Ht=G(),Qh=require("path"),P$=$(),Hn=b(),v$=nb().ExtendedLicense,fo="invalid license key format",B$="061183",H$="mofi25",F$="aes-256-cbc",q$=16,G$=32,ab=X();ab.initSync();var Wh;lb.exports={validateLicense:cb,generateFingerPrint:k$,licenseSearch:ub,getLicense:Y$};function zh(){return Qh.join(ab.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(zh,"getLicenseDirPath");function x$(){let e=zh();return Qh.join(e,Hn.LICENSE_FILE_NAME)}a(x$,"getLicenseFilePath");function Jh(){let e=zh();return Qh.join(e,Hn.REG_KEY_FILE_NAME)}a(Jh,"getFingerPrintFilePath");async function k$(){let e=Jh();try{return await Eo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await V$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(k$,"generateFingerPrint");async function V$(){let e=M$(),t=ib.hash(e),r=Jh();try{await Eo.mkdirp(zh()),await Eo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ht.error(`Error writing fingerprint file to ${r}`),Ht.error(s),new Error("There was an error generating the fingerprint")}return t}a(V$,"writeFingerprint");function cb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=Jh(),n=!1;try{n=Eo.statSync(s)}catch(i){Ht.error(i)}if(n){let i;try{i=Eo.readFileSync(s,"utf8")}catch{Ht.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(H$),c=o[1];c=Buffer.concat([Buffer.from(c)],q$);let u=Buffer.concat([Buffer.from(i)],G$),_=ob.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=$$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fo),Ht.error(fo),new Error(fo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(fo),Ht.error(fo),new Error(fo)}else r.exp_date=l;r.exp_date<U$().valueOf()&&(r.valid_date=!1),ib.validate(o[1],`${B$}${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||Ht.error("Invalid licence"),r}a(cb,"validateLicense");function $$(e,t){try{let r=ob.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ht.warn("Check old license failed")}}a($$,"checkOldLicense");function ub(){let e=new v$,t=[];try{t=Eo.readFileSync(x$(),"utf-8").split(Hn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ht.info("no license file found"):Ht.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(P$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=cb(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){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Wh=e,e}a(ub,"licenseSearch");async function Y$(){return Wh||await ub(),Wh}a(Y$,"getLicense")});var xr=T((kie,yb)=>{"use strict";var Eb="username is required",hb="nothing to update, must supply active, role or password to update",mb="password cannot be an empty string",pb="If role is specified, it cannot be empty.",Sb="active must be true or false";yb.exports={addUser:eY,alterUser:tY,dropUser:sY,getSuperUser:aY,userInfo:nY,listUsers:e_,listUsersExternal:iY,setUsersToGlobal:mo,findAndValidateUser:Nb,getClusterUser:cY,USERNAME_REQUIRED:Eb,ALTERUSER_NOTHING_TO_UPDATE:hb,EMPTY_PASSWORD:mb,EMPTY_ROLE:pb,ACTIVE_BOOLEAN:Sb};var Tb=Gr(),K$=Ai(),Zh=Jl(),Rb=eb(),gb=qr(),em=on(),Rr=$(),Ab=require("validate.js"),_e=G(),{promisify:W$}=require("util"),tm=nn(),_b=b(),db=ke(),Q$=hr(),qie=X(),Gie=tc(),z$=hi(),{table:xie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:J$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Xh,HDB_ERROR_MSGS:ho}=J$,{UserEventMsg:rm}=ds(),jh=require("lodash"),{server:sm}=(Mr(),Z(eo)),X$=G();sm.getUser=Nb;var Ob={username:!0,active:!0,role:!0,password:!0},fb=new Map,Zl=gb.searchByValue,j$=gb.searchByHash,Z$=W$(K$.delete);async function eY(e){let t=Ab.cleanAttributes(e,Ob),r=Rb.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 Zl(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,ho.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,ho.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Tb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await mo()}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,ho.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],em.signalUserChange(new rm(process.pid)),`${c.username} successfully added`}a(eY,"addUser");async function tY(e){let t=Ab.cleanAttributes(e,Ob);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(Eb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(hb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Sb);let r=rY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password)),t.role==="")throw new Error(pb);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 Zl(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=ho.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=ho.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 Tb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await mo()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return em.signalUserChange(new rm(process.pid)),n}a(tY,"alterUser");function rY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(rY,"isClusterUser");async function sY(e){try{let t=Rb.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 Ms(new Error,ho.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Z$(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await mo()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return em.signalUserChange(new rm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(sY,"dropUser");async function nY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await j$(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(nY,"userInfo");async function iY(){let e;try{e=await e_()}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(iY,"listUsersExternal");async function e_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Zl(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]=jh.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 Zl(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=jh.cloneDeep(o),o.role=r[o.role],oY(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(e_,"listUsers");function oY(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(z$)){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(oY,"appendSystemTablesToRole");async function mo(){try{let e=await e_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(mo,"setUsersToGlobal");async function Nb(e,t,r=!0){global.hdb_users||await mo();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Xh.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(fb.get(t)===s.password)return n;if(Zh.validate(s.password,t))fb.set(t,s.password);else throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Nb,"findAndValidateUser");async function aY(){global.hdb_users||await mo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(aY,"getSuperUser");async function cY(){let e=await e_(),t=Q$.getConfigFromFile(_b.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===_b.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=tm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+db.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+db.SERVER_SUFFIX.ADMIN,r}a(cY,"getClusterUser");var bb=[];sm.invalidateUser=function(e){for(let t of bb)try{t(e)}catch(r){X$.error("Error invalidating user",r)}};sm.onInvalidatedUser=function(e){bb.push(e)}});var sc=T((Kie,Lb)=>{"use strict";var Oi=G(),gr=b(),uY=gN(),$ie=Pn(),Yie=pi(),lY=xr(),{validateEvent:Ib}=ds(),rc=_s(),_Y=require("process"),{resetDatabases:dY}=(fe(),Z(Ce)),fY={[gr.ITC_EVENT_TYPES.SCHEMA]:EY,[gr.ITC_EVENT_TYPES.USER]:Cb};async function EY(e){let t=Ib(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await uY(e.message),await hY(e.message)}a(EY,"schemaHandler");async function hY(e){try{rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=dY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(hY,"syncSchemaMetadata");var wb=[];async function Cb(e){try{try{rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Ib(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${_Y.pid} received user event:`,e),await lY.setUsersToGlobal();for(let r of wb)r()}catch(t){Oi.error(t)}}a(Cb,"userHandler");Cb.addListener=function(e){wb.push(e)};Lb.exports=fY});var ds=T((jie,Ub)=>{"use strict";var Qie=G(),nm=$(),mY=b(),{ITC_ERRORS:nc}=dr(),{parentPort:zie,threadId:pY,isMainThread:SY,workerData:Jie}=require("worker_threads"),{onMessageFromWorkers:TY,broadcast:Xie,broadcastWithAcknowledgement:RY}=Ze();Ub.exports={sendItcEvent:gY,validateEvent:Db,SchemaEventMsg:AY,UserEventMsg:OY};var t_;TY(async(e,t)=>{t_=t_||sc(),Db(e),t_[e.type]&&await t_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function gY(e){return!SY&&e.message&&(e.message.originator=pY),RY(e)}a(gY,"sendItcEvent");function Db(e){if(typeof e!="object")return nc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||nm.isEmpty(e.type))return nc.MISSING_TYPE;if(!e.hasOwnProperty("message")||nm.isEmpty(e.message))return nc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||nm.isEmpty(e.message.originator))return nc.MISSING_ORIGIN;if(mY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return nc.INVALID_EVENT(e.type)}a(Db,"validateEvent");function AY(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(AY,"SchemaEventMsg");function OY(e){this.originator=e}a(OY,"UserEventMsg")});var on=T((toe,Bb)=>{"use strict";var Mb=b(),eoe=$(),r_=G(),Pb=SN(),po,{sendItcEvent:vb}=ds();function NY(e){try{r_.trace("signalSchemaChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.SCHEMA,e);return po.schema(t),vb(t)}catch(t){r_.error(t)}}a(NY,"signalSchemaChange");function bY(e){try{r_.trace("signalUserChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.USER,e);return po.user(t),vb(t)}catch(t){r_.error(t)}}a(bY,"signalUserChange");Bb.exports={signalSchemaChange:NY,signalUserChange:bY}});var s_=T((soe,Fb)=>{"use strict";var Hb=$(),yY=b(),IY=G(),wY=ql(),CY=Fl(),LY=on(),{SchemaEventMsg:DY}=ds(),UY="already exists in";Fb.exports=MY;async function MY(e,t,r){if(Hb.isEmptyOrZeroLength(r))return r;let s=[];Hb.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 PY(e,t.schema,t.name,i)})),n}a(MY,"lmdbCheckForNewAttributes");async function PY(e,t,r,s){let n=new CY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await vY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(UY))IY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(PY,"createNewAttribute");async function vY(e){let t;return t=await wY(e),LY.signalSchemaChange(new DY(process.pid,yY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(vY,"createAttribute")});var So=T((ioe,qb)=>{"use strict";var im=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}};qb.exports=im});var xb=T((aoe,Gb)=>{"use strict";var BY=So(),HY=b().OPERATIONS_ENUM,om=class extends BY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(HY.INSERT,r,s,n,i),this.records=t}};Gb.exports=om});var Vb=T((uoe,kb)=>{"use strict";var FY=So(),qY=b().OPERATIONS_ENUM,am=class extends FY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(qY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};kb.exports=am});var Yb=T((_oe,$b)=>{"use strict";var GY=So(),xY=b().OPERATIONS_ENUM,cm=class extends GY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(xY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$b.exports=cm});var Wb=T((foe,Kb)=>{"use strict";var kY=So(),VY=b().OPERATIONS_ENUM,um=class extends kY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(VY.DELETE,s,n,t,i),this.original_records=r}};Kb.exports=um});var ic=T((moe,Xb)=>{"use strict";var hoe=require("path"),Qb=Ue(),$Y=xb(),YY=Vb(),KY=Yb(),WY=Wb(),To=ze(),zb=$(),{CONFIG_PARAMS:QY}=b(),Jb=X();Jb.initSync();var n_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:zY}=ve();Xb.exports=JY;async function JY(e,t){if(Jb.get(QY.LOGGING_AUDITLOG)===!1)return;let r=zY(e.schema,e.table),s=await Qb.openEnvironment(r,e.table,!0),n=XY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Qb.initializeDBIs(s,To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,To.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),zb.isEmpty(n.user_name)||s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(JY,"writeTransaction");function XY(e,t){let r=zb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===n_.INSERT)return new $Y(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPDATE)return new YY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPSERT)return new KY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.DELETE)return new WY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(XY,"createTransactionObject")});var lm=T((Toe,jb)=>{"use strict";var jY=Qa(),Soe=za(),oc=b(),ZY=Za(),e1=uo().insertRecords,t1=Ue(),r1=G(),s1=s_(),{getSchemaPath:n1}=ve(),i1=ic();jb.exports=o1;async function o1(e){try{let{schema_table:t,attributes:r}=jY(e);ZY(e,r,t.hash_attribute),e.schema!==oc.SYSTEM_SCHEMA_NAME&&(r.includes(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await s1(e.hdb_auth_header,t,r),n=n1(e.schema,e.table),i=await t1.openEnvironment(n,e.table),o=await e1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await i1(e,o)}catch(c){r1.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(o1,"lmdbCreateRecords")});var ty=T((goe,ey)=>{"use strict";var Zb=b(),a1=lm(),c1=za(),u1=require("fs-extra"),{getSchemaPath:l1}=ve();ey.exports=_1;async function _1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new c1(Zb.SYSTEM_SCHEMA_NAME,Zb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await a1(r),await u1.mkdirp(l1(e.schema))}a(_1,"lmdbCreateSchema")});var sy=T((Ooe,ry)=>{"use strict";var _m=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}};ry.exports=_m});var ay=T((woe,oy)=>{"use strict";var ny=Ue(),dm=mr(),fm=dr().LMDB_ERRORS_ENUM,d1=ze(),iy=G(),boe=$(),f1=require("lmdb"),E1=sy(),h1=b(),{OVERFLOW_MARKER:yoe,MAX_SEARCH_KEY_LENGTH:Ioe}=d1,m1=h1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p1(e,t,r,s){if(dm.validateEnv(e),t===void 0)throw new Error(fm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fm.IDS_REQUIRED):new Error(fm.IDS_MUST_BE_ITERABLE);try{let n=ny.listDBIs(e);ny.initializeDBIs(e,t,n);let i=new E1,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[m1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,f1.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=dm.getIndexedValues(N);if(Y)for(let Q=0,q=Y.length;Q<q;Q++)I.remove(Y[Q],o)}catch{iy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){iy.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=dm.getNextMonotonicTime(),i}catch(n){throw n}}a(p1,"deleteRecords");oy.exports={deleteRecords:p1}});var ac=T((Loe,uy)=>{"use strict";var Ro=$(),S1=ay(),T1=Ue(),{getSchemaPath:R1}=ve(),g1=ic(),A1=G();uy.exports=O1;async function O1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ro.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ro.isEmptyOrZeroLength(e.hash_values)&&!Ro.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ro.isEmpty(u)||e.hash_values.push(u)}}if(Ro.isEmptyOrZeroLength(e.hash_values))return cy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ro.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=R1(e.schema,e.table),i=await T1.openEnvironment(n,e.table),o=await S1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await g1(e,o)}catch(c){A1.error(`unable to write transaction due to ${c.message}`)}return cy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(O1,"lmdbDeleteRecords");function cy(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(cy,"createDeleteResponse")});var hm=T((Moe,ly)=>{"use strict";var N1=b(),Uoe=mr();function Em(e,t){let r=Object.create(null);if(t.length===1&&N1.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(Em,"parseRow");function b1(e,t,r,s){let n=Em(r,e);s.push(n)}a(b1,"searchAll");function y1(e,t,r,s){let n=Em(r,e);s[t]=n}a(y1,"searchAllToMap");function I1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(I1,"iterateDBI");function Ni(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(Ni,"pushResults");function w1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(w1,"endsWith");function C1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(C1,"contains");function L1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(L1,"greaterThanCompare");function D1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(D1,"greaterThanEqualCompare");function U1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(U1,"lessThanCompare");function M1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(M1,"lessThanEqualCompare");ly.exports={parseRow:Em,searchAll:b1,searchAllToMap:y1,iterateDBI:I1,endsWith:w1,contains:C1,greaterThanCompare:L1,greaterThanEqualCompare:D1,lessThanCompare:U1,lessThanEqualCompare:M1,pushResults:Ni}});var go=T((Foe,py)=>{"use strict";var Fn=Ue(),voe=G(),Ar=mr(),i_=ze(),Je=dr().LMDB_ERRORS_ENUM,Boe=$(),P1=b(),o_=hm(),{parseRow:v1}=o_,Hoe=require("lmdb"),{OVERFLOW_MARKER:_y,MAX_SEARCH_KEY_LENGTH:B1}=i_;function dy(e,t,r,s=!1,n=void 0,i=void 0){return bi(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(dy,"iterateFullIndex");function cc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(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(cc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[i_.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(bi,"setupTransaction");function fy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(_y)){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[i_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(fy,"getOverflowCheck");function H1(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 bi(e,t,t,(o,c,u)=>(a_(r),r=uc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>v1(_.value,r))))}a(H1,"searchAll");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);a_(r),r=uc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of dy(e,t,t,s,n,i))o.set(c,o_.parseRow(u,r));return o}a(F1,"searchAllToMap");function q1(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=dy(e,void 0,t,r,s,n),c=o.transaction,u=fy(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(q1,"iterateDBI");function G1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(G1,"countAll");function x1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(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(x1,"equals");function k1(e,t,r){return qn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(k1,"count");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(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(V1,"startsWith");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){return Ey(e,t,r,s,n,i,o,!0)}a($1,"endsWith");function Ey(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=fy(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(_y)?_.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))?_[i_.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(Ey,"contains");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!0,!1)}a(Y1,"greaterThan");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!1,!1)}a(K1,"greaterThanEqual");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!0)}a(W1,"lessThan");function Q1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!1)}a(Q1,"lessThanEqual");function z1(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 cc(e,t,r,s,n,i,o,c)}a(z1,"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(a_(r),r=uc(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=o_.parseRow(c,r)),o}a(J1,"searchByHash");function X1(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(X1,"checkHashExists");function j1(e,t,r,s,n=[]){return my(e,t,r,s,n),hy(e,t,r,s,n).map(i=>i[1])}a(j1,"batchSearchByHash");function Z1(e,t,r,s,n=[]){my(e,t,r,s,n);let i=new Map;for(let[o,c]of hy(e,t,r,s,n))i.set(o,c);return i}a(Z1,"batchSearchByHashToMap");function hy(e,t,r,s,n=[]){return bi(e,t,t,(i,o,c)=>{r=uc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,o_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(hy,"batchHashSearch");function my(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(a_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(my,"initializeBatchSearchByHash");function a_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(a_,"validateFetchAttributes");function qn(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>B1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function uc(e,t){return t.length===1&&P1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(uc,"setGetWholeRowAttributes");py.exports={searchAll:H1,searchAllToMap:F1,count:k1,countAll:G1,equals:x1,startsWith:V1,endsWith:$1,contains:Ey,searchByHash:J1,setGetWholeRowAttributes:uc,batchSearchByHash:j1,batchSearchByHashToMap:Z1,checkHashExists:X1,iterateDBI:q1,greaterThan:Y1,greaterThanEqual:K1,lessThan:W1,lessThanEqual:Q1,between:z1}});var Ao=T((Goe,Ay)=>{var Sy=require("lodash"),Ty=qe(),Be=require("joi"),eK=$(),{hdb_schema_table:c_,checkValidTable:Ry,hdb_table:gy,hdb_database:u_}=Ds(),{handleHDBError:tK,hdb_errors:rK}=j(),{getDatabases:sK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:nK}=rK,iK=Be.object({database:u_,schema:u_,table:gy,search_attribute:c_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(c_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),oK=Be.object({database:u_,schema:u_,table:gy,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(c_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:c_,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()});Ay.exports=function(e,t){let r=null;switch(t){case"value":r=Ty.validateBySchema(e,iK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ry("database",e.schema)),i(Ry("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=Ty.validateBySchema(e,oK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=eK.checkGlobalSchemaTable(e.schema,e.table);if(n)return tK(new Error,n,nK.NOT_FOUND);let o=sK()[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=Sy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Sy.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 mm=T((koe,Oy)=>{"use strict";var aK=Ue(),cK=Ao(),{getSchemaPath:uK}=ve();Oy.exports=lK;function lK(e){let t=cK(e,"hashes");if(t)throw t;let r=uK(e.schema,e.table);return aK.openEnvironment(r,e.table)}a(lK,"initialize")});var pm=T(($oe,Ny)=>{"use strict";var _K=go(),dK=mm();Ny.exports=fK;async function fK(e){let t=await dK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return _K.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(fK,"lmdbGetDataByHash")});var Oo=T((Koe,by)=>{"use strict";var Sm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};by.exports=Sm});var Iy=T((zoe,yy)=>{"use strict";var Qoe=Oo(),EK=go(),hK=mm();yy.exports=mK;async function mK(e){let t=await hK(e),r=global.hdb_schema[e.schema][e.table];return EK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(mK,"lmdbSearchByHash")});var vs=T((Xoe,wy)=>{"use strict";var Tm=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}};wy.exports=Tm});var l_=T((Zoe,Py)=>{"use strict";var Ft=go(),pK=Ue(),SK=$(),oe=ze(),yi=b(),TK=hi(),Cy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:RK}=ve(),an=yi.SEARCH_WILDCARDS;async function gK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=TK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=My(e,s.hash_attribute,r,t);return Dy(e,n,s.hash_attribute,r)}a(gK,"prepSearch");async function Dy(e,t,r,s){let n=RK(e.schema,e.table),i=await pK.openEnvironment(n,e.table),o=Uy(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(AK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Ly(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Ly(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(Dy,"executeSearch");function Uy(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 oe.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.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(Uy,"searchByType");function Ly(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Ly,"createMapFromIterable");function AK(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(AK,"checkToFetchMore");function My(e,t,r,s){if(SK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),an.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Cy.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Cy.UNKNOWN_SEARCH_TYPE)}}a(My,"createSearchTypeFromSearchObject");Py.exports={executeSearch:Dy,createSearchTypeFromSearchObject:My,prepSearch:gK,searchByType:Uy}});var By=T((rae,vy)=>{"use strict";var tae=vs(),OK=Ao(),NK=$(),bK=b(),yK=l_();vy.exports=IK;function IK(e,t){if(!NK.isEmpty(t)&&bK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OK(e,"value");if(s)throw s;let n=!0;return yK.prepSearch(e,t,n)}a(IK,"lmdbGetDataByValue")});var lc=T((iae,Hy)=>{"use strict";var nae=vs(),wK=Ao(),CK=$(),LK=b(),DK=l_();Hy.exports=UK;async function UK(e,t){if(!CK.isEmpty(t)&&LK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=wK(e,"value");if(s)throw s;return DK.prepSearch(e,t,!1)}a(UK,"lmdbSearchByValue")});var qy=T((cae,Fy)=>{"use strict";var aae=ze(),Rm=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}},gm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Am=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Rm,SearchCondition:gm,SortAttribute:Am}});var $y=T((dae,Vy)=>{"use strict";var lae=qy().SearchByConditionsObject,MK=vs(),PK=Ao(),Om=go(),__=ze(),{Resource:_ae}=(as(),Z(CE)),ky=l_(),vK=hm(),BK=require("lodash"),{getSchemaPath:HK}=ve(),Gy=Ue(),{handleHDBError:FK,hdb_errors:qK}=j(),{HTTP_STATUS_CODES:GK}=qK,xK=1e8;Vy.exports=kK;async function kK(e){let t=PK(e,"conditions");if(t)throw FK(t,t.message,GK.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=HK(e.schema,e.table),s=await Gy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Gy.openDBI(s,_.search_attribute);let i=BK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===__.SEARCH_TYPES.EQUALS?_.estimated_count=Om.count(s,_.search_attribute,_.search_value):l===__.SEARCH_TYPES.CONTAINS||l===__.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=xK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await xy(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(ky.filterByType),d=l.length,f=Om.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=>vK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await xy(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=Om.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(kK,"lmdbSearchByConditions");async function xy(e,t,r,s){let n=new MK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===__.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ky.searchByType(e,n,i,s).map(o=>o.value)}a(xy,"executeConditionSearch")});var _c=T((Eae,Yy)=>{"use strict";var VK=b().OPERATIONS_ENUM,Nm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=VK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Yy.exports=Nm});var bm=T((mae,Zy)=>{"use strict";var zy=vs(),Jy=_c(),Xy=lc(),jy=ac(),zt=b(),Ky=$(),Wy=Ue(),{getTransactionAuditStorePath:$K,getSchemaPath:YK}=ve(),Qy=G();Zy.exports=KK;async function KK(e){try{if(Ky.isEmpty(global.hdb_schema[e.schema])||Ky.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await WK(e),await QK(e);let t=YK(e.schema,e.table);try{await Wy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$K(e.schema,e.table);await Wy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(KK,"lmdbDropTable");async function WK(e){let t=new zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Xy(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 Jy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jy(n)}a(WK,"deleteAttributesFromSystem");async function QK(e){let t=new zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Xy(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 Jy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jy(n)}catch(i){throw i}}a(QK,"dropTableFromSystem")});var tI=T((Sae,eI)=>{"use strict";var zK=require("fs-extra"),JK=vs(),XK=Oo(),jK=_c(),ZK=bm(),eW=ac(),tW=pm(),rW=lc(),cn=b(),{getSchemaPath:sW}=ve(),{handleHDBError:nW,hdb_errors:iW}=j(),{HDB_ERROR_MSGS:oW,HTTP_STATUS_CODES:aW}=iW;eI.exports=cW;async function cW(e){let t;try{t=await uW(e.schema);let r=new JK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await rW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await ZK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new jK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await eW(n);let i=sW(t);await zK.remove(i)}catch(r){throw r}}a(cW,"lmdbDropSchema");async function uW(e){let t=new XK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await tW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw nW(new Error,oW.SCHEMA_NOT_FOUND(e),aW.NOT_FOUND,void 0,void 0,!0);return s}a(uW,"validateDropSchema")});var Im=T((Rae,rI)=>{"use strict";var ym=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};rI.exports=ym});var nI=T((Oae,sI)=>{"use strict";var lW=require("fs-extra"),d_=Ue(),{getTransactionAuditStorePath:_W}=ve(),wm=ze(),Aae=Im();sI.exports=dW;async function dW(e){let t;try{let r=_W(e.schema,e.table);await lW.mkdirp(r),t=await d_.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{d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),d_.createDBI(t,wm.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(dW,"createTransactionsAuditEnvironment")});var cI=T((bae,aI)=>{"use strict";var Cm=b(),iI=Ue(),fW=uo(),{getSystemSchemaPath:EW,getSchemaPath:hW}=ve(),mW=hi(),pW=ql(),Lm=Fl(),SW=G(),TW=nI(),Um=mW.hdb_table,oI=[];for(let e=0;e<Um.attributes.length;e++)oI.push(Um.attributes[e].attribute);aI.exports=RW;async function RW(e,t){let r=hW(t.schema,t.table),s=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iI.createEnvironment(r,t.table),e!==void 0){let o=await iI.openEnvironment(EW(),Cm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await fW.insertRecords(o,Um.hash_attribute,oI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Dm(s),await Dm(n),await Dm(i)}await TW(t)}catch(o){throw o}}a(RW,"lmdbCreateTable");async function Dm(e){try{await pW(e)}catch(t){SW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dm,"createAttribute")});var lI=T((Iae,uI)=>{"use strict";var gW=Qa(),AW=Za(),OW=s_(),dc=b(),NW=uo().updateRecords,bW=Ue(),{getSchemaPath:yW}=ve(),IW=ic(),wW=G();uI.exports=CW;async function CW(e){try{let{schema_table:t,attributes:r}=gW(e);AW(e,r,t.hash_attribute),e.schema!==dc.SYSTEM_SCHEMA_NAME&&(r.includes(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await OW(e.hdb_auth_header,t,r),n=yW(e.schema,e.table),i=await bW.openEnvironment(n,e.table),o=await NW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await IW(e,o)}catch(c){wW.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(CW,"lmdbUpdateRecords")});var dI=T((Cae,_I)=>{"use strict";var LW=b().OPERATIONS_ENUM,Mm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=LW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_I.exports=Mm});var EI=T((Uae,fI)=>{"use strict";var Dae=dI(),DW=Qa(),UW=Za(),MW=s_(),fc=b(),PW=uo().upsertRecords,vW=Ue(),{getSchemaPath:BW}=ve(),HW=ic(),FW=G(),{handleHDBError:qW,hdb_errors:GW}=j();fI.exports=xW;async function xW(e){let t;try{t=DW(e)}catch(u){throw qW(u,u.message,GW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;UW(e,s,r.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(s.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await MW(e.hdb_auth_header,r,s),i=BW(e.schema,e.table),o=await vW.openEnvironment(i,e.table),c=await PW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await HW(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(xW,"lmdbUpsertRecords")});var mI=T((Pae,hI)=>{"use strict";var Pm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};hI.exports=Pm});var SI=T((Bae,pI)=>{"use strict";var vm=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}};pI.exports=vm});var gI=T((qae,RI)=>{"use strict";var Bm=Ue(),{getTransactionAuditStorePath:kW}=ve(),Fae=mI(),Ec=ze(),VW=$(),TI=SI(),$W=require("util").promisify,YW=$W(setTimeout),KW=1e4,WW=100;RI.exports=QW;async function QW(e){let t=kW(e.schema,e.table),r=await Bm.openEnvironment(t,e.table,!0),s=Bm.listDBIs(r);Bm.initializeDBIs(r,Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new TI;do n=await zW(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 YW(WW);while(n.transactions_deleted>0);return i}a(QW,"deleteAuditLogsBefore");async function zW(e,t){let r=new TI;try{let s=e.dbis[Ec.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[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];VW.isEmpty(c)||(n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>KW)break}return await n,r}catch(s){throw s}}a(zW,"deleteTransactions")});var OI=T((xae,AI)=>{"use strict";var Hm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};AI.exports=Hm});var bI=T(($ae,NI)=>{"use strict";var JW=vs(),XW=_c(),Vae=OI(),Bs=b(),jW=$(),Fm=Ue(),ZW=hi(),eQ=lc(),tQ=ac(),{getSchemaPath:rQ}=ve();NI.exports=sQ;async function sQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=ZW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await iQ(e),n=rQ(e.schema,e.table),i=await Fm.openEnvironment(n,e.table);return t===!0&&await nQ(e,i,r.hash_attribute),Fm.dropDBI(i,e.attribute),s}a(sQ,"lmdbDropAttribute");async function nQ(e,t,r){let s=Fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(nQ,"removeAttributeFromAllObjects");async function iQ(e){let t=new JW(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 eQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jW.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 XW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return tQ(i)}a(iQ,"dropAttributeFromSystem")});var DI=T((Wae,LI)=>{"use strict";var qm=Ue(),No=ze(),Kae=mr(),Gm=b(),yI=$(),{getTransactionAuditStorePath:oQ}=ve(),aQ=go(),f_=So(),cQ=G();LI.exports=uQ;async function uQ(e){let t=oQ(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return II(r,e.search_values);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,_Q(r,e.search_values,n);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lQ(r,e.search_values);default:return II(r)}}a(uQ,"readAuditLog");function II(e,t=[0,Date.now()]){yI.isEmpty(t[0])&&(t[0]=0),yI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[No.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 f_,n))}a(II,"searchTransactionsByTimestamp");function lQ(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[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,CI(e,i))}return Object.fromEntries(r)}a(lQ,"searchTransactionsByUsername");function _Q(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=aQ.equals(e,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.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=CI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);wI(u,"records",r,l,o),wI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(_Q,"searchTransactionsByHashValues");function wI(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 f_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new f_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(wI,"loopRecords");function CI(e,t){let r=[];try{let s=e.dbis[No.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 f_,i);r.push(o)}}catch(i){cQ.warn(i)}return r}catch(s){throw s}}a(CI,"batchSearchTransactions")});var MI=T((Xae,UI)=>{"use strict";var{getSchemaPath:zae}=ve(),Jae=Ue(),{database:dQ}=(fe(),Z(Ce));UI.exports={writeTransaction:fQ};async function fQ(e,t,r){return dQ({database:e,table:t}).transaction(r)}a(fQ,"writeTransaction")});var HI=T((Zae,BI)=>{"use strict";var{getSchemaPath:PI}=ve(),vI=Ue();BI.exports={flush:EQ,resetReadTxn:hQ};async function EQ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(EQ,"flush");async function hQ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(hQ,"resetReadTxn")});var xI=T((tce,GI)=>{"use strict";var{Readable:mQ}=require("stream"),{getDatabases:pQ}=(fe(),Z(Ce)),{readSync:SQ,openSync:TQ,createReadStream:FI}=require("fs"),{open:RQ}=require("lmdb"),qI=wl(),gQ=Ll(),{AUDIT_STORE_OPTIONS:AQ}=(io(),Z(AO)),{INTERNAL_DBIS_NAME:OQ,AUDIT_STORE_NAME:NQ}=ze();GI.exports=yQ;var xm=32768,bQ=100;async function yQ(e){let t=e.database||e.schema||"data",r=pQ()[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=RQ({noSync:!0,maxDbs:gQ.MAX_DBS}),f,E=d.openDB(OQ,new qI(!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:q,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(q,K,w),p++%bQ===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,q=new qI(!Q,Q);await S(I,q)}e.include_audit&&await S(NQ,Object.assign({},AQ)),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=TQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(xm);SQ(c,_,0,xm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:xm}),f=new mQ.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(yQ,"getBackup")});var $I=T((sce,VI)=>{"use strict";var IQ=G(),{handleHDBError:wQ}=j(),CQ=cO(),LQ=ql(),DQ=lm(),UQ=ty(),MQ=ac(),PQ=pm(),vQ=Iy(),BQ=By(),HQ=lc(),FQ=$y(),qQ=tI(),GQ=cI(),xQ=lI(),kQ=EI(),VQ=gI(),$Q=bm(),YQ=bI(),KQ=DI(),WQ=MI(),kI=HI(),QQ=xI(),km=class extends CQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return FQ(t)}async getDataByHash(t){return await PQ(t)}async searchByHash(t){return await vQ(t)}async getDataByValue(t,r){return await BQ(t,r)}async searchByValue(t){return await HQ(t)}async createSchema(t){return await UQ(t)}async dropSchema(t){return await qQ(t)}async createTable(t,r){return await GQ(t,r)}async dropTable(t){return await $Q(t)}async createAttribute(t){return await LQ(t)}async createRecords(t){return await DQ(t)}async updateRecords(t){return await xQ(t)}async upsertRecords(t){try{return await kQ(t)}catch(r){throw wQ(r,null,null,IQ.ERR,r)}}async deleteRecords(t){return await MQ(t)}async dropAttribute(t){return await YQ(t)}async deleteAuditLogsBefore(t){return await VQ(t)}async readAuditLog(t){return await KQ(t)}writeTransaction(t,r,s){return WQ.writeTransaction(t,r,s)}flush(t,r){return kI.flush(t,r)}resetReadTxn(t,r){return kI.resetReadTxn(t,r)}getBackup(t){return QQ(t)}};VI.exports=km});var ZI={};Qe(ZI,{ResourceBridge:()=>Ym});function Km({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 KI(e,t){let r=Hs(e),s=Km(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&&dl(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||JQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,zQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WI(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*QI(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 zI,E_,Es,JI,XI,ms,Vm,$m,jI,zQ,JQ,XQ,jQ,YI,Ym,ew=Te(()=>{"use strict";zI=D($I()),E_=D(Ao()),Es=D(j());fe();JI=D(Qa()),XI=D(Za()),ms=D(b()),Vm=D(on()),$m=D(ds()),jI=D($());di();fl();({HDB_ERROR_MSGS:zQ}=Es.hdb_errors),JQ="data",XQ=1e4,jQ=10,Ym=class extends zI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YI=this}async searchByConditions(t){let r=(0,E_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(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:Km(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 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 hc({database:t.schema,table:null}),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Wm(t.schema),Vm.signalSchemaChange(new $m.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,YI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,JI.default)(t);(0,XI.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=dl(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 WI(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,jI.async_set_timeout)(jQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%XQ===0&&await _();return u.length>0&&await _(),n?WI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,E_.default)(t,"hashes");if(r)throw r;return KI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of KI(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,E_.default)(t,"value");if(s)throw s;let n=Hs(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:Km(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 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 QI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return QI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Km,"getSelect");a(KI,"getRecords");a(Hs,"getTable");a(WI,"createDeleteResponse");a(QI,"groupRecordsInHistory")});var _s=T((uce,tw)=>{"use strict";var{ResourceBridge:ZQ}=(ew(),Z(ZI)),ez=X();ez.initSync();var h_;function tz(){return h_||(h_=new ZQ,h_)}a(tz,"getBridge");tw.exports=tz()});var iw=T((_ce,nw)=>{"use strict";var rw=require("lodash"),mc=require("mathjs"),rz=require("jsonata"),sw=$();nw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?rw.uniqWith(e,rw.isEqual):e,searchJSON:sz,mad:pc.bind(null,mc.mad),mean:pc.bind(null,mc.mean),mode:pc.bind(null,mc.mode),prod:pc.bind(null,mc.prod),median:pc.bind(null,mc.median)};function pc(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(pc,"aggregateFunction");function sz(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(sw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sw.isEmpty(this.__ala__.res[r])){let s=rz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(sz,"searchJSON")});var aw=T((fce,ow)=>{"use strict";var rt=require("moment"),Qm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;ow.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(Qm),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(Qm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Qm)}});var _w=T((Ece,lw)=>{"use strict";var nz=require("@turf/area"),iz=require("@turf/length"),oz=require("@turf/circle"),az=require("@turf/difference"),cz=require("@turf/distance"),uz=require("@turf/boolean-contains"),lz=require("@turf/boolean-equal"),_z=require("@turf/boolean-disjoint"),dz=require("@turf/helpers"),cw=b(),de=$();lw.exports={geoArea:fz,geoLength:Ez,geoCircle:hz,geoDifference:mz,geoDistance:uw,geoNear:pz,geoContains:Sz,geoEqual:Tz,geoCrosses:Rz,geoConvert:gz};var zm="geo1 is required",Jm="geo2 is required";function fz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),nz.default(e)}a(fz,"geoArea");function Ez(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),iz.default(e,{units:t||"kilometers"})}a(Ez,"geoLength");function hz(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)),oz.default(e,t,{units:r||"kilometers"})}a(hz,"geoCircle");function mz(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)),az(e,t)}a(mz,"geoDifference");function uw(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)),cz.default(e,t,{units:r||"kilometers"})}a(uw,"geoDistance");function pz(e,t,r,s){if(de.isEmpty(e)||de.isEmpty(t))return!1;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 uw(e,t,s)<=r}a(pz,"geoNear");function Sz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz.default(e,t)}a(Sz,"geoContains");function Tz(e,t){if(de.isEmpty(e))throw new Error(zm);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,"geoEqual");function Rz(e,t){if(de.isEmpty(e))throw new Error(zm);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,"geoCrosses");function gz(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(cw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(cw.GEO_CONVERSION_ENUM).join(",")}`);return dz[t](e,r)}a(gz,"geoConvert")});var m_=T((mce,dw)=>{var Ii=iw(),Or=aw(),Fs=_w();dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.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 mw=T((pce,hw)=>{"use strict";var Sc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var Az=m_(),fw=require("clone"),p_=require("recursive-iterator"),re=G(),ue=$(),bo=_s(),Oz=b(),{hdb_errors:Nz}=j(),{getDatabases:Ew}=(fe(),Z(Ce)),bz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Az(Jt);var Xm=class{static{a(this,"SQLSearch")}constructor(t,r){if(ue.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(),ue.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ue.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 p_(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(fw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sc.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=Ew()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ue.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new p_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ue.isEmpty(r)&&r.right)if(ue.isNotEmptyAndHasValue(r.right.value)){let s=ue.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new Jt.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ue.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Jt.yy.LogicValue({value:i}):s instanceof Jt.yy.StringValue&&ue.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Jt.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 p_(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(!ue.isEmpty(Oz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ue.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ue.isEmptyOrZeroLength(r.left.columnid)||ue.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(ue.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"=":!ue.isEmpty(r.right.value)||!ue.isEmpty(r.left.value)?s.add(ue.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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from)&&ue.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&&Sc.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(ue.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ue.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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&!ue.isEmptyOrZeroLength(this.columns.columns))return t;if(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Jt.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(fw(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(ue.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(bz)>-1&&this.tables.forEach(n=>{let i={columnid:Ew()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sc.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),!ue.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ue.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await bo.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 bo.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,ue.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(!ue.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ue.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 bo.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,ue.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,ue.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 bo.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,ue.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,ue.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 Jt.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 Jt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Jt.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 Jt.yy.FuncValue:new Jt.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 Jt.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=Sc.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 p_(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=Sc.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 bo.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 Jt.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(Nz.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 bo.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)}};hw.exports=Xm});var qr=T((Tce,pw)=>{"use strict";var yz=oO();pw.exports={searchByConditions:wz,searchByHash:Cz,searchByValue:Lz,search:Dz};var jm=_s(),{transformReq:Zm}=$(),Iz=mw();async function wz(e){return Zm(e),jm.searchByConditions(e)}a(wz,"searchByConditions");async function Cz(e){Zm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jm.searchByHash(e))r&&t.push(r);return t}a(Cz,"searchByHash");async function Lz(e){Zm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jm.searchByValue(e))t.push(r);return t}a(Lz,"searchByValue");function Dz(e,t){try{let r=new yz(e);r.validate(),new Iz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Dz,"search")});var S_=T((gce,Sw)=>{"use strict";var Uz=_s();Sw.exports={writeTransaction:Mz};function Mz(e,t,r){return Uz.writeTransaction(e,t,r)}a(Mz,"writeTransaction")});var Aw=T((Nce,gw)=>{"use strict";var Pz=qr(),vz=Pn(),Tw=G(),Bz=Gr(),Oce=S_(),Hz=require("clone"),tp=require("alasql"),Fz=m_(),Rw=require("util"),qz=Rw.promisify(vz.getTableSchema),Gz=Rw.promisify(Pz.search),xz=b(),ep=$();Fz(tp);gw.exports={update:Vz};var kz="There was a problem performing this update. Please check the logs and try again.";async function Vz({statement:e,hdb_user:t}){let r=await qz(e.table.databaseid,e.table.tableid),s=$z(e.columns);ep.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Hz(n),c=ep.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=tp.parse(u).statements[0],l=await Gz(_),d=Yz(s,l);return Kz(o,d,t)}a(Vz,"update");function $z(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tp.compile(`SELECT ${r.expression.toString()} AS [${xz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Tw.error(t),new Error(kz)}}a($z,"createUpdateRecord");function Yz(e,t){return ep.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Yz,"buildUpdateRecords");async function Kz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Bz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Tw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Kz,"updateRecords")});var Nw=T((wce,Ow)=>{var Wz=require("alasql"),Qz=qr(),zz=G(),Jz=_s(),sp=require("util"),rp=$(),Xz=b(),jz=Pn(),yce=S_(),Ice=Gr(),Zz="record",eJ="successfully deleted",tJ=sp.callbackify(iJ),rJ=sp.promisify(Qz.search),sJ=sp.promisify(jz.getTableSchema);Ow.exports={convertDelete:tJ};function nJ(e){return`${e.deleted_hashes.length} ${Zz}${e.deleted_hashes.length===1?"":"s"} ${eJ}`}a(nJ,"generateReturnMessage");async function iJ({statement:e,hdb_user:t}){let r=await sJ(e.table.databaseid,e.table.tableid);rp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=rp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Wz.parse(o).statements[0],u={operation:Xz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await rJ(c);let _=await Jz.deleteRecords(u);return rp.isEmptyOrZeroLength(_.message)&&(_.message=nJ(_)),delete _.txn_time,_}catch(_){throw zz.error(_),_.hdb_code?_.message:_}}a(iJ,"convertDelete")});var Cw=T((Lce,ww)=>{"use strict";var oJ=pi(),{hdb_errors:bw}=j(),{getDatabases:yw}=(fe(),Z(Ce));ww.exports={checkSchemaExists:Iw,checkSchemaTableExists:aJ,schema_describe:oJ};async function Iw(e){if(!yw()[e])return bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Iw,"checkSchemaExists");async function aJ(e,t){let r=await Iw(e);if(r)return r;if(!yw()[e][t])return bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(aJ,"checkSchemaTableExists")});var Tc=T((Uce,cJ)=>{cJ.exports={name:"harperdb",version:"4.2.5",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.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.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 A_={};Qe(A_,{addAnalyticsListener:()=>Ac,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>uJ});function uJ(e){qw=e}function Nr(e,t,r,s,n){if(!qw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=g_.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},g_.set(i,o)}T_||lJ()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Ac(e){kw.push(e)}function lJ(){T_=performance.now(),setTimeout(async()=>{let e=performance.now()-T_;T_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of g_){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 Vw){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 $w()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of kw)n(t);g_=new Map,wi.parentPort?wi.parentPort.postMessage({type:xw,report:r}):Ww({report:r})},Gw).unref()}async function _J(e,t=6e4){let r=op(),s=Yw(),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:q,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=q+(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 Mt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*Mt+At*w)/(Mt+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 Mt=c.get(be);Mt?Mt.push(...B):c.set(be,B)}}await $w()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:q,...w}=h;q=q.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of q){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=q.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 Vw){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[q,w,K,B,x,te,be,se,Mt]=I;Object.assign(S,{p1:q,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Mt})}let l;for(let[h,p]of o)p.id=(0,R_.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,R_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Lw,active:E-Dw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Lw=f,Dw=E}async function Uw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function op(){return Mw||(Mw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Yw(){return Pw||(Pw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function EJ(){Kw=!0;let e=(0,gc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _J(Gw,e),await Uw(op(),dJ),await Uw(Yw(),fJ)},Math.min(e/2,2147483647)).unref()}function Ww(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(vw+=s.mean*s.count);r.totalBytesProcessed=vw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Bw.get(t))}),Bw.set(t,t.performance.eventLoopUtilization())),r.id=(0,R_.getNextMonotonicTime)(),op().primaryStore.put(r.id,r),Kw||EJ(),hJ&&(Qw=pJ(r))}async function pJ(e){if(await Qw,!Gn){let r=(0,Rc.dirname)((0,Fw.getLogFilePath)());try{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>mJ){let r=Buffer.alloc(t);await Gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gn.write(r,{position:0}),await Gn.truncate(r.length),t=r.length}await Gn.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var
|
|
6
|
+
`)},sq="certificate.pem",nq="privateKey.pem",iq="ca.pem";Yg.exports={CERTIFICATE_VALUES:rq,CERTIFICATE_PEM_NAME:sq,PRIVATEKEY_PEM_NAME:nq,CA_PEM_NAME:iq}});var Ge=T((hse,Wg)=>{"use strict";var Yt=require("validate.js");Yt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Yt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Yt.validators.type.checks={Object:function(e){return Yt.isObject(e)&&!Yt.isArray(e)},Array:Yt.isArray,Integer:Yt.isInteger,Number:Yt.isNumber,String:Yt.isString,Date:Yt.isDate,Boolean:function(e){return typeof e=="boolean"}};Yt.validators.hasValidFileExt=function(e,t){return Yt.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};Wg.exports={validateObject:oq,validateObjectAsync:aq,validateBySchema:cq};function oq(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Yt(e,t,{format:"flat"});return r?new Error(r):null}a(oq,"validateObject");async function aq(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Yt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(aq,"validateObjectAsync");function cq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(cq,"validateBySchema")});var hE=T((Sse,jg)=>{"use strict";var Xg=require("fs-extra"),ce=require("joi"),uq=require("os"),{boolean:Ie,string:Is,number:Ot,array:EE}=ce.types(),{totalmem:Qg}=require("os"),eo=require("path"),lq=q(),Zu=$(),pse=Kg(),zg=b(),_q=Ge(),Jg="log",dq="components",fq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Eq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",pq="rootPath config parameter is undefined",Sq="clustering.enabled config parameter is undefined",ci=Ot.min(0).required(),el=EE.items({host:Is.required(),port:ci}).empty(null),Zs;jg.exports={configValidator:Tq,routesValidator:bq,route_constraints:el};function Tq(e){if(Zs=e.rootPath,Zu.isEmpty(Zs))throw pq;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(Nq),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(ju),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(ju),c=ce.custom(gq).empty(null).default(ju),u=e.clustering?.enabled;if(Zu.isEmpty(u))throw Sq;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ci,routes:el}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ci}).required()}).required(),network:ce.object({port:ci}).required()}).required(),leafServer:ce.object({network:ce.object({port:ci,routes:el}).required(),streams:ce.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:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Is.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ce.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Is.custom(Oq).optional().empty(null),maxSize:Is.custom(Aq).optional().empty(null),path:Is.optional().empty(null).default(ju)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:EE.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:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ci,securePort:ci}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:EE.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:ce.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:ce.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Tq,"configValidator");function Rq(e){return Xg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Rq,"doesPathExist");function gq(e,t){ce.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Rq(e);if(r)return t.message(r)}a(gq,"validatePath");function Aq(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(fq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(hq):e}a(Aq,"validateRotationMaxSize");function Oq(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Eq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(mq):e}a(Oq,"validateRotationInterval");function Nq(e,t){let r=t.state.path.join("."),s=uq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Qg();return i=Math.round(Math.min(i,Qg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),lq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(Nq,"setDefaultThreads");function ju(e,t){if(!Zu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Zu.isEmpty(Zs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(Zs,dq);case"logging.root":return eo.join(Zs,Jg);case"clustering.leafServer.streams.path":return eo.join(Zs,"clustering","leaf");case"storage.path":let s=eo.join(Zs,zg.LEGACY_DATABASES_DIR_NAME);return Xg.existsSync(s)?s:eo.join(Zs,zg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(Zs,Jg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(ju,"setDefaultRoot");function bq(e){let t=ce.object({routes:el});return _q.validateBySchema({routes:e},t)}a(bq,"routesValidator")});var to={};Qe(to,{server:()=>ut});var Zg,ut,Mr=Te(()=>{Zg=require("../../index"),ut={};(0,Zg._assignPackageExport)("server",ut)});var hr=T((gse,cA)=>{"use strict";var Er=b(),pt=$(),lt=q(),{configValidator:yq,routesValidator:eA}=hE(),Kt=require("fs-extra"),Iq=require("yaml"),rs=require("path"),wq=require("is-number"),rA=require("properties-reader"),Cq=require("lodash"),{handleHDBError:Lq}=j(),{HTTP_STATUS_CODES:Dq,HDB_ERROR_MSGS:tl}=dr(),Rse=require("minimist"),{server:Uq}=(Mr(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,Mq="Unable to get config value because config is uninitialized",Pq="Config successfully initialized",vq="Error backing up config file",Bq="Empty parameter sent to getConfigValue",sA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),Hq="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tA={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"},rl,_t,sl;cA.exports={createConfigFile:Fq,getDefaultConfig:Gq,getConfigValue:iA,initConfig:pE,flattenConfig:ro,updateConfigValue:oA,updateConfigObject:xq,getConfiguration:$q,setConfiguration:Yq,readConfigFile:TE,getClusteringRoutes:Kq,initOldConfig:aA,getConfigFromFile:Wq,getConfigFilePath:ui,addConfig:Qq,deleteConfigFromFile:zq,getConfigObj:Jq};function Fq(e){let t=Dn(sA);rl=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("_"),_=mE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&nA(t,r),SE(t);let s=t.toJSON();_t=ro(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Kt.createFileSync(i),Kt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(Fq,"createConfigFile");function nA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!pt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(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(nA,"setSchemasConfig");function Gq(e){if(rl===void 0){let r=Dn(sA);rl=ro(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return rl[t.toLowerCase()]}a(Gq,"getDefaultConfig");function iA(e){if(e==null){lt.error(Bq);return}if(_t===void 0){lt.trace(Mq);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(iA,"getConfigValue");function ui(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):rA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ui,"getConfigFilePath");function pE(e=!1){if(_t===void 0||e){let t;if(!pt.noBootFile()){t=pt.getPropsFilePath();try{Kt.accessSync(t,Kt.constants.F_OK|Kt.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{aA(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Dn(r)}catch(i){if(i.code===Er.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
|
|
7
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}qq(s,r),SE(s);let n=s.toJSON();if(Uq.config=n,_t=ro(n),_t.logging_rotation_rotate)for(let i in tA)_t[i]&<.error(`Config ${tA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(Pq)}}a(pE,"initConfig");function qq(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"),Kt.writeFileSync(t,String(e)))}a(qq,"checkForUpdatedConfig");function SE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=yq(t);if(r.error)throw tl.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(SE,"validateConfig");function xq(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(xq,"updateConfigObject");function oA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&pE();let o=iA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Dn(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=mE(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=mE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&nA(u,_),SE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&kq(c,l),Kt.writeFileSync(d,String(u)),n&&(_t=ro(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(oA,"updateConfigValue");function kq(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Kt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(vq),lt.error(r)}}a(kq,"backupConfigFile");var Vq=["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)),sl=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])&&!Vq.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 mE(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(wq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||pt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return pt.autoCast(t)}a(mE,"castConfigValue");function $q(){let e=pt.getPropsFilePath(),t=ui(e);return Dn(t).toJSON()}a($q,"getConfiguration");async function Yq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return oA(void 0,void 0,n,!0),Hq}catch(i){throw typeof i=="string"||i instanceof String?Lq(i,i,Dq.BAD_REQUEST,void 0,void 0,!0):i}}a(Yq,"setConfiguration");function TE(){let e=pt.getPropsFilePath();try{Kt.accessSync(e,Kt.constants.F_OK|Kt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ui(e);return Dn(t).toJSON()}a(TE,"readConfigFile");function Dn(e){return Iq.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Dn,"parseYamlDoc");function Kq(){let e=TE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=eA(t);if(r)throw tl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=eA(s);if(n)throw tl.CONFIG_VALIDATION(n.message);if(!pt.isEmptyOrZeroLength(s)&&!pt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!pt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw tl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Kq,"getClusteringRoutes");function aA(e){let t=rA(e);_t={};for(let r in ss){let s=t.get(r.toUpperCase());if(pt.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(aA,"initOldConfig");function Wq(e){let t=TE();return Cq.get(t,e.replaceAll("_","."))}a(Wq,"getConfigFromFile");async function Qq(e,t){let r=Dn(ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(ui(),String(r))}a(Qq,"addConfig");function zq(e){let t=ui(pt.getPropsFilePath()),r=Dn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Kt.writeFileSync(n,String(r))}a(zq,"deleteConfigFromFile");function Jq(){return sl||(pE(),sl)}a(Jq,"getConfigObj")});var X=T((Ose,_A)=>{"use strict";var RE=require("fs-extra"),ns=require("path"),uA=require("os"),Xq=require("properties-reader"),wa=q(),li=$(),ee=b(),nl=hr(),jq="Error initializing environment manager",il="BOOT_PROPS_FILE_PATH",lA=!1,Zq={[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},en={};_A.exports={BOOT_PROPS_FILE_PATH:il,getHdbBasePath:ex,setHdbBasePath:tx,get:rx,initSync:nx,setProperty:he,initTestEnvironment:ix};function ex(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ex,"getHdbBasePath");function tx(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(tx,"setHdbBasePath");function rx(e){let t=nl.getConfigValue(e);return t===void 0?en[e]:t}a(rx,"get");function he(e,t){Zq[e]&&(en[e]=t),nl.updateConfigObject(e,t)}a(he,"setProperty");function sx(){let e;try{e=li.getPropsFilePath(),RE.accessSync(e,RE.constants.F_OK|RE.constants.R_OK),lA=!0;let t=Xq(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[il]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(sx,"doesPropFileExist");function nx(e=!1){try{(lA||sx()||li.noBootFile())&&(nl.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nl.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wa.error(jq),wa.error(t),console.error(t),process.exit(1)}}a(nx,"initSync");function ix(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");en[il]=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,uA.userInfo()?uA.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 ${il}. Please check your boot props and settings files`;wa.fatal(r),wa.error(t)}}a(ix,"initTestEnvironment")});var ve=T((bse,SA)=>{"use strict";var Ma=b(),ox=$(),Wt=X(),Pa=require("path"),ax=require("minimist"),dA=require("fs-extra"),fA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Un,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:ol}=Ma,La,Da,Ua;function EA(){if(La!==void 0)return La;if(Wt.getHdbBasePath()!==void 0)return La=Wt.get(Un.STORAGE_PATH)||Pa.join(Wt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(EA,"getBaseSchemaPath");function hA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=pA(ol),Da}a(hA,"getSystemSchemaPath");function mA(){if(Ua!==void 0)return Ua;if(Wt.getHdbBasePath()!==void 0)return Ua=Wt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Wt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(mA,"getTransactionAuditStoreBasePath");function cx(e,t){let r=Wt.get(Un.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(mA(),e.toString())}a(cx,"getTransactionAuditStorePath");function pA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(EA(),e)}a(pA,"getSchemaPath");function ux(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ax(process.argv));let s=r[Un.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ox.isObject(s))throw o;i=s}for(let o of i){let c=o[ol];if(!c)continue;let u=Wt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return fA.set(u,[ol,Ca.TABLES,t,Ca.PATH],_),Wt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return fA.set(u,[ol,Ca.PATH],l),Wt.setProperty(Un.DATABASES,u),l}}let n=r[Un.STORAGE_PATH.toUpperCase()];if(n){if(!dA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return dA.mkdirsSync(i),Wt.setProperty(Un.STORAGE_PATH,n),i}return hA()}a(ux,"initSystemSchemaPaths");function lx(){La=void 0,Da=void 0,Ua=void 0}a(lx,"resetPaths");SA.exports={getBaseSchemaPath:EA,getSystemSchemaPath:hA,getTransactionAuditStorePath:cx,getTransactionAuditStoreBasePath:mA,getSchemaPath:pA,initSystemSchemaPaths:ux,resetPaths:lx}});var mr=T((Cse,OA)=>{"use strict";var _x=dr().LMDB_ERRORS_ENUM,Ise=require("lmdb"),dx=ze(),wse=require("buffer").Buffer,{OVERFLOW_MARKER:TA,MAX_SEARCH_KEY_LENGTH:al}=dx,RA=["number","string","symbol","boolean","bigint"];function fx(e){if(e=e?.primaryStore||e,!e)throw new Error(_x.ENV_REQUIRED)}a(fx,"validateEnv");function Ex(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(Ex,"stringifyData");function hx(e){return e instanceof Date?e.valueOf():e}a(hx,"convertKeyValueToWrite");function mx(e){if(e==null)return;if(RA.includes(typeof e))return e.length>al?[e.slice(0,al)+TA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(RA.includes(typeof n))n.length>al?t.push(n.slice(0,al)+TA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(mx,"getIndexedValues");var cl=0,gA=0;function AA(){gA=Date.now()-performance.now()}a(AA,"adjustStartTime");AA();var px=6e4;setInterval(AA,px).unref();function Sx(){let e=performance.now()+gA;return e>cl?(cl=e,e):(cl+=488e-6,cl)}a(Sx,"getNextMonotonicTime");OA.exports={validateEnv:fx,stringifyData:Ex,convertKeyValueToWrite:hx,getNextMonotonicTime:Sx,getIndexedValues:mx}});var NA,is,gE,va=Te(()=>{NA=require("events"),is=class extends NA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new gE;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)}},gE=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[vt]||(e[vt]=Object.create(null))}function dl(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[vt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=bA(d,o);if(f)return l||(l=this[vt]=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[vt];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[vt],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 bA(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}},dl(r,t)),new r(e)):new ul(e);case Array:let s=new _l(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=bA(o,t?.elements)),s[n]=o}return s}}function fl(e){let t=e[vt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=fl(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[vt];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 ll(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(ll(i))return!0}else return!0}}else{let r=e[vt];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(ll(n))return!0}else return!0}else return!0}}return!1}var os,vt,ul,_i,_l,El=Te(()=>{as();os=D(j()),vt=Symbol("own-data");a(Pr,"getChanges");a(dl,"assignTrackedAccessors");a(bA,"trackObject");ul=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};dl(ul,{});a(fl,"collapseData");a(Ba,"deepFreeze");a(ll,"hasChanges");_i=Symbol.for("has-array-changes"),_l=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()}};_l.prototype.constructor=Array});function Ax(){gx=setInterval(function(){for(let e of AE)if(e.stale){let t=e[me]?.url;yA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Rx).unref()}var OE,yA,Tx,AE,di,hl,Rx,gx,NE=Te(()=>{OE=D(mr()),yA=D(q());as();Tx=100,AE=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(),AE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(AE.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,OE.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<Tx>>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=[]}},hl=class extends di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,OE.getNextMonotonicTime)())}getReadTxn(){}},Rx=3e4;a(Ax,"startMonitoringTxns");Ax()});function qe(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 IA,fi=Te(()=>{IA=require("../../index");as();NE();a(qe,"transaction");(0,IA._assignPackageExport)("transaction",qe);qe.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};qe.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 yE(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(LA[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+"\uFFFF";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 St.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=IE(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:CA.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 IE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),LA[t]||t){case St.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case St.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case St.SEARCH_TYPES.ENDS_WITH:case St.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case St.SEARCH_TYPES.STARTS_WITH:case St.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case St.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 St.SEARCH_TYPES.GREATER_THAN:case St.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case St.SEARCH_TYPES.GREATER_THAN_EQUAL:case St.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case St.SEARCH_TYPES.LESS_THAN:case"lt":case St.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case St.SEARCH_TYPES.LESS_THAN_EQUAL:case St.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 ml(e){if(!e)return;let t=new bE,r,s,n,i,o,c=wA;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=Ox[_],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?Nx:wA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,St,Cs,CA,Ox,LA,wA,Nx,bE,pl=Te(()=>{so=D(j()),St=D(ze()),Cs=require("ordered-binary"),CA=require("lmdb"),Ox={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(yE,"idsForCondition");LA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(IE,"filterByType");a(ws,"attributeComparator");wA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Nx=/([^&|*=]+)([&|*=]*)/g;a(ml,"parseQuery");bE=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 LE={};Qe(LE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>BA,snake_case:()=>yx});function yx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function DA(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 CE(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 qe(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[BA]=!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 Sl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Sl(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 vA.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 wE(e){let t=e[Re];if(t){let r=e[vt];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 UA(e){if(typeof e=="string")return t=>wE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=wE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=wE(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 MA,PA,vA,me,we,cs,BA,Re,bx,Nt,Sl,CE,as=Te(()=>{MA=require("crypto");va();PA=require("../../index"),vA=D(j());El();fi();pl();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),BA=Symbol("save-updates"),Re=Symbol("stored-record"),bx={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 _=UA(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,MA.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),qe(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=UA(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 ml(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&&bx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:DA(t,this)}}return DA(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,PA._assignPackageExport)("Resource",Nt);a(yx,"snake_case");Sl=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(DA,"pathToId");CE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(wE,"selectFromObject");a(UA,"transformForSelect")});var UE={};Qe(UE,{loadGQLSchema:()=>Cx,start:()=>DE,startOnMainThread:()=>wx});function DE({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(G){if(G.kind==="NonNullType"){let B=Q(G.type);return B.nullable=!1,B}if(G.kind==="ListType")return{type:"array",elements:Q(G.type)};let K={type:G.name?.value};return Object.defineProperty(K,"location",{value:G.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 G of S.directives){if(G.name.value==="table"){for(let w of G.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(G.name.value==="sealed"&&(N.sealed=!0),G.name.value==="export"){N.export=!0;for(let w of G.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let G of S.fields){let w=Q(G.type);w.name=G.name.value,I.push(w);for(let K of G.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):Ix.includes(S.type)||(0,HA.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,Tl.dirname)(s),S.tableClass):i.set((0,Tl.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,Tl.dirname)(s)+"/"+S.name,A.tableClass)}}}var Tl,HA,Ix,wx,Cx,FA=Te(()=>{Tl=require("path");fe();HA=D(Ze()),Ix=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(DE,"start");wx=DE,Cx=DE({ensureTable:et}).handleFile});async function Rl(e){return Lx?(Ha||(Ha=Dx(Mx)),(await(await Ha).import(e)).namespace):import(e)}async function Dx(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:Ux,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qA.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,GA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function Ux(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 Mx(){return{Resource:Nt,tables:pr}}var GA,qA,Lx,Ha,ME=Te(()=>{as();fe();GA=require("fs/promises"),qA=require("path"),Lx=!1;a(Rl,"secureImport");a(Dx,"getCompartment");a(Ux,"secureOnlyFetch");a(Mx,"getGlobalVars")});var vE={};Qe(vE,{handleFile:()=>Px});async function Px(e,t,r,s){let n=new Map,i=(0,xA.pathToFileURL)(r).toString(),o=await Rl(i);u(o.default)&&s.set((0,PE.dirname)(t),o.default),c(o,(0,PE.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 xA,PE,kA=Te(()=>{xA=require("url");ME();PE=require("path");a(Px,"handleFile")});var HE={};Qe(HE,{start:()=>vx});function vx({resources:e}){e.set("login",BE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var BE,VA=Te(()=>{as();a(vx,"start");BE=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,KA)=>{"use strict";var{Readable:Bx}=require("stream"),Hx=1e4;KA.exports={streamAsJSON(e){return new FE({value:e})}};var FE=class extends Bx{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),$A)}catch(n){yield $A(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);YA(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>Hx?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 YA(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 $A(e){return console.error(e),JSON.stringify(e.toString())}a($A,"handleError");function YA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(YA,"when")});var iO=T((lne,nO)=>{"use strict";var qE=require("recursive-iterator"),Fx=require("alasql"),xE=require("clone"),WA=$(),{handleHDBError:QA,hdb_errors:Gx}=j(),{HDB_ERROR_MSGS:zA,HTTP_STATUS_CODES:JA}=Gx,{getDatabases:qx}=(fe(),Z(Ce)),xx=["DISTINCT_ARRAY"],XA=Symbol("validateTables"),kE=Symbol("validateTable"),une=Symbol("getAllColumns"),jA=Symbol("validateAllColumns"),gl=Symbol("findColumn"),ZA=Symbol("validateOrderBy"),Fa=Symbol("validateSegment"),VE=Symbol("validateColumn"),eO=Symbol("setColumnsForTable"),tO=Symbol("checkColumnsForAsterisk"),rO=Symbol("validateGroupBy"),sO=Symbol("hasColumns"),$E=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[XA](),this[tO](),this[jA]()}[XA](){if(this[sO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[kE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[kE](t.table)})}}[sO](){let t=!1,r=new qE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[kE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=qx();if(!r[t.databaseid])throw QA(new Error,zA.SCHEMA_NOT_FOUND(t.databaseid),JA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw QA(new Error,zA.TABLE_NOT_FOUND(t.databaseid,t.tableid),JA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=xE(n);i.table=xE(t),this.attributes.push(i)})}[gl](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)}[tO](){let t=new qE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eO](r.tableid)}[eO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Fx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jA](){this[Fa](this.statement.columns,!1),this[Fa](this.statement.joins,!1),this[Fa](this.statement.where,!1),this[rO](this.statement.group,!1),this[Fa](this.statement.order,!0)}[Fa](t,r){if(!t)return;let s=new qE(t),n=[];for(let{node:i,path:o}of s)!WA.isEmpty(i)&&!WA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[ZA](i):n.push(this[VE](i)));return n}[rO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&xx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=xE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[gl](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[gl](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`}[ZA](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[VE](t)}[VE](t){let r=this[gl](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]}};nO.exports=$E});var aO=T((dne,oO)=>{"use strict";var YE=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")}};oO.exports=YE});var uO=T((Ene,cO)=>{"use strict";var KE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cO.exports=KE});var gO={};Qe(gO,{AUDIT_STORE_OPTIONS:()=>TO,createAuditEntry:()=>Nl,openAuditStore:()=>Ol,readAuditEntry:()=>Sr,setAuditRetention:()=>kx,transactionKeyEncoder:()=>SO});function Ol(e){let t=e.auditStore=e.openDB(EO.AUDIT_STORE_NAME,TO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,mO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Ga||(Ga=setTimeout(()=>{if(Ga=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-WE})){if((n[0]&15)===zE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},WE/10).unref())}),t}function kx(e){clearTimeout(Ga),Ga=null,WE=e}function Nl(e,t,r,s,n,i,o){let c=RO[i],u=1;s&&(s>1?no.setFloat64(0,s):Hr.set(jE),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?(XE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),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 JE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:RO[s&7],tableId:i,get recordId(){return fO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?fO(e,l,d):void 0},getValue(f){return s&QE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return XE.error("Reading audit entry error",e),{}}}function fO(e,t,r){let s=e.subarray(t,r);return(0,io.readKey)(s,0,r-t)}var io,Al,EO,hO,mO,pO,XE,Hr,no,SO,TO,WE,Ga,QE,lO,zE,_O,dO,RO,JE,oo=Te(()=>{io=require("ordered-binary"),Al=D(X()),EO=D(ze()),hO=D(b()),mO=D(Ze()),pO=D($());xa();XE=D(q());(0,Al.initSync)();Hr=Buffer.alloc(1024),no=new DataView(Hr.buffer,Hr.byteOffset,1024),SO={writeKey(e,t,r){return e===qa?(t.set(qa,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)}},TO={encoding:"binary",keyEncoder:SO},WE=(0,pO.convertToMS)((0,Al.get)(hO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ga=null;a(Ol,"openAuditStore");a(kx,"setAuditRetention");QE=16,lO=1,zE=2,_O=3,dO=4,RO={put:lO|QE,[lO]:"put",delete:zE,[zE]:"delete",message:_O|QE,[_O]:"message",invalidate:dO,[dO]:"invalidate"};a(Nl,"createAuditEntry");a(Sr,"readAuditEntry");JE=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(fO,"readKeySafely")});var IO={};Qe(IO,{HAS_EXPIRATION:()=>nh,LAST_TIMESTAMP_PLACEHOLDER:()=>qa,LOCAL_TIMESTAMP:()=>Vx,METADATA:()=>ka,NO_TIMESTAMP:()=>ZE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>jE,RecordEncoder:()=>sh,TIMESTAMP_ASSIGN_LAST:()=>Yx,TIMESTAMP_ASSIGN_NEW:()=>NO,TIMESTAMP_ASSIGN_PREVIOUS:()=>bO,TIMESTAMP_PLACEHOLDER:()=>bl,TIMESTAMP_RECORD_PREVIOUS:()=>eh,getUpdateRecord:()=>ih,handleLocalTimeForGets:()=>wl});function yO(){return co[0]=co[0]^64,$x.getFloat64(0)}function wl(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=Kx.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=yO())}}}}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 ih(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?eh|bO:ZE:ao=u?i?.localTime?eh|16384:NO|16384:ZE,l>0&&(c|=nh),Il=c,rh=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=th,A.timestampOffset=th.start||0))}if(u){let A=_?.user?.username;if(E&&(yl=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,Nl(o,t,s,Y,A,d,yl),{ifVersion:p}),S}}r.put(qa,Nl(o,t,s,i?.localTime?1:0,A,d,yl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var AO,OO,bl,qa,jE,Vx,ka,co,$x,ZE,NO,Yx,bO,eh,nh,th,yl,ao,Il,rh,sh,Kx,Ei,xa=Te(()=>{AO=require("msgpackr");oo();OO=D(q()),bl=new Uint8Array([1,1,1,1,4,64,0,0]),qa=new Uint8Array([1,1,1,1,1,0,0,0]),jE=new Uint8Array([1,1,1,1,3,64,0,0]),Vx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),$x=new DataView(co.buffer,0,8),ZE=0,NO=0,Yx=1,bO=3,eh=4,nh=16,ao=0,Il=-1,rh=0,sh=class extends AO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Il>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Il,u=rh;c>=0&&(i+=2,Il=-1,u&&(i+=8,rh=0));let _=th=r.call(this,s,n|2048|i);yl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(bl[4]=o,bl[5]=o>>8,_.set(bl,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=yO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&nh&&(_=(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(yO,"getTimestamp");Kx=Map.prototype.get;a(wl,"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&&OO.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(ih,"getUpdateRecord")});var Cl=T((Rne,wO)=>{"use strict";var ah=X(),ch=b(),{RecordEncoder:Wx}=(xa(),Z(IO));ah.initSync();var Qx=ah.get(ch.CONFIG_PARAMS.STORAGE_COMPRESSION),zx=ah.get(ch.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Jx=ch.UPDATES_PROPERTY,oh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Qx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Wx},this.alwaysLazyProperty=s=>s===Jx)}};wO.exports=oh});var Dl=T((Ane,LO)=>{"use strict";var uo=X(),Va=b();uo.initSync();var Xx=uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",CO=uo.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),jx=uo.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ll=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Xx,this.noFSAccess=!0,CO!==void 0&&(this.overlappingSync=CO),this.noReadAhead=jx}};LO.exports=Ll;Ll.MAX_DBS=1e4});var Ue=T((Nne,qO)=>{"use strict";var lh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Ul=mr(),MO=q(),Qt=dr().LMDB_ERRORS_ENUM,Ml=uO(),_h=Cl(),PO=Dl(),Mn=ze(),DO=b(),{table:Zx,resetDatabases:ek}=(fe(),Z(Ce)),UO=X(),ls=Mn.INTERNAL_DBIS_NAME,vO=Mn.DBI_DEFINITION_NAME,tk="data.mdb",rk="lock.mdb",$a=".mdb",sk="-lock",uh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Mn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Pl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Pl,"pathEnvNameValidation");async function dh(e,t,r=!0){try{await us.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Qt.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,tk),us.constants.R_OK|us.constants.F_OK),Tr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Qt.INVALID_ENVIRONMENT)}else throw new Error(Qt.INVALID_ENVIRONMENT);throw s}}a(dh,"validateEnvironmentPath");function vl(e,t){if(Ul.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(vl,"validateEnvDBIName");async function nk(e,t,r=!1,s=!1){Pl(e,t);let n=Tr.basename(e);t=t.toString();let i=UO.get(DO.CONFIG_PARAMS.DATABASES);i||UO.setProperty(DO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await dh(e,t,s),BO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=Tr.join(e,t);await us.mkdirp(s?c:e);let u=new PO(s?c:c+$a,!1),_=lh.open(u);_.dbis=Object.create(null);let l=new _h(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=fh(e,t,r);return _[Mn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(nk,"createEnvironment");async function ik(e,t,r,s=!0){Pl(e,t),t=t.toString();let n=Tr.join(e,t);return Zx({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ik,"copyEnvironment");async function BO(e,t,r=!1){Pl(e,t),t=t.toString();let s=fh(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 dh(e,t),i=Tr.join(e,t+$a),o=n!=i,c=new PO(n,o),u=lh.open(c);u.dbis=Object.create(null);let _=FO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(BO,"openEnvironment");async function ok(e,t,r=!1){Pl(e,t),t=t.toString();let s=Tr.join(e,t+$a),n=await dh(e,t);if(global.lmdb_map!==void 0){let i=fh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await HO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+sk:Tr.join(Tr.dirname(n),rk))}a(ok,"deleteEnvironment");async function HO(e){Ul.validateEnv(e);let t=e[Mn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(HO,"closeEnvironment");function fh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(fh,"getCachedEnvironmentName");function ak(e){Ul.validateEnv(e);let t=Object.create(null),r=Fr(e,ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ls)try{t[s]=Object.assign(new Ml,n)}catch{MO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ak,"listDBIDefinitions");function FO(e){Ul.validateEnv(e);let t=[],r=Fr(e,ls);for(let{key:s}of r.getRange({start:!1}))s!==ls&&t.push(s);return t}a(FO,"listDBIs");function ck(e,t){let s=Fr(e,ls).getEntry(t),n=new Ml;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{MO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ck,"getDBIDefinition");function GO(e,t,r,s=!r){if(vl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new _h(r,s===!0),o=e.openDB(t,i),c=new Ml(r===!0,s);return o[vO]=c,Fr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GO,"createDBI");function Fr(e,t){if(vl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=ck(e,t):r=new Ml,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new _h(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[vO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function uk(e,t){vl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(uk,"statDBI");async function lk(e,t){try{let r=Tr.join(e,t+$a);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(lk,"environmentDataSize");function _k(e,t){if(vl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Fr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Fr(e,ls).removeSync(t)}a(_k,"dropDBI");function dk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)GO(e,i,i!==t,i===t),s=!0;else throw o}}s&&ek()}a(dk,"initializeDBIs");qO.exports={openDBI:Fr,openEnvironment:BO,createEnvironment:nk,listDBIs:FO,listDBIDefinitions:ak,createDBI:GO,dropDBI:_k,statDBI:uk,deleteEnvironment:ok,initializeDBIs:dk,TransactionCursor:uh,environmentDataSize:lk,copyEnvironment:ik,closeEnvironment:HO}});var kO=T((yne,xO)=>{"use strict";var Eh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};xO.exports=Eh});var $O=T((wne,VO)=>{"use strict";var hh=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}};VO.exports=hh});var KO=T((Lne,YO)=>{"use strict";var mh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};YO.exports=mh});var lo=T((vne,zO)=>{"use strict";var fk=Ue(),Ek=kO(),hk=$O(),mk=KO(),Ls=mr(),Ya=dr().LMDB_ERRORS_ENUM,pk=ze(),tn=b(),Sk=$(),Tk=require("uuid"),Une=require("lmdb"),{handleHDBError:Rk,hdb_errors:gk}=j(),{OVERFLOW_MARKER:Mne,MAX_SEARCH_KEY_LENGTH:Pne}=pk,WO=X();WO.initSync();var Bl=WO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ph=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ak(e,t,r,s,n=Ls.getNextMonotonicTime()){gh(e,t,r,s),Sh(e,t,r);let i=new Ek,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];QO(_,!0,n);let l=Ok(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Th(o,c,s,i,n)}a(Ak,"insertRecords");function Ok(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Bl&&_.prefetch(u.map(l=>({key:l,value:n})),Hl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Bl&&e.dbis[t].prefetch([n],Hl),e.dbis[t].put(n,s,s[hi])})}a(Ok,"insertRecord");function Nk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Nk,"removeSkippedRecords");function QO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[ph]))&&(e[ph]=r||Ls.getNextMonotonicTime()):delete e[ph]}a(QO,"setTimestamps");function Sh(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),fk.initializeDBIs(e,t,r)}a(Sh,"initializeTransaction");async function bk(e,t,r,s,n=Ls.getNextMonotonicTime()){gh(e,t,r,s),Sh(e,t,r);let i=new hk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Rh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Th(c,u,s,i,n,o)}a(bk,"updateRecords");async function yk(e,t,r,s,n=Ls.getNextMonotonicTime()){try{gh(e,t,r,s)}catch(u){throw Rk(u,u.message,gk.HTTP_STATUS_CODES.BAD_REQUEST)}Sh(e,t,r);let i=new mk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Sk.isEmpty(_[t])?(l=Tk.v4(),_[t]=l):l=_[t];let d=Rh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Th(o,c,s,i,n)}a(yk,"upsertRecords");async function Th(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(),Nk(r,i),s}a(Th,"finalizeWrite");function Rh(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(QO(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][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){Bl&&S.prefetch(I.map(N=>({key:N,value:s})),Hl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){Bl&&S.prefetch(I.map(N=>({key:N,value:s})),Hl);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:Rh(e,t,r,s,n,i,o))}a(Rh,"updateUpsertRecord");function Ik(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(Ik,"validateBasic");function gh(e,t,r,s){if(Ik(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(gh,"validateWrite");function Hl(){}a(Hl,"noop");zO.exports={insertRecords:Ak,updateRecords:bk,upsertRecords:yk}});var mi=T((Hne,wk)=>{wk.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((Fne,jO)=>{"use strict";var XO=$(),JO=b(),_o=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Pn={schema_format:{pattern:_o,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ck=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()).required(),Lk=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()),Dk=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()).required();function Uk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Pn.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(Uk,"checkValidTable");function Mk(e,t){return XO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Mk,"validateSchemaExists");function Pk(e,t){let r=t.state.ancestors[0].schema;return XO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Pk,"validateTableExists");function vk(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(vk,"validateSchemaName");jO.exports={common_validators:Pn,schema_regex:_o,hdb_schema_table:Ck,validateSchemaExists:Mk,validateTableExists:Pk,validateSchemaName:vk,checkValidTable:Uk,hdb_database:Lk,hdb_table:Dk}});var Fl=T((qne,ZO)=>{var{common_validators:Us}=Ds(),Wa=Ge(),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 Bk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Bk,"schema_object");function Hk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Hk,"table_object");function Fk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(Fk,"create_table_object");function Gk(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(Gk,"attribute_object");function qk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(qk,"describe_table");function xk(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(xk,"validateTableResidence");ZO.exports={schema_object:Bk,create_table_object:Fk,table_object:Hk,attribute_object:Gk,describe_table:qk,validateTableResidence:xk}});var tN=T((kne,eN)=>{"use strict";var kk=require("uuid"),Ah=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||kk.v4(),this.schema_table=`${this.schema}.${this.table}`}};eN.exports=Ah});var Gl=T(($ne,rN)=>{"use strict";var Vk=tN(),Oh=class extends Vk{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}};rN.exports=Oh});var nN=T((Kne,sN)=>{"use strict";sN.exports=Yk;var $k="inserted";function Yk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===$k?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Yk,"returnObject")});var ql=T((Qne,uN)=>{"use strict";var Kk=b(),Nh=Ue(),Wk=lo(),{getSystemSchemaPath:Qk,getSchemaPath:zk}=ve(),Jk=mi(),Xk=Fl(),jk=Gl(),Zk=nN(),{handleHDBError:iN,hdb_errors:aN}=j(),oN=$(),{HTTP_STATUS_CODES:eV}=aN,bh=Jk.hdb_attribute,cN=[];for(let e=0;e<bh.attributes.length;e++)cN.push(bh.attributes[e].attribute);var tV="inserted";uN.exports=rV;async function rV(e){let t=Xk.attribute_object(e);if(t)throw iN(new Error,t.message,aN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&oN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw iN(new Error,r,eV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=oN.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 jk(e.schema,e.table,e.attribute,e.id);try{let i=await Nh.openEnvironment(zk(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}`);Nh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nh.openEnvironment(Qk(),Kk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Wk.insertRecords(o,bh.hash_attribute,cN,[n]);return Zk(tV,c,{records:[n]},u)}catch(i){throw i}}a(rV,"lmdbCreateAttribute")});var Ih=T((Jne,_N)=>{var{hdb_table:sV,hdb_database:lN}=Ds(),nV=Ge(),yh=require("joi"),iV={undefined:"undefined",null:"null"},oV=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||iV[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"),aV=yh.object({database:lN,schema:lN,table:sV,records:yh.array().items(yh.object().custom(oV)).required()});_N.exports=function(e){return nV.validateBySchema(e,aV)}});var za=T((Zne,fN)=>{"use strict";var sn=$(),dN=q(),jne=Ih(),{getDatabases:cV}=(fe(),Z(Ce)),{ClientError:pi}=j();fN.exports=uV;function uV(e){if(sn.isEmpty(e))throw new pi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=cV()[e.schema]?.[e.table];if(sn.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&&sn.isEmptyOrZeroLength(o[r]))throw dN.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(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw dN.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`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(uV,"insertUpdateValidate")});var Ja=T((tie,EN)=>{"use strict";var lV=b().OPERATIONS_ENUM,wh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=lV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};EN.exports=wh});var ec=T((nie,hN)=>{"use strict";var sie=Ja(),xl=b(),Lh=$(),Ch=q(),_V=require("uuid"),{handleHDBError:Xa,hdb_errors:dV}=j(),{HDB_ERROR_MSGS:ja,HTTP_STATUS_CODES:Za}=dV;hN.exports=fV;function fV(e,t,r){for(let n=0;n<t.length;n++)EV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];hV(i,r,e.operation)}}a(fV,"processRows");function EV(e){if(Buffer.byteLength(String(e))>xl.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(Lh.isEmptyOrZeroLength(e)||Lh.isEmpty(e.trim()))throw Xa(new Error,ja.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(EV,"validateAttribute");function hV(e,t,r){if(!e.hasOwnProperty(t)||Lh.isEmptyOrZeroLength(e[t])){if(r===xl.OPERATIONS_ENUM.INSERT||r===xl.OPERATIONS_ENUM.UPSERT){e[t]=_V.v4();return}throw Ch.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]))>xl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ch.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 Ch.error(e),Xa(new Error,ja.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(hV,"validateHash")});var pN=T((oie,mN)=>{"use strict";var Dh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};mN.exports=Dh});var RN=T((cie,TN)=>{"use strict";var Uh=Ue(),mV=q(),SN=dr().LMDB_ERRORS_ENUM;TN.exports=pV;async function pV(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 Uh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==SN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Uh.closeEnvironment(global.lmdb_map[s]),await Uh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==SN.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){mV.error(t)}}a(pV,"cleanLMDBMap")});var nn=T((lie,NN)=>{"use strict";var tc=require("crypto"),SV=X(),{CONFIG_PARAMS:TV}=b(),AN="aes-256-cbc",RV=32,gV=16,Mh=64,ON=32,AV=Mh+ON,gN=new Map;NN.exports={encrypt:OV,decrypt:NV,createNatsTableStreamName:bV};function OV(e){let t=tc.randomBytes(RV),r=tc.randomBytes(gV),s=tc.createCipheriv(AN,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(OV,"encrypt");function NV(e){let t=e.substr(0,Mh),r=e.substr(Mh,ON),s=e.substr(AV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(AN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(NV,"decrypt");function bV(e,t){let r=SV.get(TV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=gN.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),gN.set(r,s)),s}a(bV,"createNatsTableStreamName")});var Si=T((fie,yN)=>{"use strict";var die=Gr(),kl=q(),bN=Fl(),yV=nn(),Vl=$(),{handleHDBError:$l,hdb_errors:IV}=j(),{HDB_ERROR_MSGS:Yl,HTTP_STATUS_CODES:Ph}=IV,wV=X();wV.initSync();var{getDatabases:vh}=(fe(),Z(Ce));yN.exports={describeAll:CV,describeTable:Kl,describeSchema:LV};async function CV(e){try{let t=Vl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vh(),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 Kl({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 Kl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){kl.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 kl.error("Got an error in describeAll"),kl.error(t),$l(new Error,Yl.DESCRIBE_ALL_ERR)}}a(CV,"describeAll");async function Kl(e,t){Vl.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=bN.describe_table(e);if(i)throw i;let c=vh()[r];if(!c)throw $l(new Error,Yl.SCHEMA_NOT_FOUND(e.schema),Ph.NOT_FOUND);let u=c[s];if(!u)throw $l(new Error,Yl.TABLE_NOT_FOUND(e.schema,e.table),Ph.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=yV.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){kl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Kl,"descTable");async function LV(e){Vl.transformReq(e);let t=bN.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=vh()[s];if(!i)throw $l(new Error,Yl.SCHEMA_NOT_FOUND(e.schema),Ph.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Vl.isEmpty(u)||u.describe){let _=await Kl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(LV,"describeSchema")});var vn=T((pie,DN)=>{var DV=mi(),{callbackify:wN,promisify:UV}=require("util"),{getDatabases:CN}=(fe(),Z(Ce));DN.exports={setSchemaDataToGlobal:IN,getTableSchema:MV,getSystemSchema:PV,setSchemaDataToGlobalAsync:UV(IN)};var LN=Si(),hie=wN(LN.describeAll),mie=wN(LN.describeTable);function IN(e){global.hdb_schema=CN(),e&&e()}a(IN,"setSchemaDataToGlobal");function MV(e,t,r){let s=CN()[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(MV,"getTableSchema");function PV(){return DV}a(PV,"getSystemSchema")});var qr=T((Tie,vN)=>{"use strict";var Ql=Ih(),bt=$(),vV=require("util"),zl=_s(),BV=vn(),UN=q(),{handleHDBError:Ti,hdb_errors:HV}=j(),{HTTP_STATUS_CODES:Ri}=HV,FV=vV.promisify(BV.getTableSchema),GV="updated",MN="inserted",PN="upserted";vN.exports={insert:xV,update:kV,upsert:VV,validation:qV,flush:$V};async function qV(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 FV(e.schema,e.table),r=Ql(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 UN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw UN.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(qV,"validation");async function xV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ql(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 zl.createRecords(e);return Wl(MN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(xV,"insertData");async function kV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ql(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 zl.updateRecords(e);return bt.isEmpty(s.existing_rows)?Wl(GV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Wl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(kV,"updateData");async function VV(e){if(e.operation!=="upsert")throw Ti(new Error,"invalid operation, must be upsert",Ri.INTERNAL_SERVER_ERROR);let t=Ql(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 zl.upsertRecords(e);return Wl(PN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(VV,"upsertData");function Wl(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===MN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===PN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Wl,"returnObject");function $V(e){return bt.transformReq(e),zl.flush(e.schema,e.table)}a($V,"flush")});var Hh=T((gie,FN)=>{var YV=Ge(),Bh=require("joi"),{hdb_table:KV,hdb_database:BN}=Ds(),HN={schema:BN,database:BN,table:KV},WV={date:Bh.date().iso().required()},QV={timestamp:Bh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};FN.exports=function(e,t){let r=t==="timestamp"?{...HN,...QV}:{...HN,...WV},s=Bh.object(r);return YV.validateBySchema(e,s)}});var xN=T((Aie,qN)=>{var zV=Ge(),Fh=require("joi"),{hdb_table:JV,hdb_database:GN}=Ds(),XV=Fh.object({schema:GN,database:GN,table:JV,hash_values:Fh.array().required(),ids:Fh.array()});qN.exports=function(e){return zV.validateBySchema(e,XV)}});var VN=T((Oie,kN)=>{"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}},qh=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}},xh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};kN.exports={InsertObject:Gh,NoSQLSeachObject:qh,DeleteResponseObject:xh}});var Oi=T((bie,QN)=>{"use strict";var YN=Hh(),jV=xN(),gi=$(),$N=require("moment"),KN=q(),{promisify:ZV,callbackify:e$}=require("util"),Ai=b(),t$=vn(),kh=ZV(t$.getTableSchema),Vh=_s(),{DeleteResponseObject:r$}=VN(),{handleHDBError:Bn,hdb_errors:s$}=j(),{HDB_ERROR_MSGS:Jl,HTTP_STATUS_CODES:Hn}=s$,n$="records successfully deleted",i$=e$(WN);QN.exports={delete:i$,deleteRecord:WN,deleteFilesBefore:o$,deleteAuditLogsBefore:a$};async function o$(e){let t=YN(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),!$N(e.date,$N.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 Vh.deleteRecordsBefore(e);if(await kh(e.schema,e.table),KN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(o$,"deleteFilesBefore");async function a$(e){let t=YN(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 Vh.deleteAuditLogsBefore(e);return await kh(e.schema,e.table),KN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(a$,"deleteAuditLogsBefore");async function WN(e){e.ids&&(e.hash_values=e.ids);let t=jV(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 kh(e.schema,e.table);let s=await Vh.deleteRecords(e);return gi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${n$}`),s}catch(s){if(s.message===Ai.SEARCH_NOT_FOUND_MESSAGE){let n=new r$;return n.message=Ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(WN,"deleteRecord")});var Xl=T((Iie,XN)=>{var c$=require("crypto"),zN=9;function u$(e){let t=_$(zN),r=JN(e+t);return t+r}a(u$,"createHash");function l$(e,t){let r=e.substr(0,zN),s=r+JN(t+r);return e===s}a(l$,"validateHash");function _$(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(_$,"generateSalt");function JN(e){return c$.createHash("md5").update(e).digest("hex")}a(JN,"md5");XN.exports={hash:u$,validate:l$}});var ZN=T((Cie,jN)=>{var $h=Ge(),Bt={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 d$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,$h.validateObject(e,Bt)}a(d$,"addUserValidation");function f$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,$h.validateObject(e,Bt)}a(f$,"alterUserValidation");function E$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,$h.validateObject(e,Bt)}a(E$,"dropUserValidation");jN.exports={addUserValidation:d$,alterUserValidation:f$,dropUserValidation:E$}});var ke=T((Uie,tb)=>{"use strict";var{platform:Die}=require("os"),h$="nats-server.zip",Yh="nats-server",m$=process.platform==="win32"?`${Yh}.exe`:Yh,Kh="HDB",p$=/^[^\s.,*>]+$/,eb="__request__",S$=a(e=>`${e}.${eb}`,"REQUEST_SUBJECT"),T$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},R$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},g$={HUB:"hub.pid",LEAF:"leaf.pid"},A$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},O$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Kh,deliver_subject:"__HDB__.WORKQUEUE"},N$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Kh,deliver_subject:"HDB.SCHEMAQUEUE"},b$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Kh,deliver_subject:"HDB.USERQUEUE"},y$={SUCCESS:"success",ERROR:"error"},I$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},w$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},C$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},L$={debug:"-D",trace:"-DVV"};tb.exports={NATS_SERVER_ZIP:h$,NATS_SERVER_NAME:Yh,NATS_BINARY_NAME:m$,PID_FILES:g$,NATS_CONFIG_FILES:R$,SERVER_SUFFIX:A$,WORK_QUEUE_CONSUMER_NAMES:O$,SCHEMA_QUEUE_CONSUMER_NAMES:N$,USER_QUEUE_CONSUMER_NAMES:b$,NATS_TERM_CONSTRAINTS_RX:p$,REQUEST_SUFFIX:eb,UPDATE_REMOTE_RESPONSE_STATUSES:y$,CLUSTER_STATUS_STATUSES:I$,REQUEST_SUBJECT:S$,SUBJECT_PREFIXES:w$,MSG_HEADERS:T$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:L$,LOG_LEVEL_HIERARCHY:C$}});var sb=T((Pie,rb)=>{"use strict";var jl=b(),Zl=class{static{a(this,"BaseLicense")}constructor(t=0,r=jl.RAM_ALLOCATION_ENUM.DEFAULT,s=jl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Wh=class extends Zl{static{a(this,"ExtendedLicense")}constructor(t=0,r=jl.RAM_ALLOCATION_ENUM.DEFAULT,s=jl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rb.exports={BaseLicense:Zl,ExtendedLicense:Wh}});var rc=T((Bie,ub)=>{"use strict";var ho=require("fs-extra"),nb=Xl(),ib=require("crypto"),D$=require("moment"),U$=require("uuid").v4,Ht=q(),zh=require("path"),M$=$(),Fn=b(),P$=sb().ExtendedLicense,Eo="invalid license key format",v$="061183",B$="mofi25",H$="aes-256-cbc",F$=16,G$=32,ob=X();ob.initSync();var Qh;ub.exports={validateLicense:ab,generateFingerPrint:x$,licenseSearch:cb,getLicense:$$};function Jh(){return zh.join(ob.getHdbBasePath(),Fn.LICENSE_KEY_DIR_NAME,Fn.LICENSE_FILE_NAME)}a(Jh,"getLicenseDirPath");function q$(){let e=Jh();return zh.join(e,Fn.LICENSE_FILE_NAME)}a(q$,"getLicenseFilePath");function Xh(){let e=Jh();return zh.join(e,Fn.REG_KEY_FILE_NAME)}a(Xh,"getFingerPrintFilePath");async function x$(){let e=Xh();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await k$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(x$,"generateFingerPrint");async function k$(){let e=U$(),t=nb.hash(e),r=Xh();try{await ho.mkdirp(Jh()),await ho.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ht.error(`Error writing fingerprint file to ${r}`),Ht.error(s),new Error("There was an error generating the fingerprint")}return t}a(k$,"writeFingerprint");function ab(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Fn.RAM_ALLOCATION_ENUM.DEFAULT,version:Fn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=Xh(),n=!1;try{n=ho.statSync(s)}catch(i){Ht.error(i)}if(n){let i;try{i=ho.readFileSync(s,"utf8")}catch{Ht.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(B$),c=o[1];c=Buffer.concat([Buffer.from(c)],F$);let u=Buffer.concat([Buffer.from(i)],G$),_=ib.createDecipheriv(H$,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=V$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Eo),Ht.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),Ht.error(Eo),new Error(Eo)}else r.exp_date=l;r.exp_date<D$().valueOf()&&(r.valid_date=!1),nb.validate(o[1],`${v$}${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||Ht.error("Invalid licence"),r}a(ab,"validateLicense");function V$(e,t){try{let r=ib.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ht.warn("Check old license failed")}}a(V$,"checkOldLicense");function cb(){let e=new P$,t=[];try{t=ho.readFileSync(q$(),"utf-8").split(Fn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ht.info("no license file found"):Ht.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(M$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ab(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){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=Fn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Qh=e,e}a(cb,"licenseSearch");async function $$(){return Qh||await cb(),Qh}a($$,"getLicense")});var xr=T((xie,bb)=>{"use strict";var fb="username is required",Eb="nothing to update, must supply active, role or password to update",hb="password cannot be an empty string",mb="If role is specified, it cannot be empty.",pb="active must be true or false";bb.exports={addUser:Z$,alterUser:eY,dropUser:rY,getSuperUser:oY,userInfo:sY,listUsers:t_,listUsersExternal:nY,setUsersToGlobal:po,findAndValidateUser:Ob,getClusterUser:aY,USERNAME_REQUIRED:fb,ALTERUSER_NOTHING_TO_UPDATE:Eb,EMPTY_PASSWORD:hb,EMPTY_ROLE:mb,ACTIVE_BOOLEAN:pb};var Sb=qr(),Y$=Oi(),em=Xl(),Tb=ZN(),Rb=Gr(),tm=on(),Rr=$(),gb=require("validate.js"),de=q(),{promisify:K$}=require("util"),rm=nn(),lb=b(),_b=ke(),W$=hr(),Fie=X(),Gie=rc(),Q$=mi(),{table:qie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:z$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:jh,HDB_ERROR_MSGS:mo}=z$,{UserEventMsg:sm}=ds(),Zh=require("lodash"),{server:nm}=(Mr(),Z(to)),J$=q();nm.getUser=Ob;var Ab={username:!0,active:!0,role:!0,password:!0},db=new Map,e_=Rb.searchByValue,X$=Rb.searchByHash,j$=K$(Y$.delete);async function Z$(e){let t=gb.cleanAttributes(e,Ab),r=Tb.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 e_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw 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=rm.encrypt(t.password)),t.password=em.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Sb.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await po()}catch(u){throw de.error("Got an error setting users to global"),de.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],tm.signalUserChange(new sm(process.pid)),`${c.username} successfully added`}a(Z$,"addUser");async function eY(e){let t=gb.cleanAttributes(e,Ab);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(fb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(Eb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(hb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(pb);let r=tY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=rm.encrypt(t.password)),t.password=em.hash(t.password)),t.role==="")throw new Error(mb);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 e_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=mo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.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 de.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 Sb.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await po()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return tm.signalUserChange(new sm(process.pid)),n}a(eY,"alterUser");function tY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(tY,"isClusterUser");async function rY(e){try{let t=Tb.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 Ms(new Error,mo.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await j$(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await po()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return tm.signalUserChange(new sm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(rY,"dropUser");async function sY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Zh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await X$(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(sY,"userInfo");async function nY(){let e;try{e=await t_()}catch(t){throw de.error("Got an error listing users."),de.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(nY,"listUsersExternal");async function t_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await e_(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=Zh.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 e_(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=Zh.cloneDeep(o),o.role=r[o.role],iY(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Rr.errorizeMessage(e)}return null}a(t_,"listUsers");function iY(e){try{if(!e){de.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Q$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(iY,"appendSystemTablesToRole");async function po(){try{let e=await t_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(po,"setUsersToGlobal");async function Ob(e,t,r=!0){global.hdb_users||await po();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,jh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,jh.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(db.get(t)===s.password)return n;if(em.validate(s.password,t))db.set(t,s.password);else throw Ms(new Error,jh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ob,"findAndValidateUser");async function oY(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(oY,"getSuperUser");async function aY(){let e=await t_(),t=W$.getConfigFromFile(lb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===lb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=rm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_b.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_b.SERVER_SUFFIX.ADMIN,r}a(aY,"getClusterUser");var Nb=[];nm.invalidateUser=function(e){for(let t of Nb)try{t(e)}catch(r){J$.error("Error invalidating user",r)}};nm.onInvalidatedUser=function(e){Nb.push(e)}});var nc=T((Yie,Cb)=>{"use strict";var Ni=q(),gr=b(),cY=RN(),Vie=vn(),$ie=Si(),uY=xr(),{validateEvent:yb}=ds(),sc=_s(),lY=require("process"),{resetDatabases:_Y}=(fe(),Z(Ce)),dY={[gr.ITC_EVENT_TYPES.SCHEMA]:fY,[gr.ITC_EVENT_TYPES.USER]:wb};async function fY(e){let t=yb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await cY(e.message),await EY(e.message)}a(fY,"schemaHandler");async function EY(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=_Y();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(EY,"syncSchemaMetadata");var Ib=[];async function wb(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=yb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${lY.pid} received user event:`,e),await uY.setUsersToGlobal();for(let r of Ib)r()}catch(t){Ni.error(t)}}a(wb,"userHandler");wb.addListener=function(e){Ib.push(e)};Cb.exports=dY});var ds=T((Xie,Db)=>{"use strict";var Wie=q(),im=$(),hY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:Qie,threadId:mY,isMainThread:pY,workerData:zie}=require("worker_threads"),{onMessageFromWorkers:SY,broadcast:Jie,broadcastWithAcknowledgement:TY}=Ze();Db.exports={sendItcEvent:RY,validateEvent:Lb,SchemaEventMsg:gY,UserEventMsg:AY};var r_;SY(async(e,t)=>{r_=r_||nc(),Lb(e),r_[e.type]&&await r_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function RY(e){return!pY&&e.message&&(e.message.originator=mY),TY(e)}a(RY,"sendItcEvent");function Lb(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||im.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||im.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||im.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(hY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Lb,"validateEvent");function gY(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(gY,"SchemaEventMsg");function AY(e){this.originator=e}a(AY,"UserEventMsg")});var on=T((eoe,vb)=>{"use strict";var Ub=b(),Zie=$(),s_=q(),Mb=pN(),So,{sendItcEvent:Pb}=ds();function OY(e){try{s_.trace("signalSchemaChange called with message:",e),So=So||nc();let t=new Mb(Ub.ITC_EVENT_TYPES.SCHEMA,e);return So.schema(t),Pb(t)}catch(t){s_.error(t)}}a(OY,"signalSchemaChange");function NY(e){try{s_.trace("signalUserChange called with message:",e),So=So||nc();let t=new Mb(Ub.ITC_EVENT_TYPES.USER,e);return So.user(t),Pb(t)}catch(t){s_.error(t)}}a(NY,"signalUserChange");vb.exports={signalSchemaChange:OY,signalUserChange:NY}});var n_=T((roe,Hb)=>{"use strict";var Bb=$(),bY=b(),yY=q(),IY=ql(),wY=Gl(),CY=on(),{SchemaEventMsg:LY}=ds(),DY="already exists in";Hb.exports=UY;async function UY(e,t,r){if(Bb.isEmptyOrZeroLength(r))return r;let s=[];Bb.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 MY(e,t.schema,t.name,i)})),n}a(UY,"lmdbCheckForNewAttributes");async function MY(e,t,r,s){let n=new wY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await PY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DY))yY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(MY,"createNewAttribute");async function PY(e){let t;return t=await IY(e),CY.signalSchemaChange(new LY(process.pid,bY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(PY,"createAttribute")});var To=T((noe,Fb)=>{"use strict";var om=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}};Fb.exports=om});var qb=T((ooe,Gb)=>{"use strict";var vY=To(),BY=b().OPERATIONS_ENUM,am=class extends vY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(BY.INSERT,r,s,n,i),this.records=t}};Gb.exports=am});var kb=T((coe,xb)=>{"use strict";var HY=To(),FY=b().OPERATIONS_ENUM,cm=class extends HY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(FY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};xb.exports=cm});var $b=T((loe,Vb)=>{"use strict";var GY=To(),qY=b().OPERATIONS_ENUM,um=class extends GY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(qY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Vb.exports=um});var Kb=T((doe,Yb)=>{"use strict";var xY=To(),kY=b().OPERATIONS_ENUM,lm=class extends xY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(kY.DELETE,s,n,t,i),this.original_records=r}};Yb.exports=lm});var oc=T((hoe,Jb)=>{"use strict";var Eoe=require("path"),Wb=Ue(),VY=qb(),$Y=kb(),YY=$b(),KY=Kb(),Ro=ze(),Qb=$(),{CONFIG_PARAMS:WY}=b(),zb=X();zb.initSync();var i_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:QY}=ve();Jb.exports=zY;async function zY(e,t){if(zb.get(WY.LOGGING_AUDITLOG)===!1)return;let r=QY(e.schema,e.table),s=await Wb.openEnvironment(r,e.table,!0),n=JY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Wb.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),Qb.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(zY,"writeTransaction");function JY(e,t){let r=Qb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===i_.INSERT)return new VY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===i_.UPDATE)return new $Y(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===i_.UPSERT)return new YY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===i_.DELETE)return new KY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(JY,"createTransactionObject")});var _m=T((Soe,Xb)=>{"use strict";var XY=za(),poe=Ja(),ac=b(),jY=ec(),ZY=lo().insertRecords,e1=Ue(),t1=q(),r1=n_(),{getSchemaPath:s1}=ve(),n1=oc();Xb.exports=i1;async function i1(e){try{let{schema_table:t,attributes:r}=XY(e);jY(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 r1(e.hdb_auth_header,t,r),n=s1(e.schema,e.table),i=await e1.openEnvironment(n,e.table),o=await ZY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n1(e,o)}catch(c){t1.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(i1,"lmdbCreateRecords")});var ey=T((Roe,Zb)=>{"use strict";var jb=b(),o1=_m(),a1=Ja(),c1=require("fs-extra"),{getSchemaPath:u1}=ve();Zb.exports=l1;async function l1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a1(jb.SYSTEM_SCHEMA_NAME,jb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o1(r),await c1.mkdirp(u1(e.schema))}a(l1,"lmdbCreateSchema")});var ry=T((Aoe,ty)=>{"use strict";var dm=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}};ty.exports=dm});var oy=T((Ioe,iy)=>{"use strict";var sy=Ue(),fm=mr(),Em=dr().LMDB_ERRORS_ENUM,_1=ze(),ny=q(),Noe=$(),d1=require("lmdb"),f1=ry(),E1=b(),{OVERFLOW_MARKER:boe,MAX_SEARCH_KEY_LENGTH:yoe}=_1,h1=E1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m1(e,t,r,s){if(fm.validateEnv(e),t===void 0)throw new Error(Em.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Em.IDS_REQUIRED):new Error(Em.IDS_MUST_BE_ITERABLE);try{let n=sy.listDBIs(e);sy.initializeDBIs(e,t,n);let i=new f1,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[h1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,d1.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=fm.getIndexedValues(N);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)I.remove(Y[Q],o)}catch{ny.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ny.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=fm.getNextMonotonicTime(),i}catch(n){throw n}}a(m1,"deleteRecords");iy.exports={deleteRecords:m1}});var cc=T((Coe,cy)=>{"use strict";var go=$(),p1=oy(),S1=Ue(),{getSchemaPath:T1}=ve(),R1=oc(),g1=q();cy.exports=A1;async function A1(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 ay([],[]);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=T1(e.schema,e.table),i=await S1.openEnvironment(n,e.table),o=await p1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await R1(e,o)}catch(c){g1.error(`unable to write transaction due to ${c.message}`)}return ay(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(A1,"lmdbDeleteRecords");function ay(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(ay,"createDeleteResponse")});var mm=T((Uoe,uy)=>{"use strict";var O1=b(),Doe=mr();function hm(e,t){let r=Object.create(null);if(t.length===1&&O1.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(hm,"parseRow");function N1(e,t,r,s){let n=hm(r,e);s.push(n)}a(N1,"searchAll");function b1(e,t,r,s){let n=hm(r,e);s[t]=n}a(b1,"searchAllToMap");function y1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y1,"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 I1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(I1,"endsWith");function w1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(w1,"contains");function C1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(C1,"greaterThanCompare");function L1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(L1,"greaterThanEqualCompare");function D1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(D1,"lessThanCompare");function U1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(U1,"lessThanEqualCompare");uy.exports={parseRow:hm,searchAll:N1,searchAllToMap:b1,iterateDBI:y1,endsWith:I1,contains:w1,greaterThanCompare:C1,greaterThanEqualCompare:L1,lessThanCompare:D1,lessThanEqualCompare:U1,pushResults:bi}});var Ao=T((Hoe,my)=>{"use strict";var Gn=Ue(),Poe=q(),Ar=mr(),o_=ze(),Je=dr().LMDB_ERRORS_ENUM,voe=$(),M1=b(),a_=mm(),{parseRow:P1}=a_,Boe=require("lmdb"),{OVERFLOW_MARKER:ly,MAX_SEARCH_KEY_LENGTH:v1}=o_;function _y(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(_y,"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=Gn.openDBI(n,r);i[o_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Gn.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 dy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(ly)){if(!n)if(r)n=Gn.openDBI(e,r);else{let u=Gn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Gn.openDBI(e,u[_]),!n[o_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(dy,"getOverflowCheck");function B1(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)=>(c_(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(_=>P1(_.value,r))))}a(B1,"searchAll");function H1(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);c_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of _y(e,t,t,s,n,i))o.set(c,a_.parseRow(u,r));return o}a(H1,"searchAllToMap");function F1(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=_y(e,void 0,t,r,s,n),c=o.transaction,u=dy(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(F1,"iterateDBI");function G1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Gn.statDBI(e,t).entryCount}a(G1,"countAll");function q1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(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(q1,"equals");function x1(e,t,r){return qn(e,t,r),Gn.openDBI(e,t).getValuesCount(r)}a(x1,"count");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(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(k1,"startsWith");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return fy(e,t,r,s,n,i,o,!0)}a(V1,"endsWith");function fy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=dy(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(ly)?_.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))?_[o_.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(fy,"contains");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(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($1,"greaterThan");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(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(Y1,"greaterThanEqual");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(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(K1,"lessThan");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(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(W1,"lessThanEqual");function Q1(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(Q1,"between");function z1(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(c_(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=a_.parseRow(c,r)),o}a(z1,"searchByHash");function J1(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(J1,"checkHashExists");function X1(e,t,r,s,n=[]){return hy(e,t,r,s,n),Ey(e,t,r,s,n).map(i=>i[1])}a(X1,"batchSearchByHash");function j1(e,t,r,s,n=[]){hy(e,t,r,s,n);let i=new Map;for(let[o,c]of Ey(e,t,r,s,n))i.set(o,c);return i}a(j1,"batchSearchByHashToMap");function Ey(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[_,a_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Ey,"batchHashSearch");function hy(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(c_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(hy,"initializeBatchSearchByHash");function c_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(c_,"validateFetchAttributes");function qn(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>v1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&M1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Gn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");my.exports={searchAll:B1,searchAllToMap:H1,count:x1,countAll:G1,equals:q1,startsWith:k1,endsWith:V1,contains:fy,searchByHash:z1,setGetWholeRowAttributes:lc,batchSearchByHash:X1,batchSearchByHashToMap:j1,checkHashExists:J1,iterateDBI:F1,greaterThan:$1,greaterThanEqual:Y1,lessThan:K1,lessThanEqual:W1,between:Q1}});var Oo=T((Goe,gy)=>{var py=require("lodash"),Sy=Ge(),Be=require("joi"),Z1=$(),{hdb_schema_table:u_,checkValidTable:Ty,hdb_table:Ry,hdb_database:l_}=Ds(),{handleHDBError:eK,hdb_errors:tK}=j(),{getDatabases:rK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:sK}=tK,nK=Be.object({database:l_,schema:l_,table:Ry,search_attribute:u_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(u_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),iK=Be.object({database:l_,schema:l_,table:Ry,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(u_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:u_,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()});gy.exports=function(e,t){let r=null;switch(t){case"value":r=Sy.validateBySchema(e,nK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ty("database",e.schema)),i(Ty("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=Sy.validateBySchema(e,iK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Z1.checkGlobalSchemaTable(e.schema,e.table);if(n)return eK(new Error,n,sK.NOT_FOUND);let o=rK()[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=py.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!py.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 pm=T((xoe,Ay)=>{"use strict";var oK=Ue(),aK=Oo(),{getSchemaPath:cK}=ve();Ay.exports=uK;function uK(e){let t=aK(e,"hashes");if(t)throw t;let r=cK(e.schema,e.table);return oK.openEnvironment(r,e.table)}a(uK,"initialize")});var Sm=T((Voe,Oy)=>{"use strict";var lK=Ao(),_K=pm();Oy.exports=dK;async function dK(e){let t=await _K(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return lK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(dK,"lmdbGetDataByHash")});var No=T((Yoe,Ny)=>{"use strict";var Tm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Ny.exports=Tm});var yy=T((Qoe,by)=>{"use strict";var Woe=No(),fK=Ao(),EK=pm();by.exports=hK;async function hK(e){let t=await EK(e),r=global.hdb_schema[e.schema][e.table];return fK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(hK,"lmdbSearchByHash")});var vs=T((Joe,Iy)=>{"use strict";var Rm=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}};Iy.exports=Rm});var __=T((joe,My)=>{"use strict";var Ft=Ao(),mK=Ue(),pK=$(),oe=ze(),Ii=b(),SK=mi(),wy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:TK}=ve(),an=Ii.SEARCH_WILDCARDS;async function RK(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=SK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Uy(e,s.hash_attribute,r,t);return Ly(e,n,s.hash_attribute,r)}a(RK,"prepSearch");async function Ly(e,t,r,s){let n=TK(e.schema,e.table),i=await mK.openEnvironment(n,e.table),o=Dy(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(gK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Cy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Cy(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(Ly,"executeSearch");function Dy(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 oe.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.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(Dy,"searchByType");function Cy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Cy,"createMapFromIterable");function gK(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(gK,"checkToFetchMore");function Uy(e,t,r,s){if(pK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),an.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(wy.UNKNOWN_SEARCH_TYPE)}else switch(s){case Ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case Ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case Ii.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case Ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(wy.UNKNOWN_SEARCH_TYPE)}}a(Uy,"createSearchTypeFromSearchObject");My.exports={executeSearch:Ly,createSearchTypeFromSearchObject:Uy,prepSearch:RK,searchByType:Dy}});var vy=T((tae,Py)=>{"use strict";var eae=vs(),AK=Oo(),OK=$(),NK=b(),bK=__();Py.exports=yK;function yK(e,t){if(!OK.isEmpty(t)&&NK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=AK(e,"value");if(s)throw s;let n=!0;return bK.prepSearch(e,t,n)}a(yK,"lmdbGetDataByValue")});var _c=T((nae,By)=>{"use strict";var sae=vs(),IK=Oo(),wK=$(),CK=b(),LK=__();By.exports=DK;async function DK(e,t){if(!wK.isEmpty(t)&&CK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=IK(e,"value");if(s)throw s;return LK.prepSearch(e,t,!1)}a(DK,"lmdbSearchByValue")});var Fy=T((aae,Hy)=>{"use strict";var oae=ze(),gm=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}},Am=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Om=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Hy.exports={SearchByConditionsObject:gm,SearchCondition:Am,SortAttribute:Om}});var Vy=T((_ae,ky)=>{"use strict";var uae=Fy().SearchByConditionsObject,UK=vs(),MK=Oo(),Nm=Ao(),d_=ze(),{Resource:lae}=(as(),Z(LE)),xy=__(),PK=mm(),vK=require("lodash"),{getSchemaPath:BK}=ve(),Gy=Ue(),{handleHDBError:HK,hdb_errors:FK}=j(),{HTTP_STATUS_CODES:GK}=FK,qK=1e8;ky.exports=xK;async function xK(e){let t=MK(e,"conditions");if(t)throw HK(t,t.message,GK.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=BK(e.schema,e.table),s=await Gy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Gy.openDBI(s,_.search_attribute);let i=vK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===d_.SEARCH_TYPES.EQUALS?_.estimated_count=Nm.count(s,_.search_attribute,_.search_value):l===d_.SEARCH_TYPES.CONTAINS||l===d_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=qK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await qy(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(xy.filterByType),d=l.length,f=Nm.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=>PK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await qy(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=Nm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(xK,"lmdbSearchByConditions");async function qy(e,t,r,s){let n=new UK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===d_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,xy.searchByType(e,n,i,s).map(o=>o.value)}a(qy,"executeConditionSearch")});var dc=T((fae,$y)=>{"use strict";var kK=b().OPERATIONS_ENUM,bm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=kK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};$y.exports=bm});var ym=T((hae,jy)=>{"use strict";var Qy=vs(),zy=dc(),Jy=_c(),Xy=cc(),zt=b(),Yy=$(),Ky=Ue(),{getTransactionAuditStorePath:VK,getSchemaPath:$K}=ve(),Wy=q();jy.exports=YK;async function YK(e){try{if(Yy.isEmpty(global.hdb_schema[e.schema])||Yy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await KK(e),await WK(e);let t=$K(e.schema,e.table);try{await Ky.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Wy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=VK(e.schema,e.table);await Ky.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Wy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(YK,"lmdbDropTable");async function KK(e){let t=new Qy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[zt.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 zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Xy(n)}a(KK,"deleteAttributesFromSystem");async function WK(e){let t=new Qy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,zt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,zt.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 zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Xy(n)}catch(i){throw i}}a(WK,"dropTableFromSystem")});var eI=T((pae,Zy)=>{"use strict";var QK=require("fs-extra"),zK=vs(),JK=No(),XK=dc(),jK=ym(),ZK=cc(),eW=Sm(),tW=_c(),cn=b(),{getSchemaPath:rW}=ve(),{handleHDBError:sW,hdb_errors:nW}=j(),{HDB_ERROR_MSGS:iW,HTTP_STATUS_CODES:oW}=nW;Zy.exports=aW;async function aW(e){let t;try{t=await cW(e.schema);let r=new zK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await tW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await jK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new XK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await ZK(n);let i=rW(t);await QK.remove(i)}catch(r){throw r}}a(aW,"lmdbDropSchema");async function cW(e){let t=new JK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await eW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw sW(new Error,iW.SCHEMA_NOT_FOUND(e),oW.NOT_FOUND,void 0,void 0,!0);return s}a(cW,"validateDropSchema")});var wm=T((Tae,tI)=>{"use strict";var Im=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};tI.exports=Im});var sI=T((Aae,rI)=>{"use strict";var uW=require("fs-extra"),f_=Ue(),{getTransactionAuditStorePath:lW}=ve(),Cm=ze(),gae=wm();rI.exports=_W;async function _W(e){let t;try{let r=lW(e.schema,e.table);await uW.mkdirp(r),t=await f_.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{f_.createDBI(t,Cm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),f_.createDBI(t,Cm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),f_.createDBI(t,Cm.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(_W,"createTransactionsAuditEnvironment")});var aI=T((Nae,oI)=>{"use strict";var Lm=b(),nI=Ue(),dW=lo(),{getSystemSchemaPath:fW,getSchemaPath:EW}=ve(),hW=mi(),mW=ql(),Dm=Gl(),pW=q(),SW=sI(),Mm=hW.hdb_table,iI=[];for(let e=0;e<Mm.attributes.length;e++)iI.push(Mm.attributes[e].attribute);oI.exports=TW;async function TW(e,t){let r=EW(t.schema,t.table),s=new Dm(t.schema,t.table,Lm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Dm(t.schema,t.table,Lm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Dm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await nI.createEnvironment(r,t.table),e!==void 0){let o=await nI.openEnvironment(fW(),Lm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await dW.insertRecords(o,Mm.hash_attribute,iI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Um(s),await Um(n),await Um(i)}await SW(t)}catch(o){throw o}}a(TW,"lmdbCreateTable");async function Um(e){try{await mW(e)}catch(t){pW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Um,"createAttribute")});var uI=T((yae,cI)=>{"use strict";var RW=za(),gW=ec(),AW=n_(),fc=b(),OW=lo().updateRecords,NW=Ue(),{getSchemaPath:bW}=ve(),yW=oc(),IW=q();cI.exports=wW;async function wW(e){try{let{schema_table:t,attributes:r}=RW(e);gW(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 AW(e.hdb_auth_header,t,r),n=bW(e.schema,e.table),i=await NW.openEnvironment(n,e.table),o=await OW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yW(e,o)}catch(c){IW.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(wW,"lmdbUpdateRecords")});var _I=T((wae,lI)=>{"use strict";var CW=b().OPERATIONS_ENUM,Pm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=CW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};lI.exports=Pm});var fI=T((Dae,dI)=>{"use strict";var Lae=_I(),LW=za(),DW=ec(),UW=n_(),Ec=b(),MW=lo().upsertRecords,PW=Ue(),{getSchemaPath:vW}=ve(),BW=oc(),HW=q(),{handleHDBError:FW,hdb_errors:GW}=j();dI.exports=qW;async function qW(e){let t;try{t=LW(e)}catch(u){throw FW(u,u.message,GW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;DW(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 UW(e.hdb_auth_header,r,s),i=vW(e.schema,e.table),o=await PW.openEnvironment(i,e.table),c=await MW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await BW(e,c)}catch(u){HW.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(qW,"lmdbUpsertRecords")});var hI=T((Mae,EI)=>{"use strict";var vm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};EI.exports=vm});var pI=T((vae,mI)=>{"use strict";var Bm=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}};mI.exports=Bm});var RI=T((Fae,TI)=>{"use strict";var Hm=Ue(),{getTransactionAuditStorePath:xW}=ve(),Hae=hI(),hc=ze(),kW=$(),SI=pI(),VW=require("util").promisify,$W=VW(setTimeout),YW=1e4,KW=100;TI.exports=WW;async function WW(e){let t=xW(e.schema,e.table),r=await Hm.openEnvironment(t,e.table,!0),s=Hm.listDBIs(r);Hm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new SI;do n=await QW(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 $W(KW);while(n.transactions_deleted>0);return i}a(WW,"deleteAuditLogsBefore");async function QW(e,t){let r=new SI;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];kW.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>YW)break}return await n,r}catch(s){throw s}}a(QW,"deleteTransactions")});var AI=T((qae,gI)=>{"use strict";var Fm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};gI.exports=Fm});var NI=T((Vae,OI)=>{"use strict";var zW=vs(),JW=dc(),kae=AI(),Bs=b(),XW=$(),Gm=Ue(),jW=mi(),ZW=_c(),eQ=cc(),{getSchemaPath:tQ}=ve();OI.exports=rQ;async function rQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=jW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nQ(e),n=tQ(e.schema,e.table),i=await Gm.openEnvironment(n,e.table);return t===!0&&await sQ(e,i,r.hash_attribute),Gm.dropDBI(i,e.attribute),s}a(rQ,"lmdbDropAttribute");async function sQ(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(sQ,"removeAttributeFromAllObjects");async function nQ(e){let t=new zW(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 ZW(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(XW.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 eQ(i)}a(nQ,"dropAttributeFromSystem")});var LI=T((Kae,CI)=>{"use strict";var qm=Ue(),bo=ze(),Yae=mr(),xm=b(),bI=$(),{getTransactionAuditStorePath:iQ}=ve(),oQ=Ao(),E_=To(),aQ=q();CI.exports=cQ;async function cQ(e){let t=iQ(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case xm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return yI(r,e.search_values);case xm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,lQ(r,e.search_values,n);case xm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return uQ(r,e.search_values);default:return yI(r)}}a(cQ,"readAuditLog");function yI(e,t=[0,Date.now()]){bI.isEmpty(t[0])&&(t[0]=0),bI.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 E_,n))}a(yI,"searchTransactionsByTimestamp");function uQ(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,wI(e,i))}return Object.fromEntries(r)}a(uQ,"searchTransactionsByUsername");function lQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=oQ.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=wI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);II(u,"records",r,l,o),II(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(lQ,"searchTransactionsByHashValues");function II(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 E_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new E_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(II,"loopRecords");function wI(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 E_,i);r.push(o)}}catch(i){aQ.warn(i)}return r}catch(s){throw s}}a(wI,"batchSearchTransactions")});var UI=T((Jae,DI)=>{"use strict";var{getSchemaPath:Qae}=ve(),zae=Ue(),{database:_Q}=(fe(),Z(Ce));DI.exports={writeTransaction:dQ};async function dQ(e,t,r){return _Q({database:e,table:t}).transaction(r)}a(dQ,"writeTransaction")});var BI=T((jae,vI)=>{"use strict";var{getSchemaPath:MI}=ve(),PI=Ue();vI.exports={flush:fQ,resetReadTxn:EQ};async function fQ(e,t){return(await PI.openEnvironment(MI(e,t),t.toString())).flushed}a(fQ,"flush");async function EQ(e,t){try{(await PI.openEnvironment(MI(e,t),t.toString())).resetReadTxn()}catch{}}a(EQ,"resetReadTxn")});var qI=T((ece,GI)=>{"use strict";var{Readable:hQ}=require("stream"),{getDatabases:mQ}=(fe(),Z(Ce)),{readSync:pQ,openSync:SQ,createReadStream:HI}=require("fs"),{open:TQ}=require("lmdb"),FI=Cl(),RQ=Dl(),{AUDIT_STORE_OPTIONS:gQ}=(oo(),Z(gO)),{INTERNAL_DBIS_NAME:AQ,AUDIT_STORE_NAME:OQ}=ze();GI.exports=bQ;var km=32768,NQ=100;async function bQ(e){let t=e.database||e.schema||"data",r=mQ()[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=TQ({noSync:!0,maxDbs:RQ.MAX_DBS}),f,E=d.openDB(AQ,new FI(!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:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%NQ===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,G=new FI(!Q,Q);await S(I,G)}e.include_audit&&await S(OQ,Object.assign({},gQ)),await f;let A=HI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=SQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(km);pQ(c,_,0,km),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=HI(null,{fd:c,start:km}),f=new hQ.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(bQ,"getBackup")});var VI=T((rce,kI)=>{"use strict";var yQ=q(),{handleHDBError:IQ}=j(),wQ=aO(),CQ=ql(),LQ=_m(),DQ=ey(),UQ=cc(),MQ=Sm(),PQ=yy(),vQ=vy(),BQ=_c(),HQ=Vy(),FQ=eI(),GQ=aI(),qQ=uI(),xQ=fI(),kQ=RI(),VQ=ym(),$Q=NI(),YQ=LI(),KQ=UI(),xI=BI(),WQ=qI(),Vm=class extends wQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return HQ(t)}async getDataByHash(t){return await MQ(t)}async searchByHash(t){return await PQ(t)}async getDataByValue(t,r){return await vQ(t,r)}async searchByValue(t){return await BQ(t)}async createSchema(t){return await DQ(t)}async dropSchema(t){return await FQ(t)}async createTable(t,r){return await GQ(t,r)}async dropTable(t){return await VQ(t)}async createAttribute(t){return await CQ(t)}async createRecords(t){return await LQ(t)}async updateRecords(t){return await qQ(t)}async upsertRecords(t){try{return await xQ(t)}catch(r){throw IQ(r,null,null,yQ.ERR,r)}}async deleteRecords(t){return await UQ(t)}async dropAttribute(t){return await $Q(t)}async deleteAuditLogsBefore(t){return await kQ(t)}async readAuditLog(t){return await YQ(t)}writeTransaction(t,r,s){return KQ.writeTransaction(t,r,s)}flush(t,r){return xI.flush(t,r)}resetReadTxn(t,r){return xI.resetReadTxn(t,r)}getBackup(t){return WQ(t)}};kI.exports=Vm});var jI={};Qe(jI,{ResourceBridge:()=>Km});function Wm({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 YI(e,t){let r=Hs(e),s=Wm(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;qe(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&fl(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||zQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,QQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function KI(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*WI(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 QI,h_,Es,zI,JI,ms,$m,Ym,XI,QQ,zQ,JQ,XQ,$I,Km,ZI=Te(()=>{"use strict";QI=D(VI()),h_=D(Oo()),Es=D(j());fe();zI=D(za()),JI=D(ec()),ms=D(b()),$m=D(on()),Ym=D(ds()),XI=D($());fi();El();({HDB_ERROR_MSGS:QQ}=Es.hdb_errors),zQ="data",JQ=1e4,XQ=10,Km=class extends QI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$I=this}async searchByConditions(t){let r=(0,h_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(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:Wm(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 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}),$m.signalSchemaChange(new Ym.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Qm(t.schema),$m.signalSchemaChange(new Ym.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,$I.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,zI.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 qe(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=fl(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 qe(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 KI(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,XI.async_set_timeout)(XQ),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?KI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,h_.default)(t,"hashes");if(r)throw r;return YI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of YI(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,h_.default)(t,"value");if(s)throw s;let n=Hs(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:Wm(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 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 WI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return WI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Wm,"getSelect");a(YI,"getRecords");a(Hs,"getTable");a(KI,"createDeleteResponse");a(WI,"groupRecordsInHistory")});var _s=T((cce,ew)=>{"use strict";var{ResourceBridge:jQ}=(ZI(),Z(jI)),ZQ=X();ZQ.initSync();var m_;function ez(){return m_||(m_=new jQ,m_)}a(ez,"getBridge");ew.exports=ez()});var nw=T((lce,sw)=>{"use strict";var tw=require("lodash"),pc=require("mathjs"),tz=require("jsonata"),rw=$();sw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?tw.uniqWith(e,tw.isEqual):e,searchJSON:rz,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 rz(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(rw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),rw.isEmpty(this.__ala__.res[r])){let s=tz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(rz,"searchJSON")});var ow=T((dce,iw)=>{"use strict";var rt=require("moment"),zm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;iw.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(zm),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(zm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(zm)}});var lw=T((fce,uw)=>{"use strict";var sz=require("@turf/area"),nz=require("@turf/length"),iz=require("@turf/circle"),oz=require("@turf/difference"),az=require("@turf/distance"),cz=require("@turf/boolean-contains"),uz=require("@turf/boolean-equal"),lz=require("@turf/boolean-disjoint"),_z=require("@turf/helpers"),aw=b(),ue=$(),un=q();uw.exports={geoArea:dz,geoLength:fz,geoCircle:Ez,geoDifference:hz,geoDistance:cw,geoNear:mz,geoContains:pz,geoEqual:Sz,geoCrosses:Tz,geoConvert:Rz};function dz(e){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return sz.default(e)}catch(t){return un.trace(t,e),NaN}}a(dz,"geoArea");function fz(e,t){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return nz.default(e,{units:t||"kilometers"})}catch(r){return un.trace(r,e),NaN}}a(fz,"geoLength");function Ez(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return iz.default(e,t,{units:r||"kilometers"})}catch(s){return un.trace(s,e,t),NaN}}a(Ez,"geoCircle");function hz(e,t){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return oz(e,t)}catch(r){return un.trace(r,e,t),NaN}}a(hz,"geoDifference");function cw(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return az.default(e,t,{units:r||"kilometers"})}catch(s){return un.trace(s,e,t),NaN}}a(cw,"geoDistance");function mz(e,t,r,s){if(ue.isEmpty(e)||ue.isEmpty(t))return!1;if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return cw(e,t,s)<=r}catch(n){return un.trace(n,e,t),!1}}a(mz,"geoNear");function pz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return cz.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(pz,"geoContains");function Sz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return uz.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(Sz,"geoEqual");function Tz(e,t){if(ue.isEmpty(e)||ue.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t));try{return!lz.default(e,t)}catch(r){return un.trace(r,e,t),!1}}a(Tz,"geoCrosses");function Rz(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(aw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(aw.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ue.autoCastJSON(e)),_z[t](e,r)}a(Rz,"geoConvert")});var p_=T((hce,_w)=>{var wi=nw(),Or=ow(),Fs=lw();_w.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 hw=T((mce,Ew)=>{"use strict";var Tc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var gz=p_(),dw=require("clone"),S_=require("recursive-iterator"),re=q(),le=$(),yo=_s(),Az=b(),{hdb_errors:Oz}=j(),{getDatabases:fw}=(fe(),Z(Ce)),Nz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";gz(Jt);var Jm=class{static{a(this,"SQLSearch")}constructor(t,r){if(le.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(),le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!le.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 S_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(dw(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=fw()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(le.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new S_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!le.isEmpty(r)&&r.right)if(le.isNotEmptyAndHasValue(r.right.value)){let s=le.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new Jt.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=le.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Jt.yy.LogicValue({value:i}):s instanceof Jt.yy.StringValue&&le.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Jt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new S_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!le.isEmpty(Az.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(le.isEmptyOrZeroLength(r.left.columnid)||le.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(le.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"=":!le.isEmpty(r.right.value)||!le.isEmpty(r.left.value)?s.add(le.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(le.isEmptyOrZeroLength(this.all_table_attributes)&&le.isEmptyOrZeroLength(this.statement.from)&&le.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(le.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);le.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(le.isEmptyOrZeroLength(this.all_table_attributes)&&!le.isEmptyOrZeroLength(this.columns.columns))return t;if(le.isEmptyOrZeroLength(this.all_table_attributes)&&le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Jt.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(dw(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(le.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(Nz)>-1&&this.tables.forEach(n=>{let i={columnid:fw()[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),!le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!le.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,le.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(!le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!le.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,le.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,le.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,le.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,le.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 Jt.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 Jt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Jt.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 Jt.yy.FuncValue:new Jt.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 Jt.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 S_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(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 Jt.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(Oz.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)}};Ew.exports=Jm});var Gr=T((Sce,mw)=>{"use strict";var bz=iO();mw.exports={searchByConditions:Iz,searchByHash:wz,searchByValue:Cz,search:Lz};var Xm=_s(),{transformReq:jm}=$(),yz=hw();async function Iz(e){return jm(e),Xm.searchByConditions(e)}a(Iz,"searchByConditions");async function wz(e){jm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xm.searchByHash(e))r&&t.push(r);return t}a(wz,"searchByHash");async function Cz(e){jm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xm.searchByValue(e))t.push(r);return t}a(Cz,"searchByValue");function Lz(e,t){try{let r=new bz(e);r.validate(),new yz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Lz,"search")});var T_=T((Rce,pw)=>{"use strict";var Dz=_s();pw.exports={writeTransaction:Uz};function Uz(e,t,r){return Dz.writeTransaction(e,t,r)}a(Uz,"writeTransaction")});var gw=T((Oce,Rw)=>{"use strict";var Mz=Gr(),Pz=vn(),Sw=q(),vz=qr(),Ace=T_(),Bz=require("clone"),ep=require("alasql"),Hz=p_(),Tw=require("util"),Fz=Tw.promisify(Pz.getTableSchema),Gz=Tw.promisify(Mz.search),qz=b(),Zm=$();Hz(ep);Rw.exports={update:kz};var xz="There was a problem performing this update. Please check the logs and try again.";async function kz({statement:e,hdb_user:t}){let r=await Fz(e.table.databaseid,e.table.tableid),s=Vz(e.columns);Zm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Bz(n),c=Zm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=ep.parse(u).statements[0],l=await Gz(_),d=$z(s,l);return Yz(o,d,t)}a(kz,"update");function Vz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=ep.compile(`SELECT ${r.expression.toString()} AS [${qz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Sw.error(t),new Error(xz)}}a(Vz,"createUpdateRecord");function $z(e,t){return Zm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($z,"buildUpdateRecords");async function Yz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Sw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Yz,"updateRecords")});var Ow=T((Ice,Aw)=>{var Kz=require("alasql"),Wz=Gr(),Qz=q(),zz=_s(),rp=require("util"),tp=$(),Jz=b(),Xz=vn(),bce=T_(),yce=qr(),jz="record",Zz="successfully deleted",eJ=rp.callbackify(nJ),tJ=rp.promisify(Wz.search),rJ=rp.promisify(Xz.getTableSchema);Aw.exports={convertDelete:eJ};function sJ(e){return`${e.deleted_hashes.length} ${jz}${e.deleted_hashes.length===1?"":"s"} ${Zz}`}a(sJ,"generateReturnMessage");async function nJ({statement:e,hdb_user:t}){let r=await rJ(e.table.databaseid,e.table.tableid);tp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=tp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Kz.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 tJ(c);let _=await zz.deleteRecords(u);return tp.isEmptyOrZeroLength(_.message)&&(_.message=sJ(_)),delete _.txn_time,_}catch(_){throw Qz.error(_),_.hdb_code?_.message:_}}a(nJ,"convertDelete")});var ww=T((Cce,Iw)=>{"use strict";var iJ=Si(),{hdb_errors:Nw}=j(),{getDatabases:bw}=(fe(),Z(Ce));Iw.exports={checkSchemaExists:yw,checkSchemaTableExists:oJ,schema_describe:iJ};async function yw(e){if(!bw()[e])return Nw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yw,"checkSchemaExists");async function oJ(e,t){let r=await yw(e);if(r)return r;if(!bw()[e][t])return Nw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oJ,"checkSchemaTableExists")});var Rc=T((Dce,aJ)=>{aJ.exports={name:"harperdb",version:"4.2.6",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.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.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 O_={};Qe(O_,{addAnalyticsListener:()=>Oc,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>cJ});function cJ(e){Fw=e}function Nr(e,t,r,s,n){if(!Fw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=A_.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},A_.set(i,o)}R_||uJ()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Oc(e){xw.push(e)}function uJ(){R_=performance.now(),setTimeout(async()=>{let e=performance.now()-R_;R_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of A_){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 kw){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 Vw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of xw)n(t);A_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:qw,report:r}):Kw({report:r})},Gw).unref()}async function lJ(e,t=6e4){let r=ip(),s=$w(),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:G,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=G+(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 Mt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*Mt+At*w)/(Mt+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 Mt=c.get(be);Mt?Mt.push(...B):c.set(be,B)}}await Vw()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:G,...w}=h;G=G.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of G){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=G.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 kw){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[G,w,K,B,x,te,be,se,Mt]=I;Object.assign(S,{p1:G,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Mt})}let l;for(let[h,p]of o)p.id=(0,g_.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,g_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Cw,active:E-Lw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Cw=f,Lw=E}async function Dw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function ip(){return Uw||(Uw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function $w(){return Mw||(Mw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function fJ(){Yw=!0;let e=(0,Ac.get)(np.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await lJ(Gw,e),await Dw(ip(),_J),await Dw($w(),dJ)},Math.min(e/2,2147483647)).unref()}function Kw(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Pw+=s.mean*s.count);r.totalBytesProcessed=Pw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(vw.get(t))}),vw.set(t,t.performance.eventLoopUtilization())),r.id=(0,g_.getNextMonotonicTime)(),ip().primaryStore.put(r.id,r),Yw||fJ(),EJ&&(Ww=mJ(r))}async function mJ(e){if(await Ww,!xn){let r=(0,gc.dirname)((0,Hw.getLogFilePath)());try{xn=await(0,sp.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{xn=await(0,sp.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await xn.stat()).size;if(t>hJ){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)+`
|
|
8
|
+
`,t)}var Ci,Bw,Hw,gc,sp,g_,Ac,np,A_,Fw,R_,Gw,qw,xw,kw,Cw,Lw,Vw,_J,dJ,Uw,Mw,Yw,Pw,vw,EJ,Ww,xn,hJ,kn=Te(()=>{Ci=require("worker_threads"),Bw=D(Ze());fe();Hw=D(q()),gc=require("path"),sp=require("fs/promises"),g_=D(mr()),Ac=D(X()),np=D(b());Mr();(0,Ac.initSync)();A_=new Map,Fw=(0,Ac.get)(np.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(cJ,"setAnalyticsEnabled");a(Nr,"recordAction");ut.recordAnalytics=Nr;a(kr,"recordActionBinary");R_=0,Gw=1e3,qw="analytics-report",xw=[];a(Oc,"addAnalyticsListener");kw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(uJ,"sendAnalytics");a(lJ,"aggregation");Cw=0,Lw=0,Vw=a(()=>new Promise(setImmediate),"rest");a(Dw,"cleanup");_J=36e5,dJ=31536e6;a(ip,"getRawAnalyticsTable");a($w,"getAnalyticsTable");(0,Bw.setChildListenerByType)(qw,Kw);a(fJ,"startScheduledTasks");Pw=0,vw=new Map,EJ=!1;a(Kw,"recordAnalytics");hJ=1e6;a(mJ,"logAnalytics")});var dt=T((Yce,dC)=>{"use strict";var yt=X();yt.initSync();var pJ=require("fs-extra"),SJ=require("semver"),yc=require("path"),{monotonicFactory:TJ}=require("ulidx"),zw=TJ(),RJ=require("util"),Jw=require("child_process"),gJ=RJ.promisify(Jw.exec),AJ=Jw.spawn,ge=ke(),Oe=b(),up=$(),Vr=q(),N_=nn(),OJ=T_(),Nc=hr(),{onMessageByType:NJ}=Ze(),{isMainThread:bJ}=require("worker_threads"),{Encoder:yJ,decode:lp}=require("msgpackr"),Xw=new yJ,{isEmpty:Li}=up,jw=xr(),IJ=48*36e11,wJ=5e9;bJ&&NJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Co=void 0});var{connect:CJ,StorageType:Zw,RetentionPolicy:eC,AckPolicy:b_,DeliverPolicy:y_,DiscardPolicy:LJ,NatsConnection:xce,JetStreamManager:kce,JetStreamClient:Vce,StringCodec:$ce,JSONCodec:DJ,createInbox:_p,headers:UJ,ErrorCode:Qw}=require("nats"),{PACKAGE_ROOT:MJ}=b(),PJ=Rc(),{recordAction:vJ}=(kn(),Z(O_)),tC=DJ(),BJ="clustering",HJ=PJ.engines[ge.NATS_SERVER_NAME],FJ=yc.join(MJ,"dependencies"),cp=yc.join(FJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),op,ap,bc,Io,wo;dC.exports={runCommand:rC,checkNATSServerInstalled:GJ,createConnection:dp,getConnection:I_,getJetStreamManager:Ic,getJetStream:sC,getNATSReferences:Xt,getServerList:xJ,createLocalStream:fp,listStreams:nC,deleteLocalStream:kJ,getServerConfig:wc,listRemoteStreams:VJ,viewStream:$J,viewStreamIterator:YJ,publishToStream:KJ,createWorkQueueStream:WJ,addSourceToWorkStream:oC,request:zJ,removeSourceFromWorkStream:cC,reloadNATS:Ep,reloadNATSHub:JJ,reloadNATSLeaf:XJ,extractServerName:aC,requestErrorHandler:jJ,updateWorkStream:ZJ,createLocalTableStream:lC,createTableStreams:e2,purgeTableStream:_C,purgeSchemaTableStreams:t2,getStreamInfo:r2,updateLocalStreams:n2,closeConnection:qJ,getJsmServerName:Cc,addNatsMsgHeader:iC,updateIngestStreamConsumer:QJ};async function rC(e,t=void 0){let{stdout:r,stderr:s}=await gJ(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(sC,"runCommand");async function GJ(){try{await SJ.access(up)}catch{return!1}let e=await sC(`${up} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return TJ.eq(t,FJ)}a(GJ,"checkNATSServerInstalled");async function fp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Zw.getClusterUser();if(Ci(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 LJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:yt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:yt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:yt.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(fp,"createConnection");async function xJ(){Ss&&(await Ss.drain(),Ss=void 0,yo=void 0,Io=void 0,wo=void 0)}a(xJ,"closeConnection");var Ss,wo;async function y_(){return wo||(wo=fp(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await wo),Ss||wo}a(y_,"getConnection");async function yc(){if(yo)return yo;Ci(Ss)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return yo=await Ss.jetstreamManager({domain:e,timeout:6e4}),yo}a(yc,"getJetStreamManager");async function nC(){if(Io)return Io;Ci(Ss)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=Ss.jetstream({domain:e,timeout:6e4}),Io}a(nC,"getJetStream");async function Xt(){let e=Ss||await y_(),t=yo||await yc(),r=Io||await nC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function kJ(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Zw.getClusterUser(),n=await fp(t,r,s),i=dp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=rC.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 lp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(kJ,"getServerList");async function Ep(e,t){let{jsm:r}=await Xt(),s=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:eC.File,retention:tC.Limits,subjects:t,discard:DJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Ep,"createLocalStream");async function iC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(iC,"listStreams");async function VJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(VJ,"deleteLocalStream");async function $J(e){let{connection:t}=await Xt(),r=[],s=dp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(rC.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($J,"listRemoteStreams");async function YJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.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=_p(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(YJ,"viewStream");async function*KJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.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=_p(_.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(KJ,"viewStreamIterator");async function WJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=oC(s,r);let{js:n}=await Xt(),i=await wc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:jw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),BJ(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 lC(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 Ep(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(WJ,"publishToStream");function oC(e,t){t===void 0&&(t=MJ());let r=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(oC,"addNatsMsgHeader");function Ic(e){e=e.toLowerCase();let t=bc.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),HJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(cp)&&(cp={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),cp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(ap)&&(ap={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:bc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),ap;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ic,"getServerConfig");async function QJ(e){let{jsm:t}=await Xt(),r=await wc();try{await t.streams.add({name:e.stream_name,storage:eC.File,retention:tC.Limits,max_age:wJ,max_bytes:CJ,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:N_.Explicit,durable_name:e.durable_name,deliver_policy:b_.All,max_ack_pending:1e4});else throw s}}a(QJ,"createWorkQueueStream");async function zJ(){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:N_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:b_.All,max_ack_pending:1e4}))}a(zJ,"updateIngestStreamConsumer");async function aC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=cC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=O_.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(aC,"addSourceToWorkStream");function cC(e){return e.split(".")[1]}a(cC,"extractServerName");async function uC(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=O_.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(uC,"removeSourceFromWorkStream");async function JJ(e,t,r=6e4,s=dp()){if(!lp.isObject(t))throw new Error("data param must be an object");let n=jw.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 _p(c.data)}a(JJ,"request");function hp(e){return new Promise(async(t,r)=>{let s=OJ(up,["--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(hp,"reloadNATS");async function XJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await hp(e)}a(XJ,"reloadNATSHub");async function jJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await hp(e)}a(jJ,"reloadNATSLeaf");function ZJ(e,t,r){let s;switch(e.code){case zw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case zw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ZJ,"requestErrorHandler");async function e2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await lC(async()=>{e.subscribe===!0?await aC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(e2,"updateWorkStream");function lC(e){return NJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lC,"exclusiveLock");async function _C(e,t){let r=O_.createNatsTableStreamName(e,t),s=await wc(),n=n2(e,t,s);await Ep(r,[n])}a(_C,"createLocalTableStream");async function t2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await _C(s,n)}}a(t2,"createTableStreams");async function dC(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=O_.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(dC,"purgeTableStream");async function r2(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await dC(e,t[r])}a(r2,"purgeSchemaTableStreams");async function s2(e){return(await yc()).streams.info(e)}a(s2,"getStreamInfo");function n2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(n2,"createSubjectName");async function wc(){if(Nc)return Nc;if(Nc=(await yc())?.nc?.info?.server_name,Nc===void 0)throw new Error("Unable to get jetstream manager server name");return Nc}a(wc,"getJsmServerName");async function i2(){let e=await yc(),t=await wc(),r=await iC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=o2(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(i2,"updateLocalStreams");function o2(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=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=yt.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(o2,"updateStreamLimits")});var L_=T((zce,pC)=>{"use strict";var Co=Hl(),Lo=Cw(),a2=G(),c2=require("uuid").v4,Qce=require("clone"),w_=on(),Do=b(),u2=require("util"),kn=_s(),{handleHDBError:jt,hdb_errors:l2}=j(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Zt}=l2,{SchemaEventMsg:C_}=ds(),EC=dt(),{getDatabases:_2}=(fe(),Z(Ce)),{transformReq:Uo}=$();pC.exports={createSchema:d2,createSchemaStructure:hC,createTable:f2,createTableStructure:mC,createAttribute:S2,dropSchema:E2,dropTable:h2,dropAttribute:m2,getBackup:T2};async function d2(e){let t=await hC(e);return w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),t}a(d2,"createSchema");async function hC(e){let t=Co.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo(e),!await Lo.checkSchemaExists(e.schema))throw jt(new Error,I_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(hC,"createSchemaStructure");async function f2(e){return Uo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mC(e)}a(f2,"createTable");async function mC(e){let t=Co.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Co.validateTableResidence(e.residence),!await Lo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,I_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:c2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.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 kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(mC,"createTableStructure");async function E2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Co.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let n=await Lo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,n,!0);let i=await Lo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await kn.dropSchema(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),await EC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(E2,"dropSchema");async function h2(e){let t=Co.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);return await kn.dropTable(e),await EC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(h2,"dropTable");async function m2(e){let t=Co.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.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(Do.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 kn.dropAttribute(e),p2(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw a2.error(`Got an error deleting attribute ${u2.inspect(e)}.`),s}}a(m2,"dropAttribute");function p2(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(p2,"dropAttributeFromGlobal");async function S2(e){Uo(e);let t=_2()[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 kn.createAttribute(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(S2,"createAttribute");function T2(e){return kn.getBackup(e)}a(T2,"getBackup")});var TC=T((Xce,SC)=>{"use strict";var{OPERATIONS_ENUM:R2}=b(),mp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=R2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};SC.exports=mp});var pp=T((eue,NC)=>{"use strict";var g2=_s(),Zce=TC(),D_=$(),U_=b(),A2=X(),{handleHDBError:RC,hdb_errors:O2}=j(),{HDB_ERROR_MSGS:gC,HTTP_STATUS_CODES:AC}=O2,N2=Object.values(U_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OC="To use this operation audit log must be enabled in harperdb-config.yaml";NC.exports=b2;async function b2(e){if(D_.isEmpty(e.schema))throw new Error(gC.SCHEMA_REQUIRED_ERR);if(D_.isEmpty(e.table))throw new Error(gC.TABLE_REQUIRED_ERR);if(!A2.get(U_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw RC(new Error,OC,AC.BAD_REQUEST,U_.LOG_LEVELS.ERROR,OC,!0);let t=D_.checkSchemaTableExist(e.schema,e.table);if(t)throw RC(new Error,t,AC.NOT_FOUND,U_.LOG_LEVELS.ERROR,t,!0);if(!D_.isEmpty(e.search_type)&&N2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await g2.readAuditLog(e)}a(b2,"readAuditLog")});var yC=T((rue,bC)=>{"use strict";var{OPERATIONS_ENUM:y2}=b(),Sp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=y2.GET_BACKUP,this.schema=t,this.table=r}};bC.exports=Sp});var CC=T((oue,wC)=>{"use strict";var I2=_s(),nue=yC(),Tp=$(),w2=b(),iue=X(),{handleHDBError:C2,hdb_errors:L2}=j(),{HDB_ERROR_MSGS:IC,HTTP_STATUS_CODES:D2}=L2;wC.exports=U2;async function U2(e){if(Tp.isEmpty(e.schema))throw new Error(IC.SCHEMA_REQUIRED_ERR);if(Tp.isEmpty(e.table))throw new Error(IC.TABLE_REQUIRED_ERR);let t=Tp.checkSchemaTableExist(e.schema,e.table);if(t)throw C2(new Error,t,D2.NOT_FOUND,w2.LOG_LEVELS.ERROR,t,!0);return await I2.getBackup(read_audit_log_object)}a(U2,"getBackup")});var vC=T((cue,PC)=>{var Vn=require("validate.js"),DC=qe(),Mo=b(),{handleHDBError:M2,hdb_errors:P2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:v2}=P2,Rp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),B2={STRUCTURE_USER:"structure_user"},LC=Object.values(Mo.ROLE_TYPES_ENUM),H2="attribute_permissions",F2="attribute_name",{PERMS_CRUD_ENUM:Po}=Mo,q2=[H2,...Object.values(Po)],UC=[Po.READ,Po.INSERT,Po.UPDATE],G2=[F2,...UC];function x2(e){let t=Rp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MC(e,t)}a(x2,"addRoleValidation");function k2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MC(e,t)}a(k2,"alterRoleValidation");function V2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DC.validateObject(e,t)}a(V2,"dropRoleValidation");var $2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function MC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)$2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=DC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=Y2(e);o&&st(o,r),LC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LC.indexOf(o)<0){if(o===B2.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=>{q2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Po).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.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=>{!G2.includes(p)&&p!==Po.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.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}UC.forEach(p=>{Vn.isDefined(E[p])?Vn.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 K2(r)}a(MC,"customValidate");PC.exports={addRoleValidation:x2,alterRoleValidation:k2,dropRoleValidation:V2};function Y2(e){let{operation:t,permission:r}=e;if(t===Mo.OPERATIONS_ENUM.ADD_ROLE||t===Mo.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?Mo.ROLE_TYPES_ENUM.SUPER_USER:Mo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Y2,"validateNoSUPerms");function K2(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 M2(new Error,s,v2.BAD_REQUEST)}else return null}a(K2,"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 yp=T((lue,qC)=>{"use strict";var BC=Gr(),HC=qr(),W2=Ai(),Ap=vC(),Op=on(),Q2=require("uuid").v4,z2=require("util"),M_=b(),J2=$(),Np=HC.searchByValue,X2=HC.searchByHash,j2=z2.promisify(W2.delete),Z2=vs(),e4=Oo(),{hdb_errors:t4,handleHDBError:vo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:P_}=t4,{UserEventMsg:bp}=ds();qC.exports={addRole:r4,alterRole:s4,dropRole:n4,listRoles:i4};function gp(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(gp,"scrubRoleDetails");async function r4(e){let t=Ap.addRoleValidation(e);if(t)throw t;e=gp(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 Np(r)||[])}catch(i){throw vo(i)}if(s&&s.length>0)throw vo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),P_.CONFLICT,void 0,void 0,!0);e.id||(e.id=Q2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BC.insert(n),Op.signalUserChange(new bp(process.pid)),e=gp(e),e}a(r4,"addRole");async function s4(e){let t=Ap.alterRoleValidation(e);if(t)throw t;e=gp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await BC.update(r)}catch(n){throw vo(n)}if(s&&s?.message==="updated 0 of 1 records")throw vo(new Error,"Invalid role id",P_.BAD_REQUEST,void 0,void 0,!0);return await Op.signalUserChange(new bp(process.pid)),e}a(s4,"alterRole");async function n4(e){let t=Ap.dropRoleValidation(e);if(t)throw vo(new Error,t,P_.BAD_REQUEST,void 0,void 0,!0);let r=new e4(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await X2(r));if(s.length===0)throw vo(new Error,FC.ROLE_NOT_FOUND,P_.NOT_FOUND,void 0,void 0,!0);let n=new Z2(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Np(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 j2(c),Op.signalUserChange(new bp(process.pid)),`${s[0].role} successfully deleted`}a(n4,"dropRole");async function i4(){return Np({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(i4,"listRoles")});var VC=T((due,kC)=>{"use strict";var o4=X(),$n=require("joi"),a4=qe(),GC=require("moment"),c4=require("fs-extra"),Ip=require("path"),u4=require("lodash"),Cc=b(),{LOG_LEVELS:Li}=b(),l4="YYYY-MM-DD hh:mm:ss",_4=Ip.resolve(__dirname,"../logs");kC.exports=function(e){return a4.validateBySchema(e,d4)};var d4=$n.object({from:$n.custom(xC),until:$n.custom(xC),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(f4)});function xC(e,t){if(GC(e,GC.ISO_8601).format(l4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xC,"validateDatetime");function f4(e,t){if(u4.invert(Cc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=o4.get(Cc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Cc.LOG_NAMES.HDB:e,i=n===Cc.LOG_NAMES.INSTALL?Ip.join(_4,Cc.LOG_NAMES.INSTALL):Ip.join(s,n);return c4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(f4,"validateReadLogPath")});var Cp=T((Eue,YC)=>{"use strict";var v_=b(),E4=G(),h4=X(),m4=VC(),wp=require("path"),$C=require("fs-extra"),{once:p4}=require("events"),{handleHDBError:S4,hdb_errors:T4}=j(),{PACKAGE_ROOT:R4}=b(),g4=wp.join(R4,"logs"),A4=1e3,O4=200;YC.exports=N4;async function N4(e){let t=m4(e);if(t)throw S4(t,t.message,T4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=h4.get(v_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?v_.LOG_NAMES.HDB:e.log_name,n=s===v_.LOG_NAMES.INSTALL?wp.join(g4,v_.LOG_NAMES.INSTALL):wp.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?A4: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($C.statSync(n).size-(h+5)*O4,0));let S=$C.createReadStream(n,{start:p});S.on("error",q=>{E4.error(q)});let A=0,I=[],N="",Y;S.on("data",q=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,B;for(;(B=w.exec(q))&&!S.destroyed;){Y&&(Y.message=q.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Mt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Mt,level:Pe,tags:se,message:""},K=B.index+x.length}N=q.slice(K)}),S.on("end",q=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(q){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),q.level===o&&w>=K&&w<=B&&A<E?A++:q.level===o&&w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(q.timestamp),K=new Date(u),q.level===o&&w>=K&&A<E?A++:q.level===o&&w>=K&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(q.timestamp),B=new Date(l),q.level===o&&w<=B&&A<E?A++:q.level===o&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(q.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(q.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Yn(q,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await p4(S,"close"),I}a(N4,"readLog");function Yn(e,t,r){t==="desc"?b4(e,r):t==="asc"?y4(e,r):r.push(e)}a(Yn,"pushLineToResult");function b4(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(b4,"insertDescending");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,"insertAscending")});var H_=T((Tue,zC)=>{"use strict";var Lp=require("joi"),{string:B_,boolean:KC,date:I4}=Lp.types(),w4=qe(),{validateSchemaExists:mue,validateTableExists:pue,validateSchemaName:Sue}=Ds(),C4=b(),L4=ke(),WC=X();WC.initSync();var D4=B_.invalid(WC.get(C4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L4.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(),QC={operation:B_.valid("add_node","update_node"),node_name:D4,subscriptions:Lp.array().items({table:B_.optional(),schema:B_.required(),subscribe:KC.required(),publish:KC.required().custom(M4),start_time:I4.iso()}).min(1).required()};function U4(e){return w4.validateBySchema(e,Lp.object(QC))}a(U4,"addUpdateNodeValidator");function M4(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(M4,"checkForFalsy");zC.exports={addUpdateNodeValidator:U4,validation_schema:QC}});var XC=T((gue,JC)=>{var P4=qe(),v4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JC.exports=function(e){return P4.validateObject(e,v4)}});var Up=T((Aue,jC)=>{"use strict";var B4=b().OPERATIONS_ENUM,Dp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=B4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jC.exports=Dp});var eL=T((Nue,ZC)=>{"use strict";var H4={OPERATION:"operation",REFRESH:"refresh"},Mp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Pp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};ZC.exports={JWTTokens:Mp,TOKEN_TYPE_ENUM:H4,JWTRSAKeys:Pp}});var Uc=T((yue,nL)=>{"use strict";var Dc=require("jsonwebtoken"),vp=require("fs-extra"),Bp=$(),$r=b(),{handleHDBError:er,hdb_errors:F4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=F4,Lc=G(),tL=Jl(),qp=xr(),q4=Gr().update,G4=Up(),x4=on(),{UserEventMsg:k4}=ds(),Kn=X();Kn.initSync();var Hp=require("path"),{JWTTokens:V4,JWTRSAKeys:$4,TOKEN_TYPE_ENUM:F_}=eL(),Y4=Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",K4=Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",q_="RS256",Fp;nL.exports={createTokens:W4,validateOperationToken:z4,refreshOperationToken:Q4,validateRefreshToken:sL};async function W4(e){if(Bp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Lc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await G_(),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 rL(i,r.private_key,r.passphrase),c=await Dc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:K4,algorithm:q_,subject:F_.REFRESH}),u=tL.hash(c),_=new G4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await q4(_)}catch(f){Lc.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 x4.signalUserChange(new k4(process.pid)),new V4(o,c)}a(W4,"createTokens");async function rL(e,t,r){return await Dc.sign(e,{key:t,passphrase:r},{expiresIn:Y4,algorithm:q_,subject:F_.OPERATION})}a(rL,"signOperationToken");async function G_(){if(Fp===void 0)try{let e=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await vp.readFile(e)).toString(),n=(await vp.readFile(t)).toString(),i=(await vp.readFile(r)).toString();Fp=new $4(i,n,s)}catch(e){throw Lc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Fp}a(G_,"getJWTRSAKeys");async function Q4(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 sL(e.refresh_token);let t=await G_(),r=await Dc.decode(e.refresh_token);return{operation_token:await rL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Q4,"refreshOperationToken");async function z4(e){try{let t=await G_(),r=await Dc.verify(e,t.public_key,{algorithms:q_,subject:F_.OPERATION});return await qp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Lc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(z4,"validateOperationToken");async function sL(e){let t;try{let r=await G_(),s=await Dc.verify(e,r.public_key,{algorithms:q_,subject:F_.REFRESH});t=await qp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Lc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!tL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(sL,"validateRefreshToken")});var Gp=T((Cue,aL)=>{"use strict";var J4=XC(),Bo=require("passport"),X4=require("passport-local").Strategy,j4=require("passport-http").BasicStrategy,Z4=require("util"),e3=xr(),oL=Z4.callbackify(e3.findAndValidateUser),wue=dr(),t3=b(),iL=Uc();Bo.use(new X4(function(e,t,r){oL(e,t,r)}));Bo.use(new j4(function(e,t,r){oL(e,t,r)}));Bo.serializeUser(function(e,t){t(null,e)});Bo.deserializeUser(function(e,t){t(null,e)});function r3(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":Bo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===t3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(r3,"authorize");function s3(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(s3,"checkPermissions");aL.exports={authorize:r3,checkPermissions:s3}});var Ho=T((Due,cL)=>{"use strict";var xp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},kp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};cL.exports={Node:xp,NodeSubscription:kp}});var lL=T((Mue,uL)=>{"use strict";var n3=b().OPERATIONS_ENUM,Vp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=n3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uL.exports=Vp});var Mc=T((vue,_L)=>{"use strict";var $p=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Yp=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)}};_L.exports={RemotePayloadObject:$p,RemotePayloadSubscription:Yp}});var fL=T((Hue,dL)=>{"use strict";var Kp=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}};dL.exports=Kp});var mL=T((kue,hL)=>{"use strict";var i3=fL(),que=ze(),EL=Ue(),o3=G(),{getSchemaPath:Gue,getTransactionAuditStorePath:xue}=ve(),{getDatabases:a3}=(fe(),Z(Ce));hL.exports=c3;async function c3(e){let t=new i3;try{let r=a3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await EL.environmentDataSize(schema_path,e.name),o=await EL.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){o3.warn(`unable to stat table dbi due to ${r}`)}return t}a(c3,"lmdbGetTableSize")});var SL=T(($ue,pL)=>{"use strict";var Wp=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}};pL.exports=Wp});var Fo=T((Que,AL)=>{"use strict";var u3=require("fs-extra"),l3=require("path"),qt=require("systeminformation"),Wn=G(),_3=dt(),Qp=ke(),k_=b(),d3=mL(),gL=pi(),{getThreadInfo:TL}=Ze(),nS=X();nS.initSync();var f3=SL(),{openEnvironment:Kue}=Ue(),{getSchemaPath:Wue}=ve(),{database:E3}=(fe(),Z(Ce)),x_;AL.exports={getHDBProcessInfo:jp,getNetworkInfo:eS,getDiskInfo:Zp,getMemoryInfo:Xp,getCPUInfo:Jp,getTimeInfo:zp,getSystemInformation:tS,systemInformation:h3,getTableSize:rS,getMetrics:sS};function zp(){return qt.time()}a(zp,"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 qt.cpu();l.cpu_speed=await qt.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 qt.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:q,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 Wn.error(`error in getCPUInfo: ${e}`),{}}}a(Jp,"getCPUInfo");async function Xp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(Xp,"getMemoryInfo");async function jp(){let e={core:[],clustering:[]};try{let t=await qt.processes(),r;try{r=Number.parseInt(await u3.readFile(l3.join(nS.get(k_.CONFIG_PARAMS.ROOTPATH),k_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===k_.NODE_ERROR_CODES.ENOENT)Wn.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 Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(jp,"getHDBProcessInfo");async function Zp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await qt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await qt.fsStats();return e.read_write=_,e.size=await qt.fsSize(),e}catch(t){return Wn.error(`error in getDiskInfo: ${t}`),e}}a(Zp,"getDiskInfo");async function eS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await qt.networkInterfaceDefault(),e.latency=await qt.inetChecksite("google.com"),(await qt.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 qt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Wn.error(`error in getNetworkInfo: ${t}`),e}}a(eS,"getNetworkInfo");async function tS(){if(x_!==void 0)return x_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await qt.osInfo();e=c;let u=await qt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,x_=e,x_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(tS,"getSystemInformation");async function rS(){let e=[],t=await gL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await d3(s));return e}a(rS,"getTableSize");async function sS(){let e=await gL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=E3({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){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(sS,"getMetrics");async function RL(){if(nS.get(k_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await _3.getNATSReferences(),r=await t.streams.info(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qp.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(RL,"getNatsStreamInfo");async function h3(e){let t=new f3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tS(),t.time=zp(),t.cpu=await Jp(),t.memory=await Xp(),t.disk=await Zp(),t.network=await eS(),t.harperdb_processes=await jp(),t.table_size=await rS(),t.metrics=await sS(),t.threads=await TL(),t.replication=await RL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tS();break;case"time":t.time=zp();break;case"cpu":t.cpu=await Jp();break;case"memory":t.memory=await Xp();break;case"disk":t.disk=await Zp();break;case"network":t.network=await eS();break;case"harperdb_processes":t.harperdb_processes=await jp();break;case"table_size":t.table_size=await rS();break;case"database_metrics":case"metrics":t.metrics=await sS();break;case"threads":t.threads=await TL();break;case"replication":t.replication=await RL();break;default:break}return t}a(h3,"systemInformation")});var iS=T((Jue,OL)=>{"use strict";OL.exports={version:m3,printVersion:p3};var V_=Tc();function m3(){if(V_)return V_.version}a(m3,"version");function p3(){V_&&console.log(`HarperDB Version ${V_.version}`)}a(p3,"printVersion")});var un=T((ele,IL)=>{"use strict";var S3=Gr(),oS=$(),T3=require("util"),Di=b(),NL=X();NL.initSync();var R3=Gp(),bL=qr(),{Node:jue,NodeSubscription:Zue}=Ho(),g3=Oo(),A3=lL(),{RemotePayloadObject:O3,RemotePayloadSubscription:N3}=Mc(),{handleHDBError:b3,hdb_errors:y3}=j(),{HTTP_STATUS_CODES:I3,HDB_ERROR_MSGS:w3}=y3,C3=vs(),L3=Fo(),D3=iS(),{getDatabases:U3}=(fe(),Z(Ce)),M3=T3.promisify(R3.authorize),P3=bL.searchByHash,v3=bL.searchByValue;IL.exports={authHeaderToUser:B3,isEmpty:H3,getNodeRecord:F3,upsertNodeRecord:q3,buildNodePayloads:G3,checkClusteringEnabled:x3,getAllNodeRecords:k3,getSystemInfo:V3,reverseSubscription:yL};async function B3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await M3(t,null),e}a(B3,"authHeaderToUser");function H3(e){return e==null}a(H3,"isEmpty");async function F3(e){let t=new g3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return P3(t)}a(F3,"getNodeRecord");async function q3(e){let t=new A3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return S3.upsert(t)}a(q3,"upsertNodeRecord");function yL(e){if(oS.isEmpty(e.subscribe)||oS.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(yL,"reverseSubscription");function G3(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=oS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yL(c),E=U3()[u]?.[_],h=new N3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new O3(r,t,n,s)}a(G3,"buildNodePayloads");function x3(){if(!NL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw b3(new Error,w3.CLUSTERING_NOT_ENABLED,I3.BAD_REQUEST,void 0,void 0,!0)}a(x3,"checkClusteringEnabled");async function k3(){let e=new C3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await v3(e))}a(k3,"getAllNodeRecords");async function V3(){let e=await L3.getSystemInformation();return{hdb_version:D3.version(),node_version:e.node_version,platform:e.platform}}a(V3,"getSystemInfo")});var aS=T((rle,vL)=>{"use strict";var $_=dt(),wL=$(),CL=ke(),LL=b(),Y_=G(),DL=L_(),$3=Im(),{RemotePayloadObject:Y3}=Mc(),{handleHDBError:UL,hdb_errors:K3}=j(),{HTTP_STATUS_CODES:ML}=K3,{NodeSubscription:PL}=Ho();vL.exports=W3;async function W3(e,t){let r;try{r=await $_.request(`${t}.${CL.REQUEST_SUFFIX}`,new Y3(LL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Y_.trace("Response from remote describe all request:",r)}catch(o){Y_.error(`addNode received error from describe all request to remote node: ${o}`);let c=$_.requestErrorHandler(o,"add_node",t);throw UL(new Error,c,ML.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===CL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw UL(new Error,o,ML.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===LL.SYSTEM_SCHEMA_NAME){await $_.createLocalTableStream(c,u);let h=new PL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=wL.doesSchemaExist(c),l=s[c]!==void 0,d=u?wL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Y_.trace(`addNode creating schema: ${c}`),await DL.createSchema({operation:"create_schema",schema:c})),!d&&f){Y_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new $3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await DL.createTable(h)}await $_.createLocalTableStream(c,u);let E=new PL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(W3,"reviewSubscriptions")});var Q_=T((nle,FL)=>{"use strict";var{handleHDBError:K_,hdb_errors:Q3}=j(),{HTTP_STATUS_CODES:W_}=Q3,{addUpdateNodeValidator:z3}=H_(),Pc=G(),HL=b(),BL=ke(),J3=$(),cS=dt(),vc=un(),X3=X(),j3=aS(),{Node:Z3,NodeSubscription:eX}=Ho(),{broadcast:tX}=Ze(),rX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",sX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",nX=X3.get(HL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=iX;async function iX(e,t=!1){Pc.trace("addNode called with:",e),vc.checkClusteringEnabled();let r=z3(e);if(r)throw K_(r,r.message,W_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await vc.getNodeRecord(s);if(!J3.isEmptyOrZeroLength(d))throw K_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,W_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await j3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=rX,o;let c=vc.buildNodePayloads(n,nX,HL.OPERATIONS_ENUM.ADD_NODE,await vc.getSystemInfo());Pc.trace("addNode sending remote payload:",c);let u;try{u=await cS.request(`${s}.${BL.REQUEST_SUFFIX}`,c)}catch(d){Pc.error(`addNode received error from request: ${d}`);let f=cS.requestErrorHandler(d,"add_node",s);throw K_(new Error,f,W_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw K_(new Error,d,W_.INTERNAL_SERVER_ERROR,"error",d)}Pc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Pc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await cS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new eX(E.schema,E.table,E.publish,E.subscribe))}let l=new Z3(s,_,u.system_info);return await vc.upsertNodeRecord(l),tX({type:"nats_update"}),i.length>0?o.message=sX:o.message=`Successfully added '${s}' to manifest`,o}a(iX,"addNode")});var lS=T((ole,xL)=>{"use strict";var{handleHDBError:z_,hdb_errors:oX}=j(),{HTTP_STATUS_CODES:J_}=oX,{addUpdateNodeValidator:aX}=H_(),Bc=G(),GL=b(),qL=ke(),cX=$(),uS=dt(),Hc=un(),uX=X(),{cloneDeep:lX}=require("lodash"),_X=aS(),{NodeSubscription:dX}=Ho(),{broadcast:fX}=Ze(),EX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",hX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mX=uX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=pX;async function pX(e){Bc.trace("updateNode called with:",e),Hc.checkClusteringEnabled();let t=aX(e);if(t)throw z_(t,t.message,J_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=lX(await Hc.getNodeRecord(r));if(cX.isEmptyOrZeroLength(s))throw z_(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 _X(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=Hc.buildNodePayloads(n,mX,GL.OPERATIONS_ENUM.UPDATE_NODE,await Hc.getSystemInfo());Bc.trace("updateNode sending remote payload:",c);let u;try{u=await uS.request(`${r}.${qL.REQUEST_SUFFIX}`,c)}catch(_){Bc.error(`updateNode received error from request: ${_}`);let l=uS.requestErrorHandler(_,"update_node",r);throw z_(new Error,l,J_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw z_(new Error,_,J_.INTERNAL_SERVER_ERROR,"error",_)}Bc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Bc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await uS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await SX(s[0],n,u.system_info),i.length>0?o.message=hX:o.message=`Successfully updated '${r}'`,o}a(pX,"updateNode");async function SX(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 dX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hc.upsertNodeRecord(s),fX({type:"nats_update"})}a(SX,"updateNodeTable")});var KL=T((cle,YL)=>{"use strict";var $L=require("joi"),{string:kL}=$L.types(),TX=qe(),VL=b(),RX=X(),gX=ke();YL.exports=AX;function AX(e){let t=kL.invalid(RX.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gX.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=$L.object({operation:kL.valid(VL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return TX.validateBySchema(e,r)}a(AX,"removeNodeValidator")});var j_=T((lle,jL)=>{"use strict";var{handleHDBError:WL,hdb_errors:OX}=j(),{HTTP_STATUS_CODES:QL}=OX,NX=KL(),Fc=G(),zL=un(),bX=$(),X_=b(),JL=ke(),XL=dt(),yX=X(),{RemotePayloadObject:IX}=Mc(),{NodeSubscription:wX}=Ho(),CX=_c(),LX=Ai(),{broadcast:DX}=Ze(),UX=yX.get(X_.CONFIG_PARAMS.CLUSTERING_NODENAME);jL.exports=MX;async function MX(e){Fc.trace("removeNode called with:",e),zL.checkClusteringEnabled();let t=NX(e);if(t)throw WL(t,t.message,QL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await zL.getNodeRecord(r);if(bX.isEmptyOrZeroLength(s))throw WL(new Error,`Node '${r}' was not found.`,QL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new IX(X_.OPERATIONS_ENUM.REMOVE_NODE,UX,[]),i,o=!1;try{i=await XL.request(`${r}.${JL.REQUEST_SUFFIX}`,n),Fc.trace("Remove node reply from remote node:",r,i)}catch(u){Fc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Fc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new wX(l.schema,l.table,!1,!1);await XL.updateWorkStream(d,r)}let c=new CX(X_.SYSTEM_SCHEMA_NAME,X_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await LX.deleteRecord(c),DX({type:"nats_update"}),i?.status===JL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fc.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(MX,"removeNode")});var tD=T((dle,eD)=>{"use strict";var ZL=require("joi"),{string:PX,array:vX}=ZL.types(),BX=qe(),HX=H_();eD.exports=FX;function FX(e){let t=ZL.object({operation:PX.valid("configure_cluster").required(),connections:vX.items(HX.validation_schema).required()});return BX.validateBySchema(e,t)}a(FX,"configureClusterValidator")});var _S=T((Ele,oD)=>{"use strict";var qX=b(),Z_=G(),GX=$(),xX=j_(),kX=Q_(),rD=un(),VX=tD(),{handleHDBError:sD,hdb_errors:$X}=j(),{HTTP_STATUS_CODES:nD}=$X,YX="Configure cluster complete.",KX="Failed to configure the cluster. Check the logs for more details.",WX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oD.exports=QX;async function QX(e){Z_.trace("configure cluster called with:",e),rD.checkClusteringEnabled();let t=VX(e);if(t)throw sD(t,t.message,nD.BAD_REQUEST,void 0,void 0,!0);let r=await rD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(iD(xX,{operation:qX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Z_.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(iD(kX,E,E.node_name))}let c=await Promise.allSettled(i);Z_.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"&&(Z_.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(GX.isEmptyOrZeroLength(u))return{message:YX,connections:_};if(l)return{message:WX,failed_nodes:u,connections:_};throw sD(new Error,KX,nD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(QX,"configureCluster");async function iD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(iD,"functionWrapper")});var cD=T((mle,aD)=>{"use strict";var ed=require("joi"),zX=qe(),{validateSchemaExists:JX,validateTableExists:XX,validateSchemaName:jX}=Ds(),ZX=ed.object({operation:ed.string().valid("purge_stream"),schema:ed.string().custom(JX).custom(jX).required(),table:ed.string().custom(XX).required()});function ej(e){return zX.validateBySchema(e,ZX)}a(ej,"purgeStreamValidator");aD.exports=ej});var dS=T((Sle,uD)=>{"use strict";var{handleHDBError:tj,hdb_errors:rj}=j(),{HTTP_STATUS_CODES:sj}=rj,nj=cD(),ij=dt(),oj=un();uD.exports=aj;async function aj(e){let t=nj(e);if(t)throw tj(t,t.message,sj.BAD_REQUEST,void 0,void 0,!0);oj.checkClusteringEnabled();let{schema:r,table:s}=e;return await ij.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(aj,"purgeStream")});var hS=T((Rle,hD)=>{"use strict";var ES=un(),cj=dt(),dD=X(),td=b(),Ui=ke(),uj=$(),fS=G(),{RemotePayloadObject:lj}=Mc(),{ErrorCode:lD}=require("nats"),_D=dD.get(td.CONFIG_PARAMS.CLUSTERING_ENABLED),fD=dD.get(td.CONFIG_PARAMS.CLUSTERING_NODENAME);hD.exports={clusterStatus:_j,buildNodeStatus:ED};async function _j(){let e={node_name:fD,is_enabled:_D,connections:[]};if(!_D)return e;let t=await ES.getAllNodeRecords();if(uj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(ED(t[s],e.connections));return await Promise.allSettled(r),e}a(_j,"clusterStatus");async function ED(e,t){let r=e.name,s=new lj(td.OPERATIONS_ENUM.CLUSTER_STATUS,fD,void 0,await ES.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await cj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,fS.error(`Error getting node status from ${r} `,n))}catch(u){fS.warn(`Error getting node status from ${r}`,u),u.code===lD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new dj(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!==td.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){fS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(ED,"buildNodeStatus");function dj(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(dj,"NodeStatusObject")});var pS=T((Ale,mD)=>{"use strict";var{handleHDBError:fj,hdb_errors:Ej}=j(),{HTTP_STATUS_CODES:hj}=Ej,mj=dt(),pj=un(),mS=$(),rd=require("joi"),Sj=qe(),Tj=2e3,Rj=rd.object({timeout:rd.number().min(1),connected_nodes:rd.boolean(),routes:rd.boolean()});mD.exports=gj;async function gj(e){pj.checkClusteringEnabled();let t=Sj.validateBySchema(e,Rj);if(t)throw fj(t,t.message,hj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||mS.autoCastBoolean(s),o=n===void 0||mS.autoCastBoolean(n),c={nodes:[]},u=await mj.getServerList(r??Tj),_={};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:mS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(gj,"clusterNetwork")});var RD=T((Nle,TD)=>{"use strict";var SS=require("joi"),pD=qe(),{route_constraints:SD}=EE();TD.exports={setRoutesValidator:Aj,deleteRoutesValidator:Oj};function Aj(e){let t=SS.object({server:SS.valid("hub","leaf").required(),routes:SD.required()});return pD.validateBySchema(e,t)}a(Aj,"setRoutesValidator");function Oj(e){let t=SS.object({routes:SD.required()});return pD.validateBySchema(e,t)}a(Oj,"deleteRoutesValidator")});var RS=T((yle,ND)=>{"use strict";var Mi=hr(),TS=$(),sd=b(),gD=RD(),{handleHDBError:AD,hdb_errors:Nj}=j(),{HTTP_STATUS_CODES:OD}=Nj,bj="cluster routes successfully set",yj="cluster routes successfully deleted";ND.exports={setRoutes:Ij,getRoutes:wj,deleteRoutes:Cj};function Ij(e){let t=gD.setRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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=TS.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"?Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:bj,set:o,skipped:i}}a(Ij,"setRoutes");function wj(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(wj,"getRoutes");function Cj(e){let t=gD.deleteRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.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=TS.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=TS.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:yj,deleted:i,skipped:o}}a(Cj,"deleteRoutes")});var yD=T((wle,bD)=>{"use strict";var qc=require("alasql"),Pi=require("recursive-iterator"),Ts=G(),Lj=$(),Gc=b(),gS=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,Uj(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=>Gc.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=>!Gc.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][Gc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dj(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(_=>!Gc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qc.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 Dj(e){return e.filter(t=>t[Gc.PERMS_CRUD_ENUM.READ])}a(Dj,"filterReadRestrictedAttrs");function Uj(e,t,r,s,n){Mj(e,t,r,s,n)}a(Uj,"interpretAST");function xc(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(xc,"addSchemaTableToMap");function Mj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qc.yy.Insert?Hj(e,t,r):e instanceof qc.yy.Select?Pj(e,t,r,s,n):e instanceof qc.yy.Update?vj(e,t,r):e instanceof qc.yy.Delete?Bj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Mj,"getRecordAttributesAST");function Pj(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(Lj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{xc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xc(c.table,t,r,s,n)});let o=new Pi(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 Pi(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 Pi(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 Pi(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(Pj,"getSelectAttributes");function vj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(vj,"getUpdateAttributes");function Bj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(Bj,"getDeleteAttributes");function Hj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;xc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.into.tableid,n,i.columnid,t,r)}a(Hj,"getInsertAttributes");function AS(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(AS,"pushAttribute");bD.exports=gS});var bS=T((Lle,LD)=>{var nd=tc(),ID=require("chalk"),br=G(),wD=require("prompt"),{promisify:Fj}=require("util"),OS=b(),qj=require("fs-extra"),Gj=require("path"),xj=$(),kj=iS(),CD=X();CD.initSync();var Vj=require("moment"),$j=Fj(wD.get),Yj=Gj.join(CD.getHdbBasePath(),OS.LICENSE_KEY_DIR_NAME,OS.LICENSE_FILE_NAME,OS.LICENSE_FILE_NAME);LD.exports={getFingerprint:Wj,setLicense:Kj,parseLicense:NS,register:Qj,getRegistrationInfo:Jj};async function Kj(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await NS(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(Kj,"setLicense");async function Wj(){let e={};try{e=await nd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(Wj,"getFingerprint");async function NS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=nd.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 qj.writeFile(Yj,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(NS,"parseLicense");async function Qj(){let e=await zj();return NS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Qj,"register");async function zj(){let e=await nd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ID.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ID.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{wD.start()}catch(s){br.error(s)}let r;try{r=await $j(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(zj,"promptForRegistration");async function Jj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await nd.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=kj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Jj,"getRegistrationInfo")});var UD=T((Ule,DD)=>{"use strict";var Xj=ke(),yS=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+Xj.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"}};DD.exports=yS});var vD=T((Ple,PD)=>{"use strict";var MD=ke(),IS=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+MD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+MD.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"}};PD.exports=IS});var HD=T((Ble,BD)=>{"use strict";var wS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BD.exports=wS});var qD=T((Fle,FD)=>{"use strict";var jj=ke(),CS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+jj.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=CS});var US=T((Gle,kD)=>{"use strict";var qo=require("path"),ad=require("fs-extra"),Zj=UD(),eZ=vD(),tZ=HD(),rZ=qD(),LS=xr(),xo=$(),sr=hr(),od=b(),kc=ke(),{CONFIG_PARAMS:je}=od,Vc=G(),$c=X(),GD=nn(),DS=dt(),Go="clustering",sZ=1e4,xD=5;kD.exports={generateNatsConfig:iZ,removeNatsConfig:oZ,getHubConfigPath:nZ};function nZ(){let e=$c.get(je.ROOTPATH);return qo.join(e,Go,kc.NATS_CONFIG_FILES.HUB_SERVER)}a(nZ,"getHubConfigPath");async function iZ(e=!1,t=void 0){$c.initSync();let r=$c.get(je.ROOTPATH),s=qo.join(r,Go,kc.PID_FILES.HUB),n=qo.join(r,Go,kc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qo.join(r,Go,kc.NATS_CONFIG_FILES.HUB_SERVER),c=qo.join(r,Go,kc.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 DS.checkNATSServerInstalled()||cd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await LS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await LS.getClusterUser();(xo.isEmpty(A)||A.active!==!0)&&cd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await id(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await id(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===od.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new rZ(te.username,GD.decrypt(te.hash))),N.push(new tZ(te.username,GD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let q=new Zj(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 q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===od.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ad.writeJson(o,q),Vc.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 eZ(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===od.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ad.writeJson(c,B),Vc.trace(`Leaf server config written to ${c}`))}a(iZ,"generateNatsConfig");async function id(e){let t=$c.get(e);return xo.isEmpty(t)&&cd(`port undefined for '${e}'`),await xo.isPortTaken(t)&&cd(`'${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(id,"isPortAvailable");function cd(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(cd,"generateNatsConfigError");async function oZ(e){let{port:t,config_file:r}=DS.getServerConfig(e),{username:s,decrypt_hash:n}=await LS.getClusterUser(),i=0,o=2e3;for(;i<xD;){try{let _=await DS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=xD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await xo.async_set_timeout(o*(i*2))}let c="0".repeat(sZ),u=qo.join($c.get(je.ROOTPATH),Go,r);await ad.writeFile(u,c),await ad.remove(u),Vc.notify(e,"started.")}a(oZ,"removeNatsConfig")});var dd=T((kle,zD)=>{"use strict";var aZ=require("minimist"),{isMainThread:vS,parentPort:YD}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Yc}=Ve,qs=G(),BS=$(),ud=US(),ko=dt(),MS=ke(),KD=hr(),Gs=FS(),VD=Fo(),cZ=sE(),{restartWorkers:ld,onMessageByType:uZ}=Ze(),{handleHDBError:lZ,hdb_errors:_Z}=j(),{HTTP_STATUS_CODES:dZ}=_Z,_d=X();_d.initSync();var Kc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,fZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",$D="Clustering is not enabled so cannot be restarted",EZ="Invalid service",Vo,Yr;zD.exports={restart:WD,restartService:HS};vS&&uZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?HS({service:e.workerType}):WD({operation:"restart"})});async function WD(e){Yr=Object.keys(e).length===0,Vo=await Gs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=aZ(process.argv);if(t.service){await HS(t);return}if(Yr&&!Vo){console.error(fZ);return}if(Yr&&console.log(Kc),Vo){Gs.enterPM2Mode(),qs.notify(Kc);let r=cZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return BS.isEmptyOrZeroLength(Object.keys(r))||KD.updateConfigValue(void 0,void 0,r,!0,!0),mZ(),Kc}return vS?(qs.notify(Kc),setTimeout(()=>{ld()},50)):YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Kc}a(WD,"restart");async function HS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw lZ(new Error,EZ,dZ.BAD_REQUEST,void 0,void 0,!0);if(Vo=await Gs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!vS)return YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yc.clustering:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}Yr&&console.log("Restarting clustering"),qs.notify("Restarting clustering"),await QD();break;case Yc.clustering_config:case Yc["clustering config"]:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}Yr&&console.log("Restarting clustering_config"),qs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case Yc.harperdb:case Yc.http_workers:if(Yr&&!Vo){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"),qs.notify("Restarting http_workers"),Yr?await Gs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ld("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(qs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(HS,"restartService");async function hZ(){await ko.publishToStream(`${MS.SUBJECT_PREFIXES.TXN}.${MS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,MS.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(hZ,"postDummyNatsMsg");async function mZ(){await QD(),await Gs.restart(Ve.HDB_PROC_DESCRIPTOR),await BS.async_set_timeout(2e3),_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await PS(),Yr&&(await ko.closeConnection(),process.exit(0))}a(mZ,"restartPM2Mode");async function QD(){if(!KD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await VD.getHDBProcessInfo()).clustering.length===0)qs.trace("Clustering not running, restart will start clustering services"),await ud.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await PS(),Yr&&await ko.closeConnection();else{await hZ(),await ud.generateNatsConfig(!0),Vo?(qs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await VD.getHDBProcessInfo()).clustering.forEach(n=>{qs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await BS.async_set_timeout(3e3),await PS(),await ko.updateLocalStreams(),Yr&&await ko.closeConnection(),qs.trace("Restart clustering restarting ingest and reply service threads");let t=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(QD,"restartClustering");async function PS(){await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(PS,"removeNatsConfig")});var oU=T((Yle,iU)=>{"use strict";var $le=require("lodash"),nr=b(),{handleHDBError:JD,hdb_errors:pZ}=j(),{HDB_ERROR_MSGS:SZ,HTTP_STATUS_CODES:TZ}=pZ,qS=G();iU.exports={getRolePermissions:gZ};var vi=Object.create(null),RZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),eU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tU=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),GS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...tU(t,r,s,n)}),"table_perms_template"),XD=a((e,t=tU())=>({attribute_name:e,describe:nU(t),[Wc]:t[Wc],[xS]:t[xS],[kS]:t[kS]}),"attr_perms_template"),jD=a((e,t=!1)=>({attribute_name:e,describe:t,[Wc]:t}),"timestamp_attr_perms_template"),{READ:Wc,INSERT:xS,UPDATE:kS}=nr.PERMS_CRUD_ENUM,rU=Object.values(nr.PERMS_CRUD_ENUM),sU=[Wc,xS,kS];function gZ(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[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=AZ(e,r);return vi[t]?vi[t].key=s:vi[t]=RZ(s),vi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.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 qS.error(s),qS.debug(r),JD(new Error,SZ.OUTDATED_PERMS_TRANSLATION_ERROR,TZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw qS.error(s),JD(new Error)}}}a(gZ,"getRolePermissions");function AZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.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]=OZ(t[i]);return}r[i]=eU(),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],_=NZ(c,u);r[i].describe||rU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=GS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=GS()})}),r}a(AZ,"translateRolePermissions");function OZ(e){let t=eU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=GS(!0,!0,!0,!0,!0)}),t}a(OZ,"createStructureUserPermissions");function NZ(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 nr.TIME_STAMP_NAMES.includes(d)&&(f=jD(d,l[Wc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=XD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=nU(l),n.attribute_permissions.push(l),c||bZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=jD(_):l=XD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=ZD(n),n}else return e.describe=ZD(e),e}a(NZ,"getTableAttrPerms");function ZD(e){return rU.filter(t=>e[t]).length>0}a(ZD,"getSchemaTableDescribePerm");function nU(e){return sU.filter(t=>e[t]).length>0}a(nU,"getAttributeDescribePerm");function bZ(e,t){sU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(bZ,"checkForHashPerms")});var aU={};Qe(aU,{Resources:()=>fd,keyArrayToString:()=>$o,resetResources:()=>yZ,resources:()=>Qn});function yZ(){return Qn=new fd}function $o(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fd,Qn,Qc=Te(()=>{di();fd=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(yZ,"resetResources");a($o,"keyArrayToString")});var Bi,VS=Te(()=>{Bi=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 zc={};Qe(zc,{authentication:()=>hU,bypassAuth:()=>MZ,login:()=>vZ,logout:()=>BZ,start:()=>PZ});function MZ(){EU=!0}async function hU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?LZ?CZ:[]:wZ?IZ:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ed&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ed&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ed){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 uU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new md.AuthAuditLog(E,h,It.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===It.AUTH_AUDIT_STATUS.SUCCESS?cU.notify(S):cU.error(S)},"authAuditLog"),d;if(s){if(d=Hi.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,hd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,hd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return UZ&&(Hi.get(h)||(Hi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:zn({error:A.message},e)})}Hi.set(s,d),DZ&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):EU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,_U.getSuperUser)());Ed&&(e.session.update=function(E){if(!u){u=(0,dU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,uU.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")&&Qn.loginPath?(f.status=302,f.headers.set("Location",Qn.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 Bi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function PZ({server:e,port:t}){e.request(hU,{port:t||"all"}),lU||(lU=!0,setInterval(()=>{Hi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),fU.user.addListener(()=>{Hi=new Map}))}async function vZ(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 BZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var _U,hd,dU,Kr,It,md,fU,cU,IZ,wZ,CZ,LZ,uU,Ed,EU,DZ,UZ,Hi,lU,pd=Te(()=>{_U=D(xr());Mr();Qc();hd=D(Uc());fe();dU=require("uuid"),Kr=D(X()),It=D(b()),md=D(G()),fU=D(sc());VS();Yo();cU=(0,md.loggerWithTag)("auth-event");Kr.initSync();IZ=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),wZ=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),CZ=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),LZ=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),uU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ed=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,EU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,DZ=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,UZ=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;ut.onInvalidatedUser(()=>{Hi=new Map});a(MZ,"bypassAuth");a(hU,"authentication");a(PZ,"start");a(vZ,"login");a(BZ,"logout")});var AU=T((s_e,gU)=>{"use strict";var pe=require("joi"),mU=require("fs-extra"),pU=require("path"),_n=qe(),SU=X(),TU=b(),RU=G(),{hdb_errors:HZ}=j(),{HDB_ERROR_MSGS:Gt}=HZ,ln=/^[a-zA-Z0-9-_]+$/;gU.exports={getDropCustomFunctionValidator:qZ,setCustomFunctionValidator:GZ,addComponentValidator:$Z,dropCustomFunctionProjectValidator:YZ,packageComponentValidator:KZ,deployComponentValidator:WZ,setComponentFileValidator:xZ,getComponentFileValidator:VZ,dropComponentFileValidator:kZ};function Sd(e,t,r){try{let s=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),n=pU.join(s,t);return mU.existsSync(n)?e?t:r.message(Gt.PROJECT_EXISTS):e?r.message(Gt.NO_PROJECT):t}catch(s){return RU.error(s),r.message(Gt.VALIDATION_ERR)}}a(Sd,"checkProjectExists");function Jc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Jc,"checkFilePath");function FZ(e,t,r,s){try{let n=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),i=pU.join(n,e,t,r+".js");return mU.existsSync(i)?r:s.message(Gt.NO_FILE)}catch(n){return RU.error(n),s.message(Gt.VALIDATION_ERR)}}a(FZ,"checkFileExists");function qZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(ln).custom(FZ.bind(null,e.project,e.type)).custom(Jc).required().messages({"string.pattern.base":Gt.BAD_FILE_NAME})});return _n.validateBySchema(e,t)}a(qZ,"getDropCustomFunctionValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Jc).required(),function_content:pe.string().required()});return _n.validateBySchema(e,t)}a(GZ,"setCustomFunctionValidator");function xZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(xZ,"setComponentFileValidator");function kZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).optional()});return _n.validateBySchema(e,t)}a(kZ,"dropComponentFileValidator");function VZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Jc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(VZ,"getComponentFileValidator");function $Z(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!1)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a($Z,"addComponentValidator");function YZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(YZ,"dropCustomFunctionProjectValidator");function KZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return _n.validateBySchema(e,t)}a(KZ,"packageComponentValidator");function WZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":Gt.BAD_PACKAGE}),package:pe.string().optional()});return _n.validateBySchema(e,t)}a(WZ,"deployComponentValidator")});var Ad=T((i_e,CU)=>{"use strict";var Td=require("joi"),Rd=require("path"),OU=require("fs-extra"),{exec:QZ}=require("child_process"),zZ=require("util"),NU=zZ.promisify(QZ),Xc=b(),{handleHDBError:Ko,hdb_errors:JZ}=j(),{HTTP_STATUS_CODES:Wo}=JZ,jc=X(),XZ=qe(),Qo=G();jc.initSync();var $S=jc.get(Xc.CONFIG_PARAMS.COMPONENTSROOT),bU="npm install --omit=dev --json",jZ=`${bU} --dry-run`;CU.exports={installModules:r5,auditModules:s5,installAllRootModules:ZZ,uninstallRootModule:e5,linkHarperdb:t5};async function ZZ(e=!1){await gd(),await Zc(e?"npm install --ignore-scripts":"npm install",jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(ZZ,"installAllRootModules");async function e5(e){await Zc(`npm uninstall ${e}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(e5,"uninstallRootModule");async function t5(){await gd(),await Zc(`npm link ${Xc.PACKAGE_ROOT}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(t5,"linkHarperdb");async function Zc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await NU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
13
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(rC,"runCommand");async function GJ(){try{await pJ.access(cp)}catch{return!1}let e=await rC(`${cp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return SJ.eq(t,HJ)}a(GJ,"checkNATSServerInstalled");async function dp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await jw.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 CJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:yt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:yt.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:yt.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(dp,"createConnection");async function qJ(){Ss&&(await Ss.drain(),Ss=void 0,Io=void 0,wo=void 0,Co=void 0)}a(qJ,"closeConnection");var Ss,Co;async function I_(){return Co||(Co=dp(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Co),Ss||Co}a(I_,"getConnection");async function Ic(){if(Io)return Io;Li(Ss)&&await I_();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 sC(){if(wo)return wo;Li(Ss)&&await I_();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(sC,"getJetStream");async function Xt(){let e=Ss||await I_(),t=Io||await Ic(),r=wo||await sC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function xJ(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await jw.getClusterUser(),n=await dp(t,r,s),i=_p(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=tC.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 up.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(xJ,"getServerList");async function fp(e,t){let{jsm:r}=await Xt(),s=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Zw.File,retention:eC.Limits,subjects:t,discard:LJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(fp,"createLocalStream");async function nC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(nC,"listStreams");async function kJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(kJ,"deleteLocalStream");async function VJ(e){let{connection:t}=await Xt(),r=[],s=_p(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(tC.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(VJ,"listRemoteStreams");async function $J(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=zw(),o={durable_name:i,ack_policy:b_.Explicit};t&&(o.deliver_policy=y_.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=lp(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($J,"viewStream");async function*YJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=zw(),o={durable_name:i,ack_policy:b_.Explicit};t&&(o.deliver_policy=y_.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=lp(_.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(YJ,"viewStreamIterator");async function KJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=iC(s,r);let{js:n}=await Xt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Xw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),vJ(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 uC(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 fp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(KJ,"publishToStream");function iC(e,t){t===void 0&&(t=UJ());let r=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(iC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),BJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Li(ap)&&(ap={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}),ap;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Li(op)&&(op={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}),op;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function WJ(e){let{jsm:t}=await Xt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:Zw.File,retention:eC.Limits,max_age:IJ,max_bytes:wJ,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:b_.Explicit,durable_name:e.durable_name,deliver_policy:y_.All,max_ack_pending:1e4});else throw s}}a(WJ,"createWorkQueueStream");async function QJ(){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:b_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:y_.All,max_ack_pending:1e4}))}a(QJ,"updateIngestStreamConsumer");async function oC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=aC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=N_.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(oC,"addSourceToWorkStream");function aC(e){return e.split(".")[1]}a(aC,"extractServerName");async function cC(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=N_.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(cC,"removeSourceFromWorkStream");async function zJ(e,t,r=6e4,s=_p()){if(!up.isObject(t))throw new Error("data param must be an object");let n=Xw.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 lp(c.data)}a(zJ,"request");function Ep(e){return new Promise(async(t,r)=>{let s=AJ(cp,["--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(Ep,"reloadNATS");async function JJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Ep(e)}a(JJ,"reloadNATSHub");async function XJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Ep(e)}a(XJ,"reloadNATSLeaf");function jJ(e,t,r){let s;switch(e.code){case Qw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Qw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(jJ,"requestErrorHandler");async function ZJ(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await uC(async()=>{e.subscribe===!0?await oC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await cC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(ZJ,"updateWorkStream");function uC(e){return OJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(uC,"exclusiveLock");async function lC(e,t){let r=N_.createNatsTableStreamName(e,t),s=await Cc(),n=s2(e,t,s);await fp(r,[n])}a(lC,"createLocalTableStream");async function e2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await lC(s,n)}}a(e2,"createTableStreams");async function _C(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=N_.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(_C,"purgeTableStream");async function t2(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await _C(e,t[r])}a(t2,"purgeSchemaTableStreams");async function r2(e){return(await Ic()).streams.info(e)}a(r2,"getStreamInfo");function s2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(s2,"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 n2(){let e=await Ic(),t=await Cc(),r=await nC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i2(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(n2,"updateLocalStreams");function i2(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=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=yt.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(i2,"updateStreamLimits")});var D_=T((Qce,mC)=>{"use strict";var Lo=Fl(),Do=ww(),o2=q(),a2=require("uuid").v4,Wce=require("clone"),C_=on(),Uo=b(),c2=require("util"),Vn=_s(),{handleHDBError:jt,hdb_errors:u2}=j(),{HDB_ERROR_MSGS:w_,HTTP_STATUS_CODES:Zt}=u2,{SchemaEventMsg:L_}=ds(),fC=dt(),{getDatabases:l2}=(fe(),Z(Ce)),{transformReq:Mo}=$();mC.exports={createSchema:_2,createSchemaStructure:EC,createTable:d2,createTableStructure:hC,createAttribute:p2,dropSchema:f2,dropTable:E2,dropAttribute:h2,getBackup:S2};async function _2(e){let t=await EC(e);return C_.signalSchemaChange(new L_(process.pid,e.operation,e.schema)),t}a(_2,"createSchema");async function EC(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,w_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,w_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Vn.createSchema(e),`database '${e.schema}' successfully created`}a(EC,"createSchemaStructure");async function d2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await hC(e)}a(d2,"createTable");async function hC(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,w_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,w_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:a2(),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(hC,"createTableStructure");async function f2(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),C_.signalSchemaChange(new L_(process.pid,e.operation,e.schema)),await fC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(f2,"dropSchema");async function E2(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 fC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(E2,"dropTable");async function h2(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),m2(e),C_.signalSchemaChange(new L_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw o2.error(`Got an error deleting attribute ${c2.inspect(e)}.`),s}}a(h2,"dropAttribute");function m2(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(m2,"dropAttributeFromGlobal");async function p2(e){Mo(e);let t=l2()[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),C_.signalSchemaChange(new L_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(p2,"createAttribute");function S2(e){return Vn.getBackup(e)}a(S2,"getBackup")});var SC=T((Jce,pC)=>{"use strict";var{OPERATIONS_ENUM:T2}=b(),hp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=T2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};pC.exports=hp});var mp=T((Zce,OC)=>{"use strict";var R2=_s(),jce=SC(),U_=$(),M_=b(),g2=X(),{handleHDBError:TC,hdb_errors:A2}=j(),{HDB_ERROR_MSGS:RC,HTTP_STATUS_CODES:gC}=A2,O2=Object.values(M_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),AC="To use this operation audit log must be enabled in harperdb-config.yaml";OC.exports=N2;async function N2(e){if(U_.isEmpty(e.schema))throw new Error(RC.SCHEMA_REQUIRED_ERR);if(U_.isEmpty(e.table))throw new Error(RC.TABLE_REQUIRED_ERR);if(!g2.get(M_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw TC(new Error,AC,gC.BAD_REQUEST,M_.LOG_LEVELS.ERROR,AC,!0);let t=U_.checkSchemaTableExist(e.schema,e.table);if(t)throw TC(new Error,t,gC.NOT_FOUND,M_.LOG_LEVELS.ERROR,t,!0);if(!U_.isEmpty(e.search_type)&&O2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await R2.readAuditLog(e)}a(N2,"readAuditLog")});var bC=T((tue,NC)=>{"use strict";var{OPERATIONS_ENUM:b2}=b(),pp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=b2.GET_BACKUP,this.schema=t,this.table=r}};NC.exports=pp});var wC=T((iue,IC)=>{"use strict";var y2=_s(),sue=bC(),Sp=$(),I2=b(),nue=X(),{handleHDBError:w2,hdb_errors:C2}=j(),{HDB_ERROR_MSGS:yC,HTTP_STATUS_CODES:L2}=C2;IC.exports=D2;async function D2(e){if(Sp.isEmpty(e.schema))throw new Error(yC.SCHEMA_REQUIRED_ERR);if(Sp.isEmpty(e.table))throw new Error(yC.TABLE_REQUIRED_ERR);let t=Sp.checkSchemaTableExist(e.schema,e.table);if(t)throw w2(new Error,t,L2.NOT_FOUND,I2.LOG_LEVELS.ERROR,t,!0);return await y2.getBackup(read_audit_log_object)}a(D2,"getBackup")});var PC=T((aue,MC)=>{var $n=require("validate.js"),LC=Ge(),Po=b(),{handleHDBError:U2,hdb_errors:M2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:P2}=M2,Tp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),v2={STRUCTURE_USER:"structure_user"},CC=Object.values(Po.ROLE_TYPES_ENUM),B2="attribute_permissions",H2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,F2=[B2,...Object.values(vo)],DC=[vo.READ,vo.INSERT,vo.UPDATE],G2=[H2,...DC];function q2(e){let t=Tp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,UC(e,t)}a(q2,"addRoleValidation");function x2(e){let t=Tp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,UC(e,t)}a(x2,"alterRoleValidation");function k2(e){let t=Tp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,LC.validateObject(e,t)}a(k2,"dropRoleValidation");var V2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function UC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)V2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=LC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=$2(e);o&&st(o,r),CC.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(CC.indexOf(o)<0){if(o===v2.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=>{F2.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=>{!G2.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}DC.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 Y2(r)}a(UC,"customValidate");MC.exports={addRoleValidation:q2,alterRoleValidation:x2,dropRoleValidation:k2};function $2(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($2,"validateNoSUPerms");function Y2(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 U2(new Error,s,P2.BAD_REQUEST)}else return null}a(Y2,"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 bp=T((uue,FC)=>{"use strict";var vC=qr(),BC=Gr(),K2=Oi(),gp=PC(),Ap=on(),W2=require("uuid").v4,Q2=require("util"),P_=b(),z2=$(),Op=BC.searchByValue,J2=BC.searchByHash,X2=Q2.promisify(K2.delete),j2=vs(),Z2=No(),{hdb_errors:e4,handleHDBError:Bo}=j(),{HDB_ERROR_MSGS:HC,HTTP_STATUS_CODES:v_}=e4,{UserEventMsg:Np}=ds();FC.exports={addRole:t4,alterRole:r4,dropRole:s4,listRoles:n4};function Rp(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(Rp,"scrubRoleDetails");async function t4(e){let t=gp.addRoleValidation(e);if(t)throw t;e=Rp(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 Op(r)||[])}catch(i){throw Bo(i)}if(s&&s.length>0)throw Bo(new Error,HC.ROLE_ALREADY_EXISTS(e.role),v_.CONFLICT,void 0,void 0,!0);e.id||(e.id=W2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await vC.insert(n),Ap.signalUserChange(new Np(process.pid)),e=Rp(e),e}a(t4,"addRole");async function r4(e){let t=gp.alterRoleValidation(e);if(t)throw t;e=Rp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await vC.update(r)}catch(n){throw Bo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Bo(new Error,"Invalid role id",v_.BAD_REQUEST,void 0,void 0,!0);return await Ap.signalUserChange(new Np(process.pid)),e}a(r4,"alterRole");async function s4(e){let t=gp.dropRoleValidation(e);if(t)throw Bo(new Error,t,v_.BAD_REQUEST,void 0,void 0,!0);let r=new Z2(P_.SYSTEM_SCHEMA_NAME,P_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await J2(r));if(s.length===0)throw Bo(new Error,HC.ROLE_NOT_FOUND,v_.NOT_FOUND,void 0,void 0,!0);let n=new j2(P_.SYSTEM_SCHEMA_NAME,P_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Op(n)),o=!1;if(z2.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 X2(c),Ap.signalUserChange(new Np(process.pid)),`${s[0].role} successfully deleted`}a(s4,"dropRole");async function n4(){return Op({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(n4,"listRoles")});var kC=T((_ue,xC)=>{"use strict";var i4=X(),Yn=require("joi"),o4=Ge(),GC=require("moment"),a4=require("fs-extra"),yp=require("path"),c4=require("lodash"),Lc=b(),{LOG_LEVELS:Di}=b(),u4="YYYY-MM-DD hh:mm:ss",l4=yp.resolve(__dirname,"../logs");xC.exports=function(e){return o4.validateBySchema(e,_4)};var _4=Yn.object({from:Yn.custom(qC),until:Yn.custom(qC),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(d4)});function qC(e,t){if(GC(e,GC.ISO_8601).format(u4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(qC,"validateDatetime");function d4(e,t){if(c4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=i4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?yp.join(l4,Lc.LOG_NAMES.INSTALL):yp.join(s,n);return a4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(d4,"validateReadLogPath")});var wp=T((fue,$C)=>{"use strict";var B_=b(),f4=q(),E4=X(),h4=kC(),Ip=require("path"),VC=require("fs-extra"),{once:m4}=require("events"),{handleHDBError:p4,hdb_errors:S4}=j(),{PACKAGE_ROOT:T4}=b(),R4=Ip.join(T4,"logs"),g4=1e3,A4=200;$C.exports=O4;async function O4(e){let t=h4(e);if(t)throw p4(t,t.message,S4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=E4.get(B_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?B_.LOG_NAMES.HDB:e.log_name,n=s===B_.LOG_NAMES.INSTALL?Ip.join(R4,B_.LOG_NAMES.INSTALL):Ip.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?g4: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(VC.statSync(n).size-(h+5)*A4,0));let S=VC.createReadStream(n,{start:p});S.on("error",G=>{f4.error(G)});let A=0,I=[],N="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Mt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Mt,level:Pe,tags:se,message:""},K=B.index+x.length}N=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&A<E?A++:G.level===o&&w>=K&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&A<E?A++:G.level===o&&w>=K&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&A<E?A++:G.level===o&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case i:G.level===o&&A<E?A++:G.level===o&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Kn(G,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Kn(G,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await m4(S,"close"),I}a(O4,"readLog");function Kn(e,t,r){t==="desc"?N4(e,r):t==="asc"?b4(e,r):r.push(e)}a(Kn,"pushLineToResult");function N4(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(N4,"insertDescending");function b4(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(b4,"insertAscending")});var F_=T((Sue,QC)=>{"use strict";var Cp=require("joi"),{string:H_,boolean:YC,date:y4}=Cp.types(),I4=Ge(),{validateSchemaExists:hue,validateTableExists:mue,validateSchemaName:pue}=Ds(),w4=b(),C4=ke(),KC=X();KC.initSync();var L4=H_.invalid(KC.get(w4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(C4.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(),WC={operation:H_.valid("add_node","update_node"),node_name:L4,subscriptions:Cp.array().items({table:H_.optional(),schema:H_.required(),subscribe:YC.required(),publish:YC.required().custom(U4),start_time:y4.iso()}).min(1).required()};function D4(e){return I4.validateBySchema(e,Cp.object(WC))}a(D4,"addUpdateNodeValidator");function U4(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(U4,"checkForFalsy");QC.exports={addUpdateNodeValidator:D4,validation_schema:WC}});var JC=T((Rue,zC)=>{var M4=Ge(),P4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};zC.exports=function(e){return M4.validateObject(e,P4)}});var Dp=T((gue,XC)=>{"use strict";var v4=b().OPERATIONS_ENUM,Lp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=v4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};XC.exports=Lp});var ZC=T((Oue,jC)=>{"use strict";var B4={OPERATION:"operation",REFRESH:"refresh"},Up=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Mp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};jC.exports={JWTTokens:Up,TOKEN_TYPE_ENUM:B4,JWTRSAKeys:Mp}});var Mc=T((bue,sL)=>{"use strict";var Uc=require("jsonwebtoken"),Pp=require("fs-extra"),vp=$(),$r=b(),{handleHDBError:er,hdb_errors:H4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=H4,Dc=q(),eL=Xl(),Fp=xr(),F4=qr().update,G4=Dp(),q4=on(),{UserEventMsg:x4}=ds(),Wn=X();Wn.initSync();var Bp=require("path"),{JWTTokens:k4,JWTRSAKeys:V4,TOKEN_TYPE_ENUM:G_}=ZC(),$4=Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Y4=Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",q_="RS256",Hp;sL.exports={createTokens:K4,validateOperationToken:Q4,refreshOperationToken:W4,validateRefreshToken:rL};async function K4(e){if(vp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(vp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(vp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Fp.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 x_(),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 tL(i,r.private_key,r.passphrase),c=await Uc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Y4,algorithm:q_,subject:G_.REFRESH}),u=eL.hash(c),_=new G4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await F4(_)}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 q4.signalUserChange(new x4(process.pid)),new k4(o,c)}a(K4,"createTokens");async function tL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:$4,algorithm:q_,subject:G_.OPERATION})}a(tL,"signOperationToken");async function x_(){if(Hp===void 0)try{let e=Bp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pp.readFile(e)).toString(),n=(await Pp.readFile(t)).toString(),i=(await Pp.readFile(r)).toString();Hp=new V4(i,n,s)}catch(e){throw Dc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Hp}a(x_,"getJWTRSAKeys");async function W4(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 rL(e.refresh_token);let t=await x_(),r=await Uc.decode(e.refresh_token);return{operation_token:await tL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(W4,"refreshOperationToken");async function Q4(e){try{let t=await x_(),r=await Uc.verify(e,t.public_key,{algorithms:q_,subject:G_.OPERATION});return await Fp.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(Q4,"validateOperationToken");async function rL(e){let t;try{let r=await x_(),s=await Uc.verify(e,r.public_key,{algorithms:q_,subject:G_.REFRESH});t=await Fp.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(!eL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(rL,"validateRefreshToken")});var Gp=T((wue,oL)=>{"use strict";var z4=JC(),Ho=require("passport"),J4=require("passport-local").Strategy,X4=require("passport-http").BasicStrategy,j4=require("util"),Z4=xr(),iL=j4.callbackify(Z4.findAndValidateUser),Iue=dr(),e3=b(),nL=Mc();Ho.use(new J4(function(e,t,r){iL(e,t,r)}));Ho.use(new X4(function(e,t,r){iL(e,t,r)}));Ho.serializeUser(function(e,t){t(null,e)});Ho.deserializeUser(function(e,t){t(null,e)});function t3(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===e3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?nL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):nL.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(t3,"authorize");function r3(e,t){let r=z4(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(r3,"checkPermissions");oL.exports={authorize:t3,checkPermissions:r3}});var Fo=T((Lue,aL)=>{"use strict";var qp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},xp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};aL.exports={Node:qp,NodeSubscription:xp}});var uL=T((Uue,cL)=>{"use strict";var s3=b().OPERATIONS_ENUM,kp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=s3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};cL.exports=kp});var Pc=T((Pue,lL)=>{"use strict";var Vp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},$p=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)}};lL.exports={RemotePayloadObject:Vp,RemotePayloadSubscription:$p}});var dL=T((Bue,_L)=>{"use strict";var Yp=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}};_L.exports=Yp});var hL=T((xue,EL)=>{"use strict";var n3=dL(),Fue=ze(),fL=Ue(),i3=q(),{getSchemaPath:Gue,getTransactionAuditStorePath:que}=ve(),{getDatabases:o3}=(fe(),Z(Ce));EL.exports=a3;async function a3(e){let t=new n3;try{let r=o3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await fL.environmentDataSize(schema_path,e.name),o=await fL.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){i3.warn(`unable to stat table dbi due to ${r}`)}return t}a(a3,"lmdbGetTableSize")});var pL=T((Vue,mL)=>{"use strict";var Kp=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}};mL.exports=Kp});var Go=T((Wue,gL)=>{"use strict";var c3=require("fs-extra"),u3=require("path"),Gt=require("systeminformation"),Qn=q(),l3=dt(),Wp=ke(),V_=b(),_3=hL(),RL=Si(),{getThreadInfo:SL}=Ze(),sS=X();sS.initSync();var d3=pL(),{openEnvironment:Yue}=Ue(),{getSchemaPath:Kue}=ve(),{database:f3}=(fe(),Z(Ce)),k_;gL.exports={getHDBProcessInfo:Xp,getNetworkInfo:Zp,getDiskInfo:jp,getMemoryInfo:Jp,getCPUInfo:zp,getTimeInfo:Qp,getSystemInformation:eS,systemInformation:E3,getTableSize:tS,getMetrics:rS};function Qp(){return Gt.time()}a(Qp,"getTimeInfo");async function zp(){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:G,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(zp,"getCPUInfo");async function Jp(){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(Jp,"getMemoryInfo");async function Xp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await c3.readFile(u3.join(sS.get(V_.CONFIG_PARAMS.ROOTPATH),V_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===V_.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(Xp,"getHDBProcessInfo");async function jp(){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(jp,"getDiskInfo");async function Zp(){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(Zp,"getNetworkInfo");async function eS(){if(k_!==void 0)return k_;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,k_=e,k_}catch(t){return Qn.error(`error in getSystemInformation: ${t}`),e}}a(eS,"getSystemInformation");async function tS(){let e=[],t=await RL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await _3(s));return e}a(tS,"getTableSize");async function rS(){let e=await RL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=f3({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(rS,"getMetrics");async function TL(){if(sS.get(V_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await l3.getNATSReferences(),r=await t.streams.info(Wp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Wp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Wp.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(TL,"getNatsStreamInfo");async function E3(e){let t=new d3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eS(),t.time=Qp(),t.cpu=await zp(),t.memory=await Jp(),t.disk=await jp(),t.network=await Zp(),t.harperdb_processes=await Xp(),t.table_size=await tS(),t.metrics=await rS(),t.threads=await SL(),t.replication=await TL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eS();break;case"time":t.time=Qp();break;case"cpu":t.cpu=await zp();break;case"memory":t.memory=await Jp();break;case"disk":t.disk=await jp();break;case"network":t.network=await Zp();break;case"harperdb_processes":t.harperdb_processes=await Xp();break;case"table_size":t.table_size=await tS();break;case"database_metrics":case"metrics":t.metrics=await rS();break;case"threads":t.threads=await SL();break;case"replication":t.replication=await TL();break;default:break}return t}a(E3,"systemInformation")});var nS=T((zue,AL)=>{"use strict";AL.exports={version:h3,printVersion:m3};var $_=Rc();function h3(){if($_)return $_.version}a(h3,"version");function m3(){$_&&console.log(`HarperDB Version ${$_.version}`)}a(m3,"printVersion")});var ln=T((Zue,yL)=>{"use strict";var p3=qr(),iS=$(),S3=require("util"),Ui=b(),OL=X();OL.initSync();var T3=Gp(),NL=Gr(),{Node:Xue,NodeSubscription:jue}=Fo(),R3=No(),g3=uL(),{RemotePayloadObject:A3,RemotePayloadSubscription:O3}=Pc(),{handleHDBError:N3,hdb_errors:b3}=j(),{HTTP_STATUS_CODES:y3,HDB_ERROR_MSGS:I3}=b3,w3=vs(),C3=Go(),L3=nS(),{getDatabases:D3}=(fe(),Z(Ce)),U3=S3.promisify(T3.authorize),M3=NL.searchByHash,P3=NL.searchByValue;yL.exports={authHeaderToUser:v3,isEmpty:B3,getNodeRecord:H3,upsertNodeRecord:F3,buildNodePayloads:G3,checkClusteringEnabled:q3,getAllNodeRecords:x3,getSystemInfo:k3,reverseSubscription:bL};async function v3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await U3(t,null),e}a(v3,"authHeaderToUser");function B3(e){return e==null}a(B3,"isEmpty");async function H3(e){let t=new R3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return M3(t)}a(H3,"getNodeRecord");async function F3(e){let t=new g3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return p3.upsert(t)}a(F3,"upsertNodeRecord");function bL(e){if(iS.isEmpty(e.subscribe)||iS.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(bL,"reverseSubscription");function G3(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=iS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=bL(c),E=D3()[u]?.[_],h=new O3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new A3(r,t,n,s)}a(G3,"buildNodePayloads");function q3(){if(!OL.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw N3(new Error,I3.CLUSTERING_NOT_ENABLED,y3.BAD_REQUEST,void 0,void 0,!0)}a(q3,"checkClusteringEnabled");async function x3(){let e=new w3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await P3(e))}a(x3,"getAllNodeRecords");async function k3(){let e=await C3.getSystemInformation();return{hdb_version:L3.version(),node_version:e.node_version,platform:e.platform}}a(k3,"getSystemInfo")});var oS=T((tle,PL)=>{"use strict";var Y_=dt(),IL=$(),wL=ke(),CL=b(),K_=q(),LL=D_(),V3=wm(),{RemotePayloadObject:$3}=Pc(),{handleHDBError:DL,hdb_errors:Y3}=j(),{HTTP_STATUS_CODES:UL}=Y3,{NodeSubscription:ML}=Fo();PL.exports=K3;async function K3(e,t){let r;try{r=await Y_.request(`${t}.${wL.REQUEST_SUFFIX}`,new $3(CL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),K_.trace("Response from remote describe all request:",r)}catch(o){K_.error(`addNode received error from describe all request to remote node: ${o}`);let c=Y_.requestErrorHandler(o,"add_node",t);throw DL(new Error,c,UL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===wL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw DL(new Error,o,UL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===CL.SYSTEM_SCHEMA_NAME){await Y_.createLocalTableStream(c,u);let h=new ML(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=IL.doesSchemaExist(c),l=s[c]!==void 0,d=u?IL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(K_.trace(`addNode creating schema: ${c}`),await LL.createSchema({operation:"create_schema",schema:c})),!d&&f){K_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new V3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await LL.createTable(h)}await Y_.createLocalTableStream(c,u);let E=new ML(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(K3,"reviewSubscriptions")});var z_=T((sle,HL)=>{"use strict";var{handleHDBError:W_,hdb_errors:W3}=j(),{HTTP_STATUS_CODES:Q_}=W3,{addUpdateNodeValidator:Q3}=F_(),vc=q(),BL=b(),vL=ke(),z3=$(),aS=dt(),Bc=ln(),J3=X(),X3=oS(),{Node:j3,NodeSubscription:Z3}=Fo(),{broadcast:eX}=Ze(),tX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",sX=J3.get(BL.CONFIG_PARAMS.CLUSTERING_NODENAME);HL.exports=nX;async function nX(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=Q3(e);if(r)throw W_(r,r.message,Q_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Bc.getNodeRecord(s);if(!z3.isEmptyOrZeroLength(d))throw W_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Q_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await X3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=tX,o;let c=Bc.buildNodePayloads(n,sX,BL.OPERATIONS_ENUM.ADD_NODE,await Bc.getSystemInfo());vc.trace("addNode sending remote payload:",c);let u;try{u=await aS.request(`${s}.${vL.REQUEST_SUFFIX}`,c)}catch(d){vc.error(`addNode received error from request: ${d}`);let f=aS.requestErrorHandler(d,"add_node",s);throw W_(new Error,f,Q_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===vL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw W_(new Error,d,Q_.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 aS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Z3(E.schema,E.table,E.publish,E.subscribe))}let l=new j3(s,_,u.system_info);return await Bc.upsertNodeRecord(l),eX({type:"nats_update"}),i.length>0?o.message=rX:o.message=`Successfully added '${s}' to manifest`,o}a(nX,"addNode")});var uS=T((ile,qL)=>{"use strict";var{handleHDBError:J_,hdb_errors:iX}=j(),{HTTP_STATUS_CODES:X_}=iX,{addUpdateNodeValidator:oX}=F_(),Hc=q(),GL=b(),FL=ke(),aX=$(),cS=dt(),Fc=ln(),cX=X(),{cloneDeep:uX}=require("lodash"),lX=oS(),{NodeSubscription:_X}=Fo(),{broadcast:dX}=Ze(),fX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",EX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);qL.exports=mX;async function mX(e){Hc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=oX(e);if(t)throw J_(t,t.message,X_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=uX(await Fc.getNodeRecord(r));if(aX.isEmptyOrZeroLength(s))throw J_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await lX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=fX,o;let c=Fc.buildNodePayloads(n,hX,GL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());Hc.trace("updateNode sending remote payload:",c);let u;try{u=await cS.request(`${r}.${FL.REQUEST_SUFFIX}`,c)}catch(_){Hc.error(`updateNode received error from request: ${_}`);let l=cS.requestErrorHandler(_,"update_node",r);throw J_(new Error,l,X_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===FL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw J_(new Error,_,X_.INTERNAL_SERVER_ERROR,"error",_)}Hc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Hc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await cS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await pX(s[0],n,u.system_info),i.length>0?o.message=EX:o.message=`Successfully updated '${r}'`,o}a(mX,"updateNode");async function pX(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 _X(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),dX({type:"nats_update"})}a(pX,"updateNodeTable")});var YL=T((ale,$L)=>{"use strict";var VL=require("joi"),{string:xL}=VL.types(),SX=Ge(),kL=b(),TX=X(),RX=ke();$L.exports=gX;function gX(e){let t=xL.invalid(TX.get(kL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(RX.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=VL.object({operation:xL.valid(kL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return SX.validateBySchema(e,r)}a(gX,"removeNodeValidator")});var Z_=T((ule,XL)=>{"use strict";var{handleHDBError:KL,hdb_errors:AX}=j(),{HTTP_STATUS_CODES:WL}=AX,OX=YL(),Gc=q(),QL=ln(),NX=$(),j_=b(),zL=ke(),JL=dt(),bX=X(),{RemotePayloadObject:yX}=Pc(),{NodeSubscription:IX}=Fo(),wX=dc(),CX=Oi(),{broadcast:LX}=Ze(),DX=bX.get(j_.CONFIG_PARAMS.CLUSTERING_NODENAME);XL.exports=UX;async function UX(e){Gc.trace("removeNode called with:",e),QL.checkClusteringEnabled();let t=OX(e);if(t)throw KL(t,t.message,WL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await QL.getNodeRecord(r);if(NX.isEmptyOrZeroLength(s))throw KL(new Error,`Node '${r}' was not found.`,WL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new yX(j_.OPERATIONS_ENUM.REMOVE_NODE,DX,[]),i,o=!1;try{i=await JL.request(`${r}.${zL.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 IX(l.schema,l.table,!1,!1);await JL.updateWorkStream(d,r)}let c=new wX(j_.SYSTEM_SCHEMA_NAME,j_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CX.deleteRecord(c),LX({type:"nats_update"}),i?.status===zL.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(UX,"removeNode")});var eD=T((_le,ZL)=>{"use strict";var jL=require("joi"),{string:MX,array:PX}=jL.types(),vX=Ge(),BX=F_();ZL.exports=HX;function HX(e){let t=jL.object({operation:MX.valid("configure_cluster").required(),connections:PX.items(BX.validation_schema).required()});return vX.validateBySchema(e,t)}a(HX,"configureClusterValidator")});var lS=T((fle,iD)=>{"use strict";var FX=b(),ed=q(),GX=$(),qX=Z_(),xX=z_(),tD=ln(),kX=eD(),{handleHDBError:rD,hdb_errors:VX}=j(),{HTTP_STATUS_CODES:sD}=VX,$X="Configure cluster complete.",YX="Failed to configure the cluster. Check the logs for more details.",KX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";iD.exports=WX;async function WX(e){ed.trace("configure cluster called with:",e),tD.checkClusteringEnabled();let t=kX(e);if(t)throw rD(t,t.message,sD.BAD_REQUEST,void 0,void 0,!0);let r=await tD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(nD(qX,{operation:FX.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(nD(xX,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(GX.isEmptyOrZeroLength(u))return{message:$X,connections:_};if(l)return{message:KX,failed_nodes:u,connections:_};throw rD(new Error,YX,sD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WX,"configureCluster");async function nD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(nD,"functionWrapper")});var aD=T((hle,oD)=>{"use strict";var td=require("joi"),QX=Ge(),{validateSchemaExists:zX,validateTableExists:JX,validateSchemaName:XX}=Ds(),jX=td.object({operation:td.string().valid("purge_stream"),schema:td.string().custom(zX).custom(XX).required(),table:td.string().custom(JX).required()});function ZX(e){return QX.validateBySchema(e,jX)}a(ZX,"purgeStreamValidator");oD.exports=ZX});var _S=T((ple,cD)=>{"use strict";var{handleHDBError:ej,hdb_errors:tj}=j(),{HTTP_STATUS_CODES:rj}=tj,sj=aD(),nj=dt(),ij=ln();cD.exports=oj;async function oj(e){let t=sj(e);if(t)throw ej(t,t.message,rj.BAD_REQUEST,void 0,void 0,!0);ij.checkClusteringEnabled();let{schema:r,table:s}=e;return await nj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(oj,"purgeStream")});var ES=T((Tle,ED)=>{"use strict";var fS=ln(),aj=dt(),_D=X(),rd=b(),Mi=ke(),cj=$(),dS=q(),{RemotePayloadObject:uj}=Pc(),{ErrorCode:uD}=require("nats"),lD=_D.get(rd.CONFIG_PARAMS.CLUSTERING_ENABLED),dD=_D.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);ED.exports={clusterStatus:lj,buildNodeStatus:fD};async function lj(){let e={node_name:dD,is_enabled:lD,connections:[]};if(!lD)return e;let t=await fS.getAllNodeRecords();if(cj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(fD(t[s],e.connections));return await Promise.allSettled(r),e}a(lj,"clusterStatus");async function fD(e,t){let r=e.name,s=new uj(rd.OPERATIONS_ENUM.CLUSTER_STATUS,dD,void 0,await fS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await aj.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,dS.error(`Error getting node status from ${r} `,n))}catch(u){dS.warn(`Error getting node status from ${r}`,u),u.code===uD.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===uD.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _j(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 fS.upsertNodeRecord(u)}catch(u){dS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(fD,"buildNodeStatus");function _j(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(_j,"NodeStatusObject")});var mS=T((gle,hD)=>{"use strict";var{handleHDBError:dj,hdb_errors:fj}=j(),{HTTP_STATUS_CODES:Ej}=fj,hj=dt(),mj=ln(),hS=$(),sd=require("joi"),pj=Ge(),Sj=2e3,Tj=sd.object({timeout:sd.number().min(1),connected_nodes:sd.boolean(),routes:sd.boolean()});hD.exports=Rj;async function Rj(e){mj.checkClusteringEnabled();let t=pj.validateBySchema(e,Tj);if(t)throw dj(t,t.message,Ej.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||hS.autoCastBoolean(s),o=n===void 0||hS.autoCastBoolean(n),c={nodes:[]},u=await hj.getServerList(r??Sj),_={};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:hS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Rj,"clusterNetwork")});var TD=T((Ole,SD)=>{"use strict";var pS=require("joi"),mD=Ge(),{route_constraints:pD}=hE();SD.exports={setRoutesValidator:gj,deleteRoutesValidator:Aj};function gj(e){let t=pS.object({server:pS.valid("hub","leaf").required(),routes:pD.required()});return mD.validateBySchema(e,t)}a(gj,"setRoutesValidator");function Aj(e){let t=pS.object({routes:pD.required()});return mD.validateBySchema(e,t)}a(Aj,"deleteRoutesValidator")});var TS=T((ble,OD)=>{"use strict";var Pi=hr(),SS=$(),nd=b(),RD=TD(),{handleHDBError:gD,hdb_errors:Oj}=j(),{HTTP_STATUS_CODES:AD}=Oj,Nj="cluster routes successfully set",bj="cluster routes successfully deleted";OD.exports={setRoutes:yj,getRoutes:Ij,deleteRoutes:wj};function yj(e){let t=RD.setRoutesValidator(e);if(t)throw gD(t,t.message,AD.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=SS.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(nd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(nd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Nj,set:o,skipped:i}}a(yj,"setRoutes");function Ij(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Ij,"getRoutes");function wj(e){let t=RD.deleteRoutesValidator(e);if(t)throw gD(t,t.message,AD.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=SS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(nd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(nd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:bj,deleted:i,skipped:o}}a(wj,"deleteRoutes")});var bD=T((Ile,ND)=>{"use strict";var qc=require("alasql"),vi=require("recursive-iterator"),Ts=q(),Cj=$(),xc=b(),RS=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,Dj(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=>xc.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=>!xc.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][xc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Lj(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(_=>!xc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qc.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 Lj(e){return e.filter(t=>t[xc.PERMS_CRUD_ENUM.READ])}a(Lj,"filterReadRestrictedAttrs");function Dj(e,t,r,s,n){Uj(e,t,r,s,n)}a(Dj,"interpretAST");function kc(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(kc,"addSchemaTableToMap");function Uj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qc.yy.Insert?Bj(e,t,r):e instanceof qc.yy.Select?Mj(e,t,r,s,n):e instanceof qc.yy.Update?Pj(e,t,r):e instanceof qc.yy.Delete?vj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Uj,"getRecordAttributesAST");function Mj(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(Cj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{kc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),kc(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(Mj,"getSelectAttributes");function Pj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;kc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&gS(e.table.tableid,n,i.columnid,t,r)}a(Pj,"getUpdateAttributes");function vj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;kc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&gS(e.table.tableid,n,i.columnid,t,r)}a(vj,"getDeleteAttributes");function Bj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;kc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&gS(e.into.tableid,n,i.columnid,t,r)}a(Bj,"getInsertAttributes");function gS(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(gS,"pushAttribute");ND.exports=RS});var NS=T((Cle,CD)=>{var id=rc(),yD=require("chalk"),br=q(),ID=require("prompt"),{promisify:Hj}=require("util"),AS=b(),Fj=require("fs-extra"),Gj=require("path"),qj=$(),xj=nS(),wD=X();wD.initSync();var kj=require("moment"),Vj=Hj(ID.get),$j=Gj.join(wD.getHdbBasePath(),AS.LICENSE_KEY_DIR_NAME,AS.LICENSE_FILE_NAME,AS.LICENSE_FILE_NAME);CD.exports={getFingerprint:Kj,setLicense:Yj,parseLicense:OS,register:Wj,getRegistrationInfo:zj};async function Yj(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await OS(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(Yj,"setLicense");async function Kj(){let e={};try{e=await id.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(Kj,"getFingerprint");async function OS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=id.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 Fj.writeFile($j,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(OS,"parseLicense");async function Wj(){let e=await Qj();return OS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Wj,"register");async function Qj(){let e=await id.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:yD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:yD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{ID.start()}catch(s){br.error(s)}let r;try{r=await Vj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Qj,"promptForRegistration");async function zj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await id.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(qj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=xj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=kj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(zj,"getRegistrationInfo")});var DD=T((Dle,LD)=>{"use strict";var Jj=ke(),bS=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"}};LD.exports=bS});var PD=T((Mle,MD)=>{"use strict";var UD=ke(),yS=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+UD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+UD.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"}};MD.exports=yS});var BD=T((vle,vD)=>{"use strict";var IS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};vD.exports=IS});var FD=T((Hle,HD)=>{"use strict";var Xj=ke(),wS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Xj.SERVER_SUFFIX.ADMIN,this.password=r}};HD.exports=wS});var DS=T((Gle,xD)=>{"use strict";var qo=require("path"),cd=require("fs-extra"),jj=DD(),Zj=PD(),eZ=BD(),tZ=FD(),CS=xr(),ko=$(),sr=hr(),ad=b(),Vc=ke(),{CONFIG_PARAMS:je}=ad,$c=q(),Yc=X(),GD=nn(),LS=dt(),xo="clustering",rZ=1e4,qD=5;xD.exports={generateNatsConfig:nZ,removeNatsConfig:iZ,getHubConfigPath:sZ};function sZ(){let e=Yc.get(je.ROOTPATH);return qo.join(e,xo,Vc.NATS_CONFIG_FILES.HUB_SERVER)}a(sZ,"getHubConfigPath");async function nZ(e=!1,t=void 0){Yc.initSync();let r=Yc.get(je.ROOTPATH),s=qo.join(r,xo,Vc.PID_FILES.HUB),n=qo.join(r,xo,Vc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qo.join(r,xo,Vc.NATS_CONFIG_FILES.HUB_SERVER),c=qo.join(r,xo,Vc.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 LS.checkNATSServerInstalled()||ud("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await CS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await CS.getClusterUser();(ko.isEmpty(A)||A.active!==!0)&&ud(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await od(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await od(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await od(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await od(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===ad.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new tZ(te.username,GD.decrypt(te.hash))),N.push(new eZ(te.username,GD.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 G=new jj(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 G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ad.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await cd.writeJson(o,G),$c.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 Zj(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===ad.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await cd.writeJson(c,B),$c.trace(`Leaf server config written to ${c}`))}a(nZ,"generateNatsConfig");async function od(e){let t=Yc.get(e);return ko.isEmpty(t)&&ud(`port undefined for '${e}'`),await ko.isPortTaken(t)&&ud(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(od,"isPortAvailable");function ud(e){let t=`Error generating clustering config: ${e}`;$c.error(t),console.error(t),process.exit(1)}a(ud,"generateNatsConfigError");async function iZ(e){let{port:t,config_file:r}=LS.getServerConfig(e),{username:s,decrypt_hash:n}=await CS.getClusterUser(),i=0,o=2e3;for(;i<qD;){try{let _=await LS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=qD)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(rZ),u=qo.join(Yc.get(je.ROOTPATH),xo,r);await cd.writeFile(u,c),await cd.remove(u),$c.notify(e,"started.")}a(iZ,"removeNatsConfig")});var fd=T((xle,QD)=>{"use strict";var oZ=require("minimist"),{isMainThread:PS,parentPort:$D}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Kc}=Ve,Gs=q(),vS=$(),ld=DS(),Vo=dt(),US=ke(),YD=hr(),qs=HS(),kD=Go(),aZ=nE(),{restartWorkers:_d,onMessageByType:cZ}=Ze(),{handleHDBError:uZ,hdb_errors:lZ}=j(),{HTTP_STATUS_CODES:_Z}=lZ,dd=X();dd.initSync();var Wc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,dZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",VD="Clustering is not enabled so cannot be restarted",fZ="Invalid service",$o,Yr;QD.exports={restart:KD,restartService:BS};PS&&cZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?BS({service:e.workerType}):KD({operation:"restart"})});async function KD(e){Yr=Object.keys(e).length===0,$o=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=oZ(process.argv);if(t.service){await BS(t);return}if(Yr&&!$o){console.error(dZ);return}if(Yr&&console.log(Wc),$o){qs.enterPM2Mode(),Gs.notify(Wc);let r=aZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return vS.isEmptyOrZeroLength(Object.keys(r))||YD.updateConfigValue(void 0,void 0,r,!0,!0),hZ(),Wc}return PS?(Gs.notify(Wc),setTimeout(()=>{_d()},50)):$D.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Wc}a(KD,"restart");async function BS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw uZ(new Error,fZ,_Z.BAD_REQUEST,void 0,void 0,!0);if($o=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!PS)return $D.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Kc.clustering:if(!dd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VD;break}Yr&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await WD();break;case Kc.clustering_config:case Kc["clustering config"]:if(!dd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=VD;break}Yr&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await qs.reloadClustering();break;case"custom_functions":case"custom functions":case Kc.harperdb:case Kc.http_workers:if(Yr&&!$o){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"),Gs.notify("Restarting http_workers"),Yr?await qs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{_d("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(BS,"restartService");async function EZ(){await Vo.publishToStream(`${US.SUBJECT_PREFIXES.TXN}.${US.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,US.WORK_QUEUE_CONSUMER_NAMES.stream_name,Vo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(EZ,"postDummyNatsMsg");async function hZ(){await WD(),await qs.restart(Ve.HDB_PROC_DESCRIPTOR),await vS.async_set_timeout(2e3),dd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await MS(),Yr&&(await Vo.closeConnection(),process.exit(0))}a(hZ,"restartPM2Mode");async function WD(){if(!YD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await kD.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await ld.generateNatsConfig(!0),await qs.startClusteringProcesses(),await qs.startClusteringThreads(),await MS(),Yr&&await Vo.closeConnection();else{await EZ(),await ld.generateNatsConfig(!0),$o?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await kD.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await vS.async_set_timeout(3e3),await MS(),await Vo.updateLocalStreams(),Yr&&await Vo.closeConnection(),Gs.trace("Restart clustering restarting ingest and reply service threads");let t=_d(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=_d(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(WD,"restartClustering");async function MS(){await ld.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ld.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(MS,"removeNatsConfig")});var iU=T(($le,nU)=>{"use strict";var Vle=require("lodash"),nr=b(),{handleHDBError:zD,hdb_errors:mZ}=j(),{HDB_ERROR_MSGS:pZ,HTTP_STATUS_CODES:SZ}=mZ,FS=q();nU.exports={getRolePermissions:RZ};var Bi=Object.create(null),TZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),ZD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),eU=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),GS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...eU(t,r,s,n)}),"table_perms_template"),JD=a((e,t=eU())=>({attribute_name:e,describe:sU(t),[Qc]:t[Qc],[qS]:t[qS],[xS]:t[xS]}),"attr_perms_template"),XD=a((e,t=!1)=>({attribute_name:e,describe:t,[Qc]:t}),"timestamp_attr_perms_template"),{READ:Qc,INSERT:qS,UPDATE:xS}=nr.PERMS_CRUD_ENUM,tU=Object.values(nr.PERMS_CRUD_ENUM),rU=[Qc,qS,xS];function RZ(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[nr.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=gZ(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=TZ(s),Bi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.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 FS.error(s),FS.debug(r),zD(new Error,pZ.OUTDATED_PERMS_TRANSLATION_ERROR,SZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw FS.error(s),zD(new Error)}}}a(RZ,"getRolePermissions");function gZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.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]=AZ(t[i]);return}r[i]=ZD(),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],_=OZ(c,u);r[i].describe||tU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=GS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=GS()})}),r}a(gZ,"translateRolePermissions");function AZ(e){let t=ZD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=GS(!0,!0,!0,!0,!0)}),t}a(AZ,"createStructureUserPermissions");function OZ(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 nr.TIME_STAMP_NAMES.includes(d)&&(f=XD(d,l[Qc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=JD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=sU(l),n.attribute_permissions.push(l),c||NZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=XD(_):l=JD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=jD(n),n}else return e.describe=jD(e),e}a(OZ,"getTableAttrPerms");function jD(e){return tU.filter(t=>e[t]).length>0}a(jD,"getSchemaTableDescribePerm");function sU(e){return rU.filter(t=>e[t]).length>0}a(sU,"getAttributeDescribePerm");function NZ(e,t){rU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(NZ,"checkForHashPerms")});var oU={};Qe(oU,{Resources:()=>Ed,keyArrayToString:()=>Yo,resetResources:()=>bZ,resources:()=>zn});function bZ(){return zn=new Ed}function Yo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ed,zn,zc=Te(()=>{fi();Ed=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 qe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(bZ,"resetResources");a(Yo,"keyArrayToString")});var Hi,kS=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 Jc={};Qe(Jc,{authentication:()=>EU,bypassAuth:()=>UZ,login:()=>PZ,logout:()=>vZ,start:()=>MZ});function UZ(){fU=!0}async function EU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?CZ?wZ:[]:IZ?yZ:[];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 hd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),hd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(hd){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 pd.AuthAuditLog(E,h,It.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===It.AUTH_AUDIT_STATUS.SUCCESS?aU.notify(S):aU.error(S)},"authAuditLog"),d;if(s){if(d=Fi.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,md.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,md.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return DZ&&(Fi.get(h)||(Fi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Jn({error:A.message},e)})}Fi.set(s,d),LZ&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):fU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,lU.getSuperUser)());hd&&(e.session.update=function(E){if(!u){u=(0,_U.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,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")&&zn.loginPath?(f.status=302,f.headers.set("Location",zn.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 MZ({server:e,port:t}){e.request(EU,{port:t||"all"}),uU||(uU=!0,setInterval(()=>{Fi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),dU.user.addListener(()=>{Fi=new Map}))}async function PZ(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 vZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var lU,md,_U,Kr,It,pd,dU,aU,yZ,IZ,wZ,CZ,cU,hd,fU,LZ,DZ,Fi,uU,Sd=Te(()=>{lU=D(xr());Mr();zc();md=D(Mc());fe();_U=require("uuid"),Kr=D(X()),It=D(b()),pd=D(q()),dU=D(nc());kS();Ko();aU=(0,pd.loggerWithTag)("auth-event");Kr.initSync();yZ=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),IZ=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),wZ=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),CZ=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),cU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),hd=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,fU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,LZ=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,DZ=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Fi=new Map;ut.onInvalidatedUser(()=>{Fi=new Map});a(UZ,"bypassAuth");a(EU,"authentication");a(MZ,"start");a(PZ,"login");a(vZ,"logout")});var gU=T((r_e,RU)=>{"use strict";var pe=require("joi"),hU=require("fs-extra"),mU=require("path"),dn=Ge(),pU=X(),SU=b(),TU=q(),{hdb_errors:BZ}=j(),{HDB_ERROR_MSGS:qt}=BZ,_n=/^[a-zA-Z0-9-_]+$/;RU.exports={getDropCustomFunctionValidator:FZ,setCustomFunctionValidator:GZ,addComponentValidator:VZ,dropCustomFunctionProjectValidator:$Z,packageComponentValidator:YZ,deployComponentValidator:KZ,setComponentFileValidator:qZ,getComponentFileValidator:kZ,dropComponentFileValidator:xZ};function Td(e,t,r){try{let s=pU.get(SU.CONFIG_PARAMS.COMPONENTSROOT),n=mU.join(s,t);return hU.existsSync(n)?e?t:r.message(qt.PROJECT_EXISTS):e?r.message(qt.NO_PROJECT):t}catch(s){return TU.error(s),r.message(qt.VALIDATION_ERR)}}a(Td,"checkProjectExists");function Xc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Xc,"checkFilePath");function HZ(e,t,r,s){try{let n=pU.get(SU.CONFIG_PARAMS.COMPONENTSROOT),i=mU.join(n,e,t,r+".js");return hU.existsSync(i)?r:s.message(qt.NO_FILE)}catch(n){return TU.error(n),s.message(qt.VALIDATION_ERR)}}a(HZ,"checkFileExists");function FZ(e){let t=pe.object({project:pe.string().pattern(_n).custom(Td.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(_n).custom(HZ.bind(null,e.project,e.type)).custom(Xc).required().messages({"string.pattern.base":qt.BAD_FILE_NAME})});return dn.validateBySchema(e,t)}a(FZ,"getDropCustomFunctionValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(_n).custom(Td.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Xc).required(),function_content:pe.string().required()});return dn.validateBySchema(e,t)}a(GZ,"setCustomFunctionValidator");function qZ(e){let t=pe.object({project:pe.string().pattern(_n).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),file:pe.string().custom(Xc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return dn.validateBySchema(e,t)}a(qZ,"setComponentFileValidator");function xZ(e){let t=pe.object({project:pe.string().pattern(_n).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),file:pe.string().custom(Xc).optional()});return dn.validateBySchema(e,t)}a(xZ,"dropComponentFileValidator");function kZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Xc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return dn.validateBySchema(e,t)}a(kZ,"getComponentFileValidator");function VZ(e){let t=pe.object({project:pe.string().pattern(_n).custom(Td.bind(null,!1)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME})});return dn.validateBySchema(e,t)}a(VZ,"addComponentValidator");function $Z(e){let t=pe.object({project:pe.string().pattern(_n).custom(Td.bind(null,!0)).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME})});return dn.validateBySchema(e,t)}a($Z,"dropCustomFunctionProjectValidator");function YZ(e){let t=pe.object({project:pe.string().pattern(_n).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return dn.validateBySchema(e,t)}a(YZ,"packageComponentValidator");function KZ(e){let t=pe.object({project:pe.string().pattern(_n).required().messages({"string.pattern.base":qt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":qt.BAD_PACKAGE}),package:pe.string().optional()});return dn.validateBySchema(e,t)}a(KZ,"deployComponentValidator")});var Od=T((n_e,wU)=>{"use strict";var Rd=require("joi"),gd=require("path"),AU=require("fs-extra"),{exec:WZ}=require("child_process"),QZ=require("util"),OU=QZ.promisify(WZ),jc=b(),{handleHDBError:Wo,hdb_errors:zZ}=j(),{HTTP_STATUS_CODES:Qo}=zZ,Zc=X(),JZ=Ge(),zo=q();Zc.initSync();var VS=Zc.get(jc.CONFIG_PARAMS.COMPONENTSROOT),NU="npm install --omit=dev --json",XZ=`${NU} --dry-run`;wU.exports={installModules:t5,auditModules:r5,installAllRootModules:jZ,uninstallRootModule:ZZ,linkHarperdb:e5};async function jZ(e=!1){await Ad(),await eu(e?"npm install --ignore-scripts":"npm install",Zc.get(jc.CONFIG_PARAMS.ROOTPATH))}a(jZ,"installAllRootModules");async function ZZ(e){await eu(`npm uninstall ${e}`,Zc.get(jc.CONFIG_PARAMS.ROOTPATH))}a(ZZ,"uninstallRootModule");async function e5(){await Ad(),await eu(`npm link ${jc.PACKAGE_ROOT}`,Zc.get(jc.CONFIG_PARAMS.ROOTPATH))}a(e5,"linkHarperdb");async function eu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await OU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
+
`,""))}return s&&!s.includes("Debugger listening")&&zo.error("Error running NPM command:",e,s),zo.trace(r,s),r.replace(`
|
|
13
|
+
`,"")}a(eu,"runCommand");async function t5(e){zo.info(`starting installModules for request: ${e}`);let t=IU(e);if(t)throw Wo(t,t.message,Qo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?XZ:NU;await Ad(),await yU(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 _=gd.join(VS,u),l,d=null;try{let{stdout:f,stderr:E}=await OU(n,{cwd:_});l=f?f.replace(`
|
|
14
14
|
`,""):null,d=E?E.replace(`
|
|
15
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=
|
|
16
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(yU,"parseNPMStdErr");async function s5(e){Qo.info(`starting auditModules for request: ${e}`);let t=wU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r}=e;await gd(),await IU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Rd.join($S,o);s[o]={npm_output:null,npm_error:null};try{let u=await Zc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=yU(u.stderr)}}return Qo.info(`finished auditModules with response ${s}`),s}a(s5,"auditModules");async function gd(){try{return await Zc("npm -v"),!0}catch{throw Ko(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wo.BAD_REQUEST,void 0,void 0,!0)}}a(gd,"checkNPMInstalled");async function IU(e){if(!Array.isArray(e)||e.length===0)throw Ko(new Error,"projects argument must be an array with at least 1 element",Wo.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=Rd.join($S,i.toString());if(!await OU.pathExists(o)){t.push(i);continue}let u=Rd.join(o,"package.json");await OU.pathExists(u)||r.push(i)}if(t.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wo.BAD_REQUEST,void 0,void 0,!0)}a(IU,"checkProjectPaths");function wU(e){let t=Td.object({projects:Td.array().min(1).items(Td.string()).required(),dry_run:Td.boolean().default(!1)});return XZ.validateBySchema(e,t)}a(wU,"modulesValidator")});var KS=T((a_e,PU)=>{"use strict";var zo=require("fs-extra"),YS=require("path"),Od=G(),LU=$(),Nd=b(),MU=X(),n5=hr();PU.exports=i5;async function i5(){let e=o5(),t=MU.get(Nd.CONFIG_PARAMS.ROOTPATH),r=YS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Nd.PACKAGE_ROOT}},n=YS.join(t,"node_modules");await zo.ensureDir(n);let i,o=!0,c=!1;try{i=await zo.readJson(r)}catch(u){if(LU.isEmptyOrZeroLength(e))return;if(u.code!==Nd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!LU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await DU(_);s.dependencies[u]=l+_}if(!o){Od.notify("Installing components"),await UU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await DU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Od.notify("Removing component",u),c=!0);c&&(Od.notify("Updating components."),await UU(r,s,i))}a(i5,"installComponents");function o5(){let e=n5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(o5,"getComponentsConfig");async function DU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":YS.extname(e)||await zo.pathExists(e)?"file:":"github:"}a(DU,"getPkgPrefix");async function UU(e,t,r){Od.trace("npm installing components package.json",t),await zo.writeFile(e,JSON.stringify(t,null," "));try{await Ad().installAllRootModules(MU.get(Nd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await zo.writeFile(e,JSON.stringify(r,null," ")):await zo.unlink(e),s}}a(UU,"installPackages")});var zS=T((l_e,FU)=>{"use strict";var Le=require("fs-extra"),WS=require("fast-glob"),le=require("path"),BU=require("tar-fs"),u_e=require("uuid").v4,QS=require("normalize-path"),xs=AU(),St=G(),Me=b(),nt=X(),eu=hr(),a5=$(),{PACKAGE_ROOT:c5}=b(),{handleHDBError:Tt,hdb_errors:u5}=j(),{basename:l5}=require("path"),_5=KS(),HU=X(),d5=b(),{Readable:f5}=require("stream"),{isMainThread:E5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Rt}=u5,h5=le.join(c5,"application-template"),vU=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function m5(){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(m5,"customFunctionsStatus");function p5(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${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(p5,"getCustomFunctions");function S5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.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(S5,"getCustomFunction");function T5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.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(T5,"setCustomFunction");function R5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.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(R5,"dropCustomFunction");function g5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.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(h5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Fi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(g5,"addComponent");function A5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.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(!a5.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 eu.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(A5,"dropCustomFunctionProject");async function O5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.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(vU);let i=le.join(vU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),BU.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(O5,"packageComponent");async function N5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.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=f5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(BU.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 eu.addConfig(s,{package:i}),!n){await _5();let f=HU.get(d5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(E5)return;let c=new Map;c.isWorker=!0;let u=(yd(),Z(bd)),_;u.setErrorReporter(f=>_=f);let l=l5(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(N5,"deployComponent");async function b5(){let e=eu.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=(yd(),Z(bd)).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(b5,"getComponents");async function y5(e){let t=xs.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=eu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(HU.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(y5,"getComponentFile");async function I5(e){let t=xs.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(I5,"setComponentFile");async function w5(e){let t=xs.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),eu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(w5,"dropComponent");FU.exports={customFunctionsStatus:m5,getCustomFunctions:p5,getCustomFunction:S5,setCustomFunction:T5,dropCustomFunction:R5,addComponent:g5,dropCustomFunctionProject:A5,packageComponent:O5,deployComponent:N5,getComponents:b5,getComponentFile:y5,setComponentFile:I5,dropComponent:w5}});var JS=T((d_e,GU)=>{"use strict";var ks=require("joi"),qU=qe();GU.exports={readTransactionLogValidator:C5,deleteTransactionLogsBeforeValidator:L5};function C5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return qU.validateBySchema(e,t)}a(C5,"readTransactionLogValidator");function L5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return qU.validateBySchema(e,t)}a(L5,"deleteTransactionLogsBeforeValidator")});var wd=T((E_e,YU)=>{"use strict";var XS=b(),Id=dt(),xU=$(),kU=X(),VU=nn(),{handleHDBError:Jo,hdb_errors:D5}=j(),{HTTP_STATUS_CODES:Xo}=D5,{readTransactionLogValidator:U5,deleteTransactionLogsBeforeValidator:M5}=JS(),$U="This operation relies on clustering and cannot run with it disable.",P5="Logs successfully deleted from transaction log.",v5="All logs successfully deleted from transaction log.";YU.exports={readTransactionLog:B5,deleteTransactionLogsBefore:H5};async function*B5(e){let t=U5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xU.checkSchemaTableExist(r,s);if(n)throw Jo(new Error,n,Xo.NOT_FOUND,void 0,void 0,!0);let i=VU.createNatsTableStreamName(r,s),o=await Id.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===XS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(B5,"readTransactionLog");async function H5(e){let t=M5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xU.checkSchemaTableExist(r,s);if(i)throw Jo(new Error,i,Xo.NOT_FOUND,void 0,void 0,!0);let o=VU.createNatsTableStreamName(r,s),{jsm:c}=await Id.getNATSReferences(),u=await Id.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=P5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=v5):d=(await Id.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(H5,"deleteTransactionLogsBefore")});var WU=T((m_e,KU)=>{"use strict";var jS=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}};KU.exports=jS});var zU=T((S_e,QU)=>{"use strict";var ZS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};QU.exports=ZS});var tT=T((R_e,XU)=>{"use strict";var JU=WU(),F5=zU(),{HDB_ERROR_MSGS:q5}=dr(),eT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=q5.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 JU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new F5(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 JU(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}};XU.exports=eT});var Ud=T((A_e,fM)=>{"use strict";var rT=Gr(),Cd=qr(),Qr=L_(),su=pi(),sT=Ai(),G5=pp(),x5=CC(),nu=xr(),Ld=yp(),ft=G(),k5=Cp(),V5=Q_(),$5=lS(),Y5=j_(),K5=_S(),W5=dS(),Q5=hS(),z5=pS(),nT=RS(),dn=$(),J5=yD(),iT=bS(),eM=dd(),Wr=b(),tM=oU(),X5=Fo(),rM=Uc(),sM=(pd(),Z(zc)),nM=hr(),yr=zS(),j5=require("alasql"),iM=wd(),oM=Ad(),aM=tT(),{handleHDBError:ir,hdb_errors:cM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:tu}=cM,v=new Map,uM="delete",Jn="insert",fn="read",qi="update",ru="describe",jU=su.describeSchema.name,ZU=su.describeTable.name,lM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Z5="catchup",e8="handleGetJob",t8="handleGetJobsByStartDate",Dd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},r8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],_M={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(rT.insert.name,new F(!1,[Jn]));v.set(rT.update.name,new F(!1,[qi]));v.set(rT.upsert.name,new F(!1,[Jn,qi]));v.set(Cd.searchByConditions.name,new F(!1,[fn]));v.set(Cd.searchByHash.name,new F(!1,[fn]));v.set(Cd.searchByValue.name,new F(!1,[fn]));v.set(Cd.search.name,new F(!1,[fn]));v.set(Qr.createSchema.name,new F(!0,[]));v.set(Qr.createTable.name,new F(!0,[]));v.set(Qr.createAttribute.name,new F(!1,[Jn]));v.set(Qr.dropSchema.name,new F(!0,[]));v.set(Qr.dropTable.name,new F(!0,[]));v.set(Qr.dropAttribute.name,new F(!0,[]));v.set(su.describeSchema.name,new F(!1,[fn]));v.set(su.describeTable.name,new F(!1,[fn]));v.set(sT.deleteRecord.name,new F(!1,[uM]));v.set(nu.addUser.name,new F(!0,[]));v.set(nu.alterUser.name,new F(!0,[]));v.set(nu.dropUser.name,new F(!0,[]));v.set(nu.listUsersExternal.name,new F(!0,[]));v.set(Ld.listRoles.name,new F(!0,[]));v.set(Ld.addRole.name,new F(!0,[]));v.set(Ld.alterRole.name,new F(!0,[]));v.set(Ld.dropRole.name,new F(!0,[]));v.set(k5.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set($5.name,new F(!0,[]));v.set(Y5.name,new F(!0,[]));v.set(K5.name,new F(!0,[]));v.set(W5.name,new F(!0,[]));v.set(nT.setRoutes.name,new F(!0,[]));v.set(nT.getRoutes.name,new F(!0,[]));v.set(nT.deleteRoutes.name,new F(!0,[]));v.set(nM.setConfiguration.name,new F(!0,[]));v.set(Q5.clusterStatus.name,new F(!0,[]));v.set(z5.name,new F(!0,[]));v.set(iT.getFingerprint.name,new F(!0,[]));v.set(iT.setLicense.name,new F(!0,[]));v.set(sT.deleteFilesBefore.name,new F(!0,[]));v.set(sT.deleteAuditLogsBefore.name,new F(!0,[]));v.set(eM.restart.name,new F(!0,[]));v.set(eM.restartService.name,new F(!0,[]));v.set(G5.name,new F(!0,[]));v.set(x5.name,new F(!0,[fn]));v.set(X5.systemInformation.name,new F(!0,[]));v.set(nM.getConfiguration.name,new F(!0,[]));v.set(iM.readTransactionLog.name,new F(!0,[]));v.set(iM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(oM.installModules.name,new F(!0,[]));v.set(oM.auditModules.name,new F(!0,[]));v.set(rM.createTokens.name,new F(!1,[]));v.set(rM.refreshOperationToken.name,new F(!1,[]));v.set(sM.login.name,new F(!1,[]));v.set(sM.logout.name,new F(!1,[]));v.set(yr.customFunctionsStatus.name,new F(!0,[]));v.set(yr.getCustomFunctions.name,new F(!0,[]));v.set(yr.getComponents.name,new F(!0,[]));v.set(yr.getComponentFile.name,new F(!0,[]));v.set(yr.setComponentFile.name,new F(!0,[]));v.set(yr.dropComponent.name,new F(!0,[]));v.set(yr.getCustomFunction.name,new F(!0,[]));v.set(yr.setCustomFunction.name,new F(!0,[]));v.set(yr.dropCustomFunction.name,new F(!0,[]));v.set(yr.addComponent.name,new F(!0,[]));v.set(yr.dropCustomFunctionProject.name,new F(!0,[]));v.set(yr.packageComponent.name,new F(!0,[]));v.set(yr.deployComponent.name,new F(!0,[]));v.set(iT.getRegistrationInfo.name,new F(!1,[]));v.set(nu.userInfo.name,new F(!1,[]));v.set(su.describeAll.name,new F(!1,[]));v.set(e8,new F(!1,[]));v.set(t8,new F(!0,[]));v.set(Z5,new F(!0,[]));v.set(Dd.CSV_DATA_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_URL_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_FILE_LOAD,new F(!1,[Jn,qi]));v.set(Dd.IMPORT_FROM_S3,new F(!1,[Jn,qi]));v.set(_M.EXPORT_TO_S3,new F(!0,[]));v.set(_M.EXPORT_LOCAL,new F(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[uM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[fn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Jn]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));fM.exports={verifyPerms:n8,verifyPermsAst:s8,verifyBulkLoadAttributePerms:o8};function s8(e,t,r){if(dn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new aM,n=new J5(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."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&lM[r])throw ir(new Error,wt.DROP_SYSTEM,tu.FORBIDDEN);if(c&&!u)return null;let _=tM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof j5.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=dM(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=aT(t.role.permission,f,d[E]);oT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(s8,"verifyPermsAst");function n8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),ir(new Error,wt.DEFAULT_INVALID_REQUEST,tu.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 aM;if(dn.isEmptyOrZeroLength(e.hdb_user.role)||dn.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(wt.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 ir(new Error,wt.DROP_SYSTEM,tu.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(r8.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=tM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===jU||r===ZU){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===jU&&(!d[n]||!d[n][ru]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===ZU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ru]))return c.handleInvalidItem(wt.TABLE_NOT_FOUND(n,i))}}let f=dM(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=i8(e),h=aT(e.hdb_user.role.permission,n,i);return oT(E,h,r,i,n,c,s),c.getPermsResponse()}a(n8,"verifyPerms");function dM(e,t,r,s,n){if(dn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),ir(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.`),ir(new Error,wt.OP_NOT_FOUND(t),tu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ru]===!1){s.addInvalidItem(wt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ru]===!1)s.addInvalidItem(wt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!dn.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=wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),ir(cM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(dM,"hasPermissions");function oT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(dn.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[ru]===!1){i.addInvalidItem(wt.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!==fn)throw ir(new Error,wt.SYSTEM_TIMESTAMP_PERMS_ERR,tu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(wt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(oT,"checkAttributePerms");function i8(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(i8,"getRecordAttributes");function aT(e,t,r){let s=new Map;if(dn.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(aT,"getAttributePermissions");function o8(e,t,r,s,n,i,o){let c=new Set(i),u=aT(e,s,n);oT(c,u,t,n,s,o,r)}a(o8,"verifyBulkLoadAttributePerms")});var Pd=T((N_e,SM)=>{"use strict";SM.exports={evaluateSQL:T8,processAST:pM,convertSQLToAST:mM,checkASTPermissions:hM};var a8=Gr(),EM=require("util"),c8=EM.callbackify(a8.insert),u8=qr().search,l8=Aw().update,_8=EM.callbackify(l8),d8=Nw().convertDelete,Xn=require("alasql"),f8=Ud(),Md=G(),E8=m_(),h8=$(),iu=b(),{hdb_errors:m8,handleHDBError:cT}=j(),{HTTP_STATUS_CODES:uT}=m8;E8(Xn);var p8=403,S8="There was a problem performing this insert. Please check the logs and try again.",lT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function T8(e,t){let r=e.parsed_sql_object;if(!r){r=mM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xn.yy.Insert?s=n.into.databaseid:n instanceof Xn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xn.yy.Update||n instanceof Xn.yy.Delete?s=n.table.databaseid:Md.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xn.yy.Select)&&h8.isEmptyOrZeroLength(s))return t("No schema specified",null)}pM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(T8,"evaluateSQL");function hM(e,t){let r;try{r=f8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(hM,"checkASTPermissions");function mM(e){let t=new lT;if(!e)throw cT(new Error,"The 'sql' parameter is missing from the request body",uT.BAD_REQUEST);try{let r=e.trim(),s=Xn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
-
`);throw s[1]?cT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,uT.BAD_REQUEST):cT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",uT.BAD_REQUEST)}return t}a(mM,"convertSQLToAST");function pM(e,t,r){try{let s=R8;if(!e.bypass_auth&&!t.permissions_checked){let i=hM(e,t);if(i&&i.length>0)return r(p8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case iu.VALID_SQL_OPS_ENUM.SELECT:s=u8,n=t.ast.statements[0];break;case iu.VALID_SQL_OPS_ENUM.INSERT:s=g8;break;case iu.VALID_SQL_OPS_ENUM.UPDATE:s=_8;break;case iu.VALID_SQL_OPS_ENUM.DELETE:s=d8;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(pM,"processAST");function R8(e,t){Md.info(e),t("unknown sql statement")}a(R8,"nullFunction");function g8({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=A8(i,e.values)}catch(o){return r(o)}c8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Md.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(g8,"convertInsert");function A8(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]]=Xn.compile(`SELECT ${n.toString()} AS [${iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Md.error(r),new Error(S8)}}a(A8,"createDataObjects")});var _T=T((y_e,RM)=>{"use strict";var{S3:O8,GetObjectCommand:N8}=require("@aws-sdk/client-s3");RM.exports={getFileStreamFromS3:b8,getS3AuthObj:TM};async function b8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await TM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new N8(r))).Body}a(b8,"getFileStreamFromS3");function TM(e,t,r){return new O8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(TM,"getS3AuthObj")});var vd=T((w_e,LM)=>{"use strict";var OM=qr(),y8=Pd(),I8=_T(),{AsyncParser:w8,Transform:C8}=require("json2csv"),au=require("stream"),Ir=$(),dT=require("fs-extra"),L8=require("path"),zr=G(),{promisify:NM}=require("util"),ou=$(),{handleHDBError:it,hdb_errors:D8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=D8,{streamAsJSON:U8}=FE(),{Upload:M8}=require("@aws-sdk/lib-storage"),gM=["search_by_value","search_by_hash","sql"],AM=["json","csv"],bM="json",yM="csv",P8="Successfully exported JSON locally.",v8="Successfully exported CSV locally.",B8=1e3,H8=OM.searchByHash,F8=OM.searchByValue,q8=NM(y8.evaluateSQL),G8=NM(au.finished);LM.exports={export_to_s3:$8,export_local:x8,toCsvStream:IM};async function x8(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=wM(e);if(!Ir.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ir.isEmpty(e.path))throw zr.error(or.MISSING_VALUE("path")),it(new Error,or.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(L8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ir.buildFolderPath(e.path,r);await k8(e.path);let n=await CM(e);return await V8(s,e.format,n)}a(x8,"export_local");async function k8(e){if(zr.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 dT.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(k8,"confirmPath");async function V8(e,t,r){if(zr.trace("in saveToLocal"),ou.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===bM){let s=dT.createWriteStream(e);return U8(r).pipe(s),await G8(s),{message:P8,path:e}}else if(t===yM){let s=dT.createWriteStream(e),n=au.Readable.from(r),i={},o={objectMode:!0};return await new w8(i,o).fromInput(n).toOutput(s).promise(!1),{message:v8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(V8,"saveToLocal");async function $8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=wM(e);if(!Ir.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 CM(e)}catch(u){throw zr.error(u),u}let s,n=await I8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new au.PassThrough;if(e.format===yM){i=e.s3.key+".csv";let u=IM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===bM){i=e.s3.key+".json";let u=new au.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%B8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new M8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a($8,"export_to_s3");function IM(e){let t=au.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new C8(r,s);return t.pipe(n)}a(IM,"toCsvStream");function wM(e){if(zr.trace("in exportCoreValidation"),Ir.isEmpty(e.format))return"format missing";if(AM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${AM.join(", ")}`;let t=e.search_operation.operation;if(Ir.isEmpty(t))return"search_operation.operation missing";if(gM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${gM.join(", ")}`}a(wM,"exportCoreValidation");async function CM(e){zr.trace("in getRecords");let t,r;if(ou.isEmpty(e.search_operation)||ou.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=F8;break;case"search_by_hash":t=H8;break;case"sql":t=q8;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(CM,"getRecords")});var FM={};Qe(FM,{contentTypes:()=>ET,findBestSerializer:()=>Fd,getDeserializer:()=>jo,registerContentHandlers:()=>hT,serialize:()=>qd,serializeMessage:()=>zn});function Y8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function hT(e){e.register(W8,{serializers:[{regex:/^application\/json$/,serializer:Bd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(cu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Hd.Readable.from((0,Vs.encodeIter)(t,cu)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Vs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Fd(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=Ct.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(Ct.keys()).join(", "))}};s=Ct.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function qd(e,t,r){let s=UM&&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=Fd(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,En.createBrotliCompress)({params:{[En.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?En.constants.BROTLI_MODE_TEXT:En.constants.BROTLI_MODE_GENERIC,[En.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>UM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,En.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=Fd(t);return r=t.serialize=s.serializer.serialize,r(e)}function Q8(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 jo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ct.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ct.get(e)?.deserialize||MM(e,s);return o=>Q8(o).then(i)}return e&&Ct.get(e)?.deserialize||MM(e,s)}function MM(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 z8(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 Bd,fT,Vs,Gi,En,Hd,PM,vM,BM,cu,Ct,ET,DM,HM,K8,W8,UM,Yo=Te(()=>{Bd=D(FE()),fT=D(vd()),Vs=require("msgpackr"),Gi=require("cbor-x"),En=require("zlib"),Hd=require("stream");Mr();PM=require("../../index"),vM=D(X()),BM=D(b()),cu={useRecords:!1,useToJSON:!0},Ct=new Map,ET=Ct;ut.contentTypes=ET;(0,PM._assignPackageExport)("contentTypes",ET);Ct.set("application/json",{serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});DM=new Gi.Encoder(cu);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(cu).end(e)},serialize:DM.encode,deserialize:DM.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Hd.Readable.from((0,Vs.encodeIter)(e,cu)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.toCsvStream)(e)},q:.1});Ct.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ct.set("text/event-stream",{serializeStream:function(e){return Hd.Readable.from(z8(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+`
|
|
15
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=bU(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 zo.info(`finished installModules with response ${i}`),i}a(t5,"installModules");function bU(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
16
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(bU,"parseNPMStdErr");async function r5(e){zo.info(`starting auditModules for request: ${e}`);let t=IU(e);if(t)throw Wo(t,t.message,Qo.BAD_REQUEST);let{projects:r}=e;await Ad(),await yU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=gd.join(VS,o);s[o]={npm_output:null,npm_error:null};try{let u=await eu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=bU(u.stderr)}}return zo.info(`finished auditModules with response ${s}`),s}a(r5,"auditModules");async function Ad(){try{return await eu("npm -v"),!0}catch{throw Wo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Qo.BAD_REQUEST,void 0,void 0,!0)}}a(Ad,"checkNPMInstalled");async function yU(e){if(!Array.isArray(e)||e.length===0)throw Wo(new Error,"projects argument must be an array with at least 1 element",Qo.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=gd.join(VS,i.toString());if(!await AU.pathExists(o)){t.push(i);continue}let u=gd.join(o,"package.json");await AU.pathExists(u)||r.push(i)}if(t.length>0)throw Wo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Qo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Wo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Qo.BAD_REQUEST,void 0,void 0,!0)}a(yU,"checkProjectPaths");function IU(e){let t=Rd.object({projects:Rd.array().min(1).items(Rd.string()).required(),dry_run:Rd.boolean().default(!1)});return JZ.validateBySchema(e,t)}a(IU,"modulesValidator")});var YS=T((o_e,MU)=>{"use strict";var Jo=require("fs-extra"),$S=require("path"),Nd=q(),CU=$(),bd=b(),UU=X(),s5=hr();MU.exports=n5;async function n5(){let e=i5(),t=UU.get(bd.CONFIG_PARAMS.ROOTPATH),r=$S.join(t,"package.json"),s={dependencies:{harperdb:"file:"+bd.PACKAGE_ROOT}},n=$S.join(t,"node_modules");await Jo.ensureDir(n);let i,o=!0,c=!1;try{i=await Jo.readJson(r)}catch(u){if(CU.isEmptyOrZeroLength(e))return;if(u.code!==bd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!CU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await LU(_);s.dependencies[u]=l+_}if(!o){Nd.notify("Installing components"),await DU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await LU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Nd.notify("Removing component",u),c=!0);c&&(Nd.notify("Updating components."),await DU(r,s,i))}a(n5,"installComponents");function i5(){let e=s5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(i5,"getComponentsConfig");async function LU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":$S.extname(e)||await Jo.pathExists(e)?"file:":"github:"}a(LU,"getPkgPrefix");async function DU(e,t,r){Nd.trace("npm installing components package.json",t),await Jo.writeFile(e,JSON.stringify(t,null," "));try{await Od().installAllRootModules(UU.get(bd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Jo.writeFile(e,JSON.stringify(r,null," ")):await Jo.unlink(e),s}}a(DU,"installPackages")});var QS=T((u_e,HU)=>{"use strict";var Le=require("fs-extra"),KS=require("fast-glob"),_e=require("path"),vU=require("tar-fs"),c_e=require("uuid").v4,WS=require("normalize-path"),xs=gU(),ft=q(),Me=b(),nt=X(),tu=hr(),o5=$(),{PACKAGE_ROOT:a5}=b(),{handleHDBError:Tt,hdb_errors:c5}=j(),{basename:u5}=require("path"),l5=YS(),BU=X(),_5=b(),{Readable:d5}=require("stream"),{isMainThread:f5}=require("worker_threads"),{HDB_ERROR_MSGS:Gi,HTTP_STATUS_CODES:Rt}=c5,E5=_e.join(a5,"application-template"),PU=_e.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function h5(){ft.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,Gi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,t)}return e}a(h5,"customFunctionsStatus");function m5(){ft.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{KS.sync(WS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:KS.sync(WS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:KS.sync(WS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Gi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,r)}return e}a(m5,"getCustomFunctions");function p5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=_e.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Gi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(p5,"getCustomFunction");function S5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=xs.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.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(_e.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Gi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(S5,"setCustomFunction");function T5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(_e.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Gi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,o)}}a(T5,"dropCustomFunction");function R5(e){e.project&&(e.project=_e.parse(e.project).name);let t=xs.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=_e.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(E5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Gi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,n)}}a(R5,"addComponent");function g5(e){e.project&&(e.project=_e.parse(e.project).name);let t=xs.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!o5.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 tu.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=_e.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Gi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,ft.ERR,i)}}a(g5,"dropCustomFunctionProject");async function A5(e){e.project&&(e.project=_e.parse(e.project).name);let t=xs.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;ft.trace("packaging component",s);let n;try{n=await Le.realpath(_e.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(_e.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(PU);let i=_e.join(PU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(_e.join(n,"node_modules"))}),vU.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(A5,"packageComponent");async function O5(e){e.project&&(e.project=_e.parse(e.project).name);let t=xs.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(ft.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=_e.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=d5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(vU.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(_e.join(o,"package"),o),await Le.remove(_e.join(o,"package")))}if(await tu.addConfig(s,{package:i}),!n){await l5();let f=BU.get(_5.CONFIG_PARAMS.ROOTPATH);o=_e.join(f,"node_modules",s)}if(f5)return;let c=new Map;c.isWorker=!0;let u=(Id(),Z(yd)),_;u.setErrorReporter(f=>_=f);let l=u5(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return ft.info("Installed component"),`Successfully deployed: ${s}`}a(O5,"deployComponent");async function N5(){let e=tu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=_e.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:_e.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return ft.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(_e.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(_e.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Id(),Z(yd)).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(N5,"getComponents");async function b5(e){let t=xs.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=tu.getConfigObj()[e.project]||e.project==="harperdb"?_e.join(BU.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(_e.join(s,e.project,e.file));return{message:await Le.readFile(_e.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 '${_e.join(e.project,e.file)}'`):i}}a(b5,"getComponentFile");async function y5(e){let t=xs.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=_e.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(y5,"setComponentFile");async function I5(e){let t=xs.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?_e.join(e.project,e.file):e.project,s=_e.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),tu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(I5,"dropComponent");HU.exports={customFunctionsStatus:h5,getCustomFunctions:m5,getCustomFunction:p5,setCustomFunction:S5,dropCustomFunction:T5,addComponent:R5,dropCustomFunctionProject:g5,packageComponent:A5,deployComponent:O5,getComponents:N5,getComponentFile:b5,setComponentFile:y5,dropComponent:I5}});var zS=T((__e,GU)=>{"use strict";var ks=require("joi"),FU=Ge();GU.exports={readTransactionLogValidator:w5,deleteTransactionLogsBeforeValidator:C5};function w5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return FU.validateBySchema(e,t)}a(w5,"readTransactionLogValidator");function C5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return FU.validateBySchema(e,t)}a(C5,"deleteTransactionLogsBeforeValidator")});var Cd=T((f_e,$U)=>{"use strict";var JS=b(),wd=dt(),qU=$(),xU=X(),kU=nn(),{handleHDBError:Xo,hdb_errors:L5}=j(),{HTTP_STATUS_CODES:jo}=L5,{readTransactionLogValidator:D5,deleteTransactionLogsBeforeValidator:U5}=zS(),VU="This operation relies on clustering and cannot run with it disable.",M5="Logs successfully deleted from transaction log.",P5="All logs successfully deleted from transaction log.";$U.exports={readTransactionLog:v5,deleteTransactionLogsBefore:B5};async function*v5(e){let t=D5(e);if(t)throw Xo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(!xU.get(JS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(new Error,VU,jo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qU.checkSchemaTableExist(r,s);if(n)throw Xo(new Error,n,jo.NOT_FOUND,void 0,void 0,!0);let i=kU.createNatsTableStreamName(r,s),o=await wd.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===JS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(v5,"readTransactionLog");async function B5(e){let t=U5(e);if(t)throw Xo(t,t.message,jo.BAD_REQUEST,void 0,void 0,!0);if(!xU.get(JS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(new Error,VU,jo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qU.checkSchemaTableExist(r,s);if(i)throw Xo(new Error,i,jo.NOT_FOUND,void 0,void 0,!0);let o=kU.createNatsTableStreamName(r,s),{jsm:c}=await wd.getNATSReferences(),u=await wd.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=M5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=P5):d=(await wd.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(B5,"deleteTransactionLogsBefore")});var KU=T((h_e,YU)=>{"use strict";var XS=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}};YU.exports=XS});var QU=T((p_e,WU)=>{"use strict";var jS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};WU.exports=jS});var eT=T((T_e,JU)=>{"use strict";var zU=KU(),H5=QU(),{HDB_ERROR_MSGS:F5}=dr(),ZS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=F5.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 zU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new H5(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 zU(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}};JU.exports=ZS});var Md=T((g_e,dM)=>{"use strict";var tT=qr(),Ld=Gr(),Qr=D_(),nu=Si(),rT=Oi(),G5=mp(),q5=wC(),iu=xr(),Dd=bp(),Et=q(),x5=wp(),k5=z_(),V5=uS(),$5=Z_(),Y5=lS(),K5=_S(),W5=ES(),Q5=mS(),sT=TS(),fn=$(),z5=bD(),nT=NS(),ZU=fd(),Wr=b(),eM=iU(),J5=Go(),tM=Mc(),rM=(Sd(),Z(Jc)),sM=hr(),yr=QS(),X5=require("alasql"),nM=Cd(),iM=Od(),oM=eT(),{handleHDBError:ir,hdb_errors:aM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:ru}=aM,v=new Map,cM="delete",Xn="insert",En="read",qi="update",su="describe",XU=nu.describeSchema.name,jU=nu.describeTable.name,uM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},j5="catchup",Z5="handleGetJob",e8="handleGetJobsByStartDate",Ud={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},t8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],lM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(tT.insert.name,new F(!1,[Xn]));v.set(tT.update.name,new F(!1,[qi]));v.set(tT.upsert.name,new F(!1,[Xn,qi]));v.set(Ld.searchByConditions.name,new F(!1,[En]));v.set(Ld.searchByHash.name,new F(!1,[En]));v.set(Ld.searchByValue.name,new F(!1,[En]));v.set(Ld.search.name,new F(!1,[En]));v.set(Qr.createSchema.name,new F(!0,[]));v.set(Qr.createTable.name,new F(!0,[]));v.set(Qr.createAttribute.name,new F(!1,[Xn]));v.set(Qr.dropSchema.name,new F(!0,[]));v.set(Qr.dropTable.name,new F(!0,[]));v.set(Qr.dropAttribute.name,new F(!0,[]));v.set(nu.describeSchema.name,new F(!1,[En]));v.set(nu.describeTable.name,new F(!1,[En]));v.set(rT.deleteRecord.name,new F(!1,[cM]));v.set(iu.addUser.name,new F(!0,[]));v.set(iu.alterUser.name,new F(!0,[]));v.set(iu.dropUser.name,new F(!0,[]));v.set(iu.listUsersExternal.name,new F(!0,[]));v.set(Dd.listRoles.name,new F(!0,[]));v.set(Dd.addRole.name,new F(!0,[]));v.set(Dd.alterRole.name,new F(!0,[]));v.set(Dd.dropRole.name,new F(!0,[]));v.set(x5.name,new F(!0,[]));v.set(k5.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set($5.name,new F(!0,[]));v.set(Y5.name,new F(!0,[]));v.set(K5.name,new F(!0,[]));v.set(sT.setRoutes.name,new F(!0,[]));v.set(sT.getRoutes.name,new F(!0,[]));v.set(sT.deleteRoutes.name,new F(!0,[]));v.set(sM.setConfiguration.name,new F(!0,[]));v.set(W5.clusterStatus.name,new F(!0,[]));v.set(Q5.name,new F(!0,[]));v.set(nT.getFingerprint.name,new F(!0,[]));v.set(nT.setLicense.name,new F(!0,[]));v.set(rT.deleteFilesBefore.name,new F(!0,[]));v.set(rT.deleteAuditLogsBefore.name,new F(!0,[]));v.set(ZU.restart.name,new F(!0,[]));v.set(ZU.restartService.name,new F(!0,[]));v.set(G5.name,new F(!0,[]));v.set(q5.name,new F(!0,[En]));v.set(J5.systemInformation.name,new F(!0,[]));v.set(sM.getConfiguration.name,new F(!0,[]));v.set(nM.readTransactionLog.name,new F(!0,[]));v.set(nM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(iM.installModules.name,new F(!0,[]));v.set(iM.auditModules.name,new F(!0,[]));v.set(tM.createTokens.name,new F(!1,[]));v.set(tM.refreshOperationToken.name,new F(!1,[]));v.set(rM.login.name,new F(!1,[]));v.set(rM.logout.name,new F(!1,[]));v.set(yr.customFunctionsStatus.name,new F(!0,[]));v.set(yr.getCustomFunctions.name,new F(!0,[]));v.set(yr.getComponents.name,new F(!0,[]));v.set(yr.getComponentFile.name,new F(!0,[]));v.set(yr.setComponentFile.name,new F(!0,[]));v.set(yr.dropComponent.name,new F(!0,[]));v.set(yr.getCustomFunction.name,new F(!0,[]));v.set(yr.setCustomFunction.name,new F(!0,[]));v.set(yr.dropCustomFunction.name,new F(!0,[]));v.set(yr.addComponent.name,new F(!0,[]));v.set(yr.dropCustomFunctionProject.name,new F(!0,[]));v.set(yr.packageComponent.name,new F(!0,[]));v.set(yr.deployComponent.name,new F(!0,[]));v.set(nT.getRegistrationInfo.name,new F(!1,[]));v.set(iu.userInfo.name,new F(!1,[]));v.set(nu.describeAll.name,new F(!1,[]));v.set(Z5,new F(!1,[]));v.set(e8,new F(!0,[]));v.set(j5,new F(!0,[]));v.set(Ud.CSV_DATA_LOAD,new F(!1,[Xn,qi]));v.set(Ud.CSV_URL_LOAD,new F(!1,[Xn,qi]));v.set(Ud.CSV_FILE_LOAD,new F(!1,[Xn,qi]));v.set(Ud.IMPORT_FROM_S3,new F(!1,[Xn,qi]));v.set(lM.EXPORT_TO_S3,new F(!0,[]));v.set(lM.EXPORT_LOCAL,new F(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[cM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[En]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Xn]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));dM.exports={verifyPerms:s8,verifyPermsAst:r8,verifyBulkLoadAttributePerms:i8};function r8(e,t,r){if(fn.isEmptyOrZeroLength(e))throw Et.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(fn.isEmptyOrZeroLength(t))throw Et.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(fn.isEmptyOrZeroLength(r))throw Et.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new oM,n=new z5(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Et.info("No schemas defined in verifyPermsAst(), will not continue."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&uM[r])throw ir(new Error,wt.DROP_SYSTEM,ru.FORBIDDEN);if(c&&!u)return null;let _=eM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof X5.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=_M(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=oT(t.role.permission,f,d[E]);iT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(r8,"verifyPermsAst");function s8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Et.info("null required parameter in verifyPerms"),ir(new Error,wt.DEFAULT_INVALID_REQUEST,ru.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 oM;if(fn.isEmptyOrZeroLength(e.hdb_user.role)||fn.isEmptyOrZeroLength(e.hdb_user.role.permission))return Et.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(wt.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&&uM[r])throw ir(new Error,wt.DROP_SYSTEM,ru.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(t8.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=eM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===XU||r===jU){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===XU&&(!d[n]||!d[n][su]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===jU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][su]))return c.handleInvalidItem(wt.TABLE_NOT_FOUND(n,i))}}let f=_M(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=n8(e),h=oT(e.hdb_user.role.permission,n,i);return iT(E,h,r,i,n,c,s),c.getPermsResponse()}a(s8,"verifyPerms");function _M(e,t,r,s,n){if(fn.arrayHasEmptyValues([e,t,r]))throw Et.info("hasPermissions has an invalid parameter"),ir(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 Et.info(`operation ${t} not found.`),ir(new Error,wt.OP_NOT_FOUND(t),ru.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return Et.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][su]===!1){s.addInvalidItem(wt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(wt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[su]===!1)s.addInvalidItem(wt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!fn.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)&&(Et.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=wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Et.error(E),Et.error(f),ir(aM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(_M,"hasPermissions");function iT(e,t,r,s,n,i,o){if(!e||!t)throw Et.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw Et.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(fn.isEmptyOrZeroLength(t))return Et.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[su]===!1){i.addInvalidItem(wt.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!==En)throw ir(new Error,wt.SYSTEM_TIMESTAMP_PERMS_ERR,ru.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(wt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(iT,"checkAttributePerms");function n8(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){Et.info(r)}return t}a(n8,"getRecordAttributes");function oT(e,t,r){let s=new Map;if(fn.isEmpty(e))return Et.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{Et.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(oT,"getAttributePermissions");function i8(e,t,r,s,n,i,o){let c=new Set(i),u=oT(e,s,n);iT(c,u,t,n,s,o,r)}a(i8,"verifyBulkLoadAttributePerms")});var vd=T((O_e,pM)=>{"use strict";pM.exports={evaluateSQL:S8,processAST:mM,convertSQLToAST:hM,checkASTPermissions:EM};var o8=qr(),fM=require("util"),a8=fM.callbackify(o8.insert),c8=Gr().search,u8=gw().update,l8=fM.callbackify(u8),_8=Ow().convertDelete,jn=require("alasql"),d8=Md(),Pd=q(),f8=p_(),E8=$(),ou=b(),{hdb_errors:h8,handleHDBError:aT}=j(),{HTTP_STATUS_CODES:cT}=h8;f8(jn);var m8=403,p8="There was a problem performing this insert. Please check the logs and try again.",uT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function S8(e,t){let r=e.parsed_sql_object;if(!r){r=hM(e.sql);let s,n=r.ast.statements[0];if(n instanceof jn.yy.Insert?s=n.into.databaseid:n instanceof jn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof jn.yy.Update||n instanceof jn.yy.Delete?s=n.table.databaseid:Pd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof jn.yy.Select)&&E8.isEmptyOrZeroLength(s))return t("No schema specified",null)}mM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(S8,"evaluateSQL");function EM(e,t){let r;try{r=d8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(EM,"checkASTPermissions");function hM(e){let t=new uT;if(!e)throw aT(new Error,"The 'sql' parameter is missing from the request body",cT.BAD_REQUEST);try{let r=e.trim(),s=jn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
+
`);throw s[1]?aT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,cT.BAD_REQUEST):aT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",cT.BAD_REQUEST)}return t}a(hM,"convertSQLToAST");function mM(e,t,r){try{let s=T8;if(!e.bypass_auth&&!t.permissions_checked){let i=EM(e,t);if(i&&i.length>0)return r(m8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ou.VALID_SQL_OPS_ENUM.SELECT:s=c8,n=t.ast.statements[0];break;case ou.VALID_SQL_OPS_ENUM.INSERT:s=R8;break;case ou.VALID_SQL_OPS_ENUM.UPDATE:s=l8;break;case ou.VALID_SQL_OPS_ENUM.DELETE:s=_8;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(mM,"processAST");function T8(e,t){Pd.info(e),t("unknown sql statement")}a(T8,"nullFunction");function R8({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=g8(i,e.values)}catch(o){return r(o)}a8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Pd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(R8,"convertInsert");function g8(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]]=jn.compile(`SELECT ${n.toString()} AS [${ou.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Pd.error(r),new Error(p8)}}a(g8,"createDataObjects")});var lT=T((b_e,TM)=>{"use strict";var{S3:A8,GetObjectCommand:O8}=require("@aws-sdk/client-s3");TM.exports={getFileStreamFromS3:N8,getS3AuthObj:SM};async function N8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await SM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new O8(r))).Body}a(N8,"getFileStreamFromS3");function SM(e,t,r){return new A8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(SM,"getS3AuthObj")});var Bd=T((I_e,CM)=>{"use strict";var AM=Gr(),b8=vd(),y8=lT(),{AsyncParser:I8,Transform:w8}=require("json2csv"),cu=require("stream"),Ir=$(),_T=require("fs-extra"),C8=require("path"),zr=q(),{promisify:OM}=require("util"),au=$(),{handleHDBError:it,hdb_errors:L8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=L8,{streamAsJSON:D8}=GE(),{Upload:U8}=require("@aws-sdk/lib-storage"),RM=["search_by_value","search_by_hash","sql"],gM=["json","csv"],NM="json",bM="csv",M8="Successfully exported JSON locally.",P8="Successfully exported CSV locally.",v8=1e3,B8=AM.searchByHash,H8=AM.searchByValue,F8=OM(b8.evaluateSQL),G8=OM(cu.finished);CM.exports={export_to_s3:V8,export_local:q8,toCsvStream:yM};async function q8(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=IM(e);if(!Ir.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ir.isEmpty(e.path))throw zr.error(or.MISSING_VALUE("path")),it(new Error,or.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(C8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ir.buildFolderPath(e.path,r);await x8(e.path);let n=await wM(e);return await k8(s,e.format,n)}a(q8,"export_local");async function x8(e){if(zr.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 _T.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,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(x8,"confirmPath");async function k8(e,t,r){if(zr.trace("in saveToLocal"),au.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(au.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(au.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===NM){let s=_T.createWriteStream(e);return D8(r).pipe(s),await G8(s),{message:M8,path:e}}else if(t===bM){let s=_T.createWriteStream(e),n=cu.Readable.from(r),i={},o={objectMode:!0};return await new I8(i,o).fromInput(n).toOutput(s).promise(!1),{message:P8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(k8,"saveToLocal");async function V8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=IM(e);if(!Ir.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 wM(e)}catch(u){throw zr.error(u),u}let s,n=await y8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new cu.PassThrough;if(e.format===bM){i=e.s3.key+".csv";let u=yM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===NM){i=e.s3.key+".json";let u=new cu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%v8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new U8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(V8,"export_to_s3");function yM(e){let t=cu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new w8(r,s);return t.pipe(n)}a(yM,"toCsvStream");function IM(e){if(zr.trace("in exportCoreValidation"),Ir.isEmpty(e.format))return"format missing";if(gM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${gM.join(", ")}`;let t=e.search_operation.operation;if(Ir.isEmpty(t))return"search_operation.operation missing";if(RM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${RM.join(", ")}`}a(IM,"exportCoreValidation");async function wM(e){zr.trace("in getRecords");let t,r;if(au.isEmpty(e.search_operation)||au.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=H8;break;case"search_by_hash":t=B8;break;case"sql":t=F8;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(wM,"getRecords")});var HM={};Qe(HM,{contentTypes:()=>fT,findBestSerializer:()=>Gd,getDeserializer:()=>Zo,registerContentHandlers:()=>ET,serialize:()=>qd,serializeMessage:()=>Jn});function $8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function ET(e){e.register(K8,{serializers:[{regex:/^application\/json$/,serializer:Hd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(uu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Fd.Readable.from((0,Vs.encodeIter)(t,uu)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,dT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Vs.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 Gd(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=Ct.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(Ct.keys()).join(", "))}};s=Ct.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function qd(e,t,r){let s=DM&&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=Gd(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,hn.createBrotliCompress)({params:{[hn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?hn.constants.BROTLI_MODE_TEXT:hn.constants.BROTLI_MODE_GENERIC,[hn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>DM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,hn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Jn(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=Gd(t);return r=t.serialize=s.serializer.serialize,r(e)}function W8(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 Zo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ct.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ct.get(e)?.deserialize||UM(e,s);return o=>W8(o).then(i)}return e&&Ct.get(e)?.deserialize||UM(e,s)}function UM(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 Q8(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 Hd,dT,Vs,xi,hn,Fd,MM,PM,vM,uu,Ct,fT,LM,BM,Y8,K8,DM,Ko=Te(()=>{Hd=D(GE()),dT=D(Bd()),Vs=require("msgpackr"),xi=require("cbor-x"),hn=require("zlib"),Fd=require("stream");Mr();MM=require("../../index"),PM=D(X()),vM=D(b()),uu={useRecords:!1,useToJSON:!0},Ct=new Map,fT=Ct;ut.contentTypes=fT;(0,MM._assignPackageExport)("contentTypes",fT);Ct.set("application/json",{serializeStream:Hd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});LM=new xi.Encoder(uu);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(uu).end(e)},serialize:LM.encode,deserialize:LM.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Fd.Readable.from((0,Vs.encodeIter)(e,uu)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,dT.toCsvStream)(e)},q:.1});Ct.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ct.set("text/event-stream",{serializeStream:function(e){return Fd.Readable.from(Q8(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
18
18
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
19
19
|
`}return e.id&&(t+="id: "+e.id+`
|
|
20
20
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
`:`data: ${e}
|
|
25
25
|
|
|
26
|
-
`},compressible:!1,q:.8});Ct.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()}});HM={type:"application/json",serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:Y8,q:.8};Ct.set("*/*",HM);Ct.set("",HM);a(Y8,"tryJSONParse");a(hT,"registerContentHandlers");K8=require("fastify-plugin"),W8=K8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Fd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Fd,"findBestSerializer");UM=vM.default.get(BM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qd,"serialize");a(zn,"serializeMessage");a(Q8,"streamToBuffer");a(jo,"getDeserializer");a(MM,"deserializerUnknownType");a(z8,"transformIterable")});var Gd={};Qe(Gd,{start:()=>j8});async function X8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hl(e);let n=new Bi;try{e.responseHeaders=n;let i=e.url.slice(1),o=pT.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=jo(r["content-type"],!0)(e.body)}catch(p){throw new lu.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 lu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new lu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,mT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){J8[0]=f;let p=String.fromCharCode(34,(Lt[0]&63)+62,(Lt[0]>>6)+(Lt[1]<<2&63)+62,(Lt[1]>>4)+(Lt[2]<<4&63)+62,(Lt[2]>>2)+62,(Lt[3]&63)+62,(Lt[3]>>6)+(Lt[4]<<2&63)+62,(Lt[4]>>4)+(Lt[5]<<4&63)+62,(Lt[5]>>2)+62,(Lt[6]&63)+62,(Lt[6]>>6)+(Lt[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),mT.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=qd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.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=qd(i.contentType?i:i.toString(),e,o),o}}function j8(e){mT=e,!qM&&(qM=!0,pT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return X8(t,r)}),e.server.ws(async(t,r,s)=>{uu++;let n=new is;GM||(GM=!0,Ac(l=>{uu>0&&l.push({metric:"ws-connections",connections:uu,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=jo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{uu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=pT.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:uu}),"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 xi,lu,Lt,J8,mT,qM,pT,GM,uu,xM=Te(()=>{Yo();xn();xi=D(G()),lu=D(j());ml();Pa();di();VS();Lt=new Uint8Array(8),J8=new Float64Array(Lt.buffer,0,1),mT={};a(X8,"http");uu=0;a(j8,"start")});var ST=T((q_e,kM)=>{var{recordAction:xd,recordActionBinary:Z8}=(xn(),Z(A_)),e6=require("fastify-plugin"),t6=200;kM.exports=e6(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.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),xd(o,"duration",_,d,l),Z8(n.raw.statusCode<400,"success",_,d,l);let f=t6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{xd(performance.now()-c,"transfer",_,d,l),xd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,xd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var AT=T((G_e,WM)=>{var Kd=require("clone"),Wd=qe(),r6=$(),$d=b(),s6=G(),kd=require("fs"),TT=require("joi"),{string:Yd}=TT.types(),{hdb_errors:n6,handleHDBError:_u}=j(),{HDB_ERROR_MSGS:i6,HTTP_STATUS_CODES:Vd}=n6,{common_validators:Zo}=Ds(),VM=1e9,$M=" is required",o6=["insert","update","upsert"],RT={database:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},schema:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},table:{presence:!0,format:Zo.schema_format,length:Zo.schema_length},action:{inclusion:{within:o6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},a6={schema:Yd.required(),table:Yd.required(),action:Yd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:c6,AWS_SECRET:u6,AWS_BUCKET:l6,AWS_FILE_KEY:_6,REGION:d6}=$d.S3_BUCKET_AUTH_KEYS,f6={s3:{presence:!0},[`s3.${c6}`]:{presence:!0,type:"String"},[`s3.${u6}`]:{presence:!0,type:"String"},[`s3.${l6}`]:{presence:!0,type:"String"},[`s3.${_6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${d6}`]:{presence:!0,type:"String"}},YM=Kd(RT);YM.data.presence={message:$M};var KM=Kd(RT);KM.file_path.presence={message:$M};var E6=Object.assign(Kd(RT),f6),gT=Kd(a6);gT.csv_url=Yd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();gT.passthrough_headers=TT.object();function h6(e){let t=Wd.validateObject(e,YM);return Qd(e,t)}a(h6,"dataObject");function m6(e){let t=Wd.validateBySchema(e,TT.object(gT));return Qd(e,t)}a(m6,"urlObject");function p6(e){let t=Wd.validateObject(e,KM);return Qd(e,t)}a(p6,"fileObject");function S6(e){let t=Wd.validateObject(e,E6);return Qd(e,t)}a(S6,"s3FileObject");function Qd(e,t){if(!t){let r=r6.checkGlobalSchemaTable(e.schema,e.table);if(r)return _u(new Error,r,Vd.BAD_REQUEST);if(e.operation===$d.OPERATIONS_ENUM.CSV_FILE_LOAD){try{kd.accessSync(e.file_path,kd.constants.R_OK|kd.constants.F_OK)}catch(s){return s.code===$d.NODE_ERROR_CODES.ENOENT?_u(s,`No such file or directory ${s.path}`,Vd.BAD_REQUEST):s.code===$d.NODE_ERROR_CODES.EACCES?_u(s,`Permission denied ${s.path}`,Vd.BAD_REQUEST):_u(s)}try{let s=kd.statSync(e.file_path).size;if(s>VM)return _u(new Error,i6.MAX_FILE_SIZE_ERR(s,VM),Vd.BAD_REQUEST)}catch(s){s6.error(s),console.error(s)}}}return t}a(Qd,"postValidateChecks");WM.exports={dataObject:h6,urlObject:m6,fileObject:p6,s3FileObject:S6}});var OT=T((k_e,QM)=>{"use strict";var du=G(),zd=b();async function T6(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===zd.OPERATIONS_ENUM.INSERT||t.operation===zd.OPERATIONS_ENUM.UPDATE||t.operation===zd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===zd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(du.info(i.message),i):i.http_resp_msg?(du.error(`Error calling operation: ${e.name}`),du.error(i.http_resp_msg),i):(du.error(`Error calling operation: ${e.name}`),du.error(i),i)}}a(T6,"callOperationFunctionAsAwait");QM.exports={callOperationFunctionAsAwait:T6}});var JM=T(($_e,zM)=>{"use strict";var NT=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}},bT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};zM.exports={BulkLoadFileObject:NT,BulkLoadDataObject:bT}});var jM=T((K_e,XM)=>{"use strict";var yT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};XM.exports=yT});var UT=T((j_e,hP)=>{"use strict";var Jd=Gr(),jd=AT(),R6=require("needle"),Rs=b(),Q_e=ke(),ea=$(),{handleHDBError:$e,hdb_errors:aP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Vi}=aP,ta=G(),IT=require("papaparse");ea.promisifyPapaParse();var gs=require("fs-extra"),g6=require("path"),{chain:ZM}=require("stream-chain"),eP=require("stream-json/streamers/StreamArray"),tP=require("stream-json/utils/Batch"),rP=require("stream-chain/utils/comp"),{finished:sP}=require("stream"),A6=X(),cP=OT(),O6=_T(),{BulkLoadFileObject:CT,BulkLoadDataObject:N6}=JM(),LT=tT(),{verifyBulkLoadAttributePerms:uP}=Ud(),z_e=jM(),J_e=dt(),X_e=nn(),{databases:b6}=(fe(),Z(Ce)),{coerceType:y6}=(Zd(),Z(MT)),nP="No records parsed from csv file.",ki=`${A6.get("HDB_ROOT")}/tmp`,{schema_regex:I6}=Ds(),iP=1024*1024*2,oP=5e3,w6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hP.exports={csvDataLoad:C6,csvURLLoad:L6,csvFileLoad:D6,importFromS3:U6};async function C6(e,t){let r=jd.dataObject(e);if(r)throw $e(r,r.message,Dt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=dP(e.schema,e.table),i=IT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:wT.bind(null,n),dynamicTyping:!1}),o=new LT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uP(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,Dt.BAD_REQUEST,void 0,void 0,!0);let u=new N6(e.action,e.schema,e.table,i.data);return s=await cP.callOperationFunctionAsAwait(fP,u,null),s.message===nP?nP:EP(s.records,s.number_written)}catch(n){throw $i(n)}}a(C6,"csvDataLoad");async function L6(e){let t=jd.urlObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await M6(e,r)}catch(n){throw ta.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new CT(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 DT(n);return await Xd(s),i}catch(n){throw await Xd(s),$i(n)}}a(L6,"csvURLLoad");async function D6(e){let t=jd.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new CT(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 DT(r)}catch(s){throw $i(s)}}a(D6,"csvFileLoad");async function U6(e){let t=jd.s3FileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=g6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new CT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await P6(n,e);let o=await DT(i);return await Xd(r),o}catch(s){throw await Xd(r),$i(s)}}a(U6,"importFromS3");async function M6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await R6("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)}B6(r,e.csv_url),await v6(t,r.raw)}a(M6,"downloadCSVFile");async function P6(e,t){try{let r=`${ki}/${e}`;await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await O6.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(){ta.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ta.error(Et.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(Et.S3_DOWNLOAD_ERR))}}a(P6,"downloadFileFromS3");async function v6(e,t){try{await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,t)}catch(r){throw ta.error(Et.WRITE_TEMP_FILE_ERR),$e(r,Vi(Et.DEFAULT_BULK_LOAD_ERR))}}a(v6,"writeFileToTempFolder");async function Xd(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{ta.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Xd,"deleteTempFile");function B6(e,t){if(e.statusCode!==aP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Dt.BAD_REQUEST);if(!w6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Dt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Dt.BAD_REQUEST)}a(B6,"validateURLResponse");async function DT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await H6(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await F6(e);break;default:throw $e(new Error,Et.DEFAULT_BULK_LOAD_ERR,Dt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return EP(t.records,t.number_written)}catch(t){throw $i(t)}}a(DT,"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 Jd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uP(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 _P(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ea.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ea.isEmpty(c)&&!ea.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 cP.callOperationFunctionAsAwait(fP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(Et.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(_P,"insertChunk");async function H6(e){let t={records:0,number_written:0},r=dP(e.schema,e.table);try{let s=new LT,n=gs.createReadStream(e.file_path,{highWaterMark:iP});n.setEncoding("utf8"),await IT.parsePromise(n,lP.bind(null,e,s),wT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:iP}),n.setEncoding("utf8"),await IT.parsePromise(n,_P.bind(null,e,t),wT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(Et.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(H6,"callPapaParse");function dP(e,t){let r=b6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>y6(i,n));return s}a(dP,"createTransformMap");function wT(e,t,r){let s=e.get(r);return s?s(t):ea.autoCast(t)}a(wT,"typeFunction");async function F6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new LT,n=ZM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await lP(e,s,r,c)})]);await new Promise((c,u)=>{sP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=ZM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await _P(e,t,r,c)})]);return await new Promise((c,u)=>{sP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(Et.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(F6,"insertJson");async function fP(e){let t={};try{e.data&&e.data.length>0&&q6(e.data[0])?t=await G6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ta.info(t.message))}catch(r){throw $i(r)}return t}a(fP,"callBulkFileLoad");function q6(e){let t=Object.keys(e);for(let r of t)if(!I6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(q6,"validateColumnNames");async function G6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Jd.insert;break;case"update":i=Jd.update;break;case"upsert":i=Jd.upsert;break;default:throw $e(new Error,Et.INVALID_ACTION_PARAM_ERR(s),Dt.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=ea.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(G6,"bulkFileLoad");function EP(e,t){return`successfully loaded ${t} of ${e} records`}a(EP,"buildResponseMsg");function $i(e){return $e(e,Vi(Et.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var pP=T((ede,mP)=>{"use strict";var PT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mP.exports=PT});var RP=T((rde,TP)=>{"use strict";var x6=b(),SP=require("moment"),k6=require("uuid").v4,vT=class{static{a(this,"JobObject")}constructor(){this.id=k6(),this.type=void 0,this.start_datetime=SP().valueOf(),this.created_datetime=SP().valueOf(),this.end_datetime=void 0,this.status=x6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};TP.exports=vT});var BT=T((nde,yP)=>{"use strict";var V6=require("uuid").v4,OP=Gr(),NP=qr(),$6=vs(),Y6=Oo(),K6=pP(),Ye=b(),W6=RP(),Q6=Up(),Jr=G(),z6=za(),ra=$(),{promisify:J6}=require("util"),Yi=require("moment"),X6=Pd(),ef=AT(),gP=Bh(),{deleteTransactionLogsBeforeValidator:j6}=JS(),{handleHDBError:Z6,hdb_errors:e9}=j(),{HTTP_STATUS_CODES:t9}=e9,AP=NP.searchByValue,r9=NP.searchByHash,s9=OP.insert,n9=J6(X6.evaluateSQL),i9=OP.update;yP.exports={addJob:c9,updateJob:l9,handleGetJob:o9,handleGetJobsByStartDate:a9,getJobById:bP};async function o9(e){try{let t=await bP(e.id);return ra.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(o9,"handleGetJob");async function a9(e){try{let t=await u9(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=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(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(a9,"handleGetJobsByStartDate");async function c9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ra.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=ef.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=ef.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ef.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ef.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=gP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=gP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=j6(e);break;default:break}if(s)throw Z6(s,s.message,t9.BAD_REQUEST,void 0,void 0,!0);let n=new W6;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 $6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await AP(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=V6();try{o=await AP(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 z6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await s9(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(c9,"addJob");async function u9(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.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 K6(s,e.hdb_user);try{return await n9(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(u9,"getJobsInDateRange");async function bP(e){if(ra.isEmptyOrZeroLength(e))return ra.errorizeMessage("Invalid job ID specified.");let t=new Y6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await r9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ra.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(bP,"getJobById");async function l9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ra.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=Yi().valueOf());let t=new Q6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await i9(t),r}a(l9,"updateJob")});var UP=T((ode,DP)=>{"use strict";var IP=$(),ar=b(),_9=require("moment"),tf=UT(),rf=G(),wP=BT(),CP=vd(),LP=Ai(),d9=Ze(),f9=wd(),HT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function E9(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(IP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(IP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await hn(e,tf.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await hn(e,tf.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await hn(e,tf.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await hn(e,tf.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await hn(e,CP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await hn(e,CP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await hn(e,LP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await hn(e,LP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await hn(e,f9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(E9,"parseMessage");async function hn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=_9().valueOf(),await wP.updateJob(e.job),await h9(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):rf.error(`There was an error running ${t.name} job with id ${e.job.id}`),rf.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await wP.updateJob(e.job)}catch(n){throw rf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(hn,"runJob");async function h9(e){rf.trace("launching job thread:",e),d9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(h9,"launchJobThread");DP.exports={parseMessage:E9,RunnerMessage:HT}});var PP=T((cde,MP)=>{"use strict";var FT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};MP.exports=FT});var JP=T((lde,$T)=>{"use strict";var af=qr(),xT=Pd(),sf=UT(),mn=L_(),nf=pi(),Eu=Ai(),m9=pp(),fu=xr(),of=yp(),Ut=zS(),ht=G(),p9=Cp(),S9=Q_(),T9=lS(),R9=j_(),g9=_S(),A9=dS(),O9=hS(),N9=pS(),qT=RS(),vP=vd(),b9=Ud(),kT=BT(),P=b(),{hdb_errors:mu,handleHDBError:hu}=j(),{HTTP_STATUS_CODES:BP}=mu,GT=bS(),HP=dd(),KP=require("util"),sa=Gr(),y9=Pn(),I9=Fo(),FP=UP(),qP=Uc(),GP=(pd(),Z(zc)),xP=hr(),kP=wd(),VP=Ad(),{setServerUtilities:w9}=(Zd(),Z(MT)),{CONTEXT:C9}=(as(),Z(CE)),{_assignPackageExport:L9}=require("../../index"),{transformReq:D9}=$(),{server:U9}=(Mr(),Z(eo)),M9=OT(),$P=af.searchByHash,P9=af.searchByValue,v9=KP.promisify(af.search),B9=KP.promisify(xT.evaluateSQL),H9={[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=PP();async function WP(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 M9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return H9[e.body.operation]&&y9.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(WP,"processLocalTransaction");var YP=q9();$T.exports={chooseOperation:QP,getOperationFunction:zP,operation:VT,processLocalTransaction:WP};w9($T.exports);U9.operation=VT;function QP(e){let t;try{t=zP(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=xT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xT.checkASTPermissions(e,i);if(o)throw ht.error(`${BP.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),hu(new Error,o,mu.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=b9.verifyPerms(i,n);if(o)throw ht.error(`${BP.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw hu(n,"There was an error when trying to choose an operation path")}return r}a(QP,"chooseOperation");function zP(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),YP.has(e.operation))return YP.get(e.operation);throw hu(new Error,mu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),mu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(zP,"getOperationFunction");L9("operation",VT);function VT(e,t){e.hdb_user=this[C9]?.user,e.bypass_auth=!t;let r=QP(e);return WP({body:e},r)}a(VT,"operation");async function F9(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 sa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await sa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await sa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Eu.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(F9,"catchup");async function $s(e){D9(e);let t,r;try{r=await kT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new FP.RunnerMessage(t,e);return await FP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),hu(s,n)}}a($s,"executeJob");function q9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(sa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(sa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(sa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(af.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(P9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(v9)),e.set(P.OPERATIONS_ENUM.SQL,new H(B9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H($s,sf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H($s,sf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H($s,sf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H($s,sf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(mn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(mn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(mn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(mn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(nf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(nf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Eu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(fu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(fu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(fu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(fu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(of.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(of.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(of.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(of.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(fu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(p9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(S9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(T9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(R9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(g9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(A9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(xP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(O9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(N9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(qT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(qT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(qT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H($s,vP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H($s,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H($s,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H($s,vP.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(GT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(GT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(GT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(HP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(HP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(F9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(I9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H($s,Eu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(m9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(qP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(qP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(GP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(GP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(xP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Ut.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Ut.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Ut.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Ut.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Ut.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Ut.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Ut.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Ut.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Ut.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Ut.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Ut.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Ut.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Ut.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Ut.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Ut.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Ut.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(kP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H($s,kP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(VP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(VP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(mn.getBackup)),e}a(q9,"initializeOperationFunctionMap")});var uf=T((dde,ZP)=>{"use strict";var YT=b(),G9=$(),pu=G(),{handleHDBError:KT,hdb_errors:cf}=j(),{isMainThread:x9}=require("worker_threads"),{Readable:k9}=require("stream"),XP=require("os"),V9=require("util"),$9=Gp(),Y9=V9.promisify($9.authorize),jP=JP(),{createGzip:K9,constants:W9}=require("zlib");function Q9(e){let t=`Found an uncaught exception with message: ${e.message}. ${XP.EOL}Stack: ${e.stack} ${XP.EOL}Terminating ${x9?"HDB":"thread"}.`;console.error(t),pu.fatal(t),process.exit(1)}a(Q9,"handleServerUncaughtException");function z9(e,t,r){if(pu[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:cf.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(z9,"serverErrorHandler");function J9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=KT(new Error,"Invalid JSON.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(G9.isEmpty(e.body.operation)){let s=KT(new Error,"Request body must include an 'operation' property.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(J9,"reqBodyValidationHandler");function X9(e,t,r){let s;e.body.operation!==YT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==YT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==YT.OPERATIONS_ENUM.LOGOUT?Y9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{pu.warn(n),pu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(KT(n,i,cf.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(X9,"authHandler");async function j9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=jP.chooseOperation(e.body);let n=await jP.processLocalTransaction(e,s);if(n instanceof k9&&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(K9({level:W9.Z_BEST_SPEED})))}return n}catch(n){throw pu.error(n),n}}a(j9,"handlePostRequest");ZP.exports={authHandler:X9,handlePostRequest:j9,handleServerUncaughtException:Q9,serverErrorHandler:z9,reqBodyValidationHandler:J9}});var sv=T((Ede,rv)=>{"use strict";var Z9=require("fastify-plugin"),{handlePostRequest:ev,authHandler:e7,reqBodyValidationHandler:t7}=uf();async function r7(e){e.decorate("hdbCore",{preValidation:[t7,e7],request:t=>tv(ev(t,response)),requestWithoutAuthentication:(t,r)=>tv(ev(t,r,!0))})}a(r7,"hdbCore");async function tv(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(tv,"convertAsyncIterators");rv.exports=Z9(r7)});var iv=T((mde,nv)=>{"use strict";var WT=require("fs"),na=X();na.initSync();var{CONFIG_PARAMS:Su}=b(),s7=1024*1024*1024;function n7(e){let t=na.get(Su.HTTP_TIMEOUT),r=na.get(Su.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:s7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=na.get(Su.TLS_PRIVATEKEY),i=na.get(Su.TLS_CERTIFICATE),o=na.get(Su.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:WT.readFileSync(`${n}`),cert:WT.readFileSync(i)+(o?`
|
|
26
|
+
`},compressible:!1,q:.8});Ct.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()}});BM={type:"application/json",serializeStream:Hd.streamAsJSON,serialize:JSON.stringify,deserialize:$8,q:.8};Ct.set("*/*",BM);Ct.set("",BM);a($8,"tryJSONParse");a(ET,"registerContentHandlers");Y8=require("fastify-plugin"),K8=Y8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Gd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Gd,"findBestSerializer");DM=PM.default.get(vM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qd,"serialize");a(Jn,"serializeMessage");a(W8,"streamToBuffer");a(Zo,"getDeserializer");a(UM,"deserializerUnknownType");a(Q8,"transformIterable")});var xd={};Qe(xd,{start:()=>X8});async function J8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&ml(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=mT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await qe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Zo(r["content-type"],!0)(e.body)}catch(p){throw new _u.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 _u.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new _u.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,hT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){z8[0]=f;let p=String.fromCharCode(34,(Lt[0]&63)+62,(Lt[0]>>6)+(Lt[1]<<2&63)+62,(Lt[1]>>4)+(Lt[2]<<4&63)+62,(Lt[2]>>2)+62,(Lt[3]&63)+62,(Lt[3]>>6)+(Lt[4]<<2&63)+62,(Lt[4]>>4)+(Lt[5]<<4&63)+62,(Lt[5]>>2)+62,(Lt[6]&63)+62,(Lt[6]>>6)+(Lt[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),hT.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=qd(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=qd(i.contentType?i:i.toString(),e,o),o}}function X8(e){hT=e,!FM&&(FM=!0,mT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return J8(t,r)}),e.server.ws(async(t,r,s)=>{lu++;let n=new is;GM||(GM=!0,Oc(l=>{lu>0&&l.push({metric:"ws-connections",connections:lu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=Zo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{lu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=mT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(Jn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:lu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await qe(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Jn(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,_u,Lt,z8,hT,FM,mT,GM,lu,qM=Te(()=>{Ko();kn();ki=D(q()),_u=D(j());pl();va();fi();kS();Lt=new Uint8Array(8),z8=new Float64Array(Lt.buffer,0,1),hT={};a(J8,"http");lu=0;a(X8,"start")});var pT=T((F_e,xM)=>{var{recordAction:kd,recordActionBinary:j8}=(kn(),Z(O_)),Z8=require("fastify-plugin"),e6=200;xM.exports=Z8(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.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),kd(o,"duration",_,d,l),j8(n.raw.statusCode<400,"success",_,d,l);let f=e6;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 gT=T((G_e,KM)=>{var Wd=require("clone"),Qd=Ge(),t6=$(),Yd=b(),r6=q(),Vd=require("fs"),ST=require("joi"),{string:Kd}=ST.types(),{hdb_errors:s6,handleHDBError:du}=j(),{HDB_ERROR_MSGS:n6,HTTP_STATUS_CODES:$d}=s6,{common_validators:ea}=Ds(),kM=1e9,VM=" is required",i6=["insert","update","upsert"],TT={database:{presence:!1,format:ea.schema_format,length:ea.schema_length},schema:{presence:!1,format:ea.schema_format,length:ea.schema_length},table:{presence:!0,format:ea.schema_format,length:ea.schema_length},action:{inclusion:{within:i6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},o6={schema:Kd.required(),table:Kd.required(),action:Kd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:a6,AWS_SECRET:c6,AWS_BUCKET:u6,AWS_FILE_KEY:l6,REGION:_6}=Yd.S3_BUCKET_AUTH_KEYS,d6={s3:{presence:!0},[`s3.${a6}`]:{presence:!0,type:"String"},[`s3.${c6}`]:{presence:!0,type:"String"},[`s3.${u6}`]:{presence:!0,type:"String"},[`s3.${l6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${_6}`]:{presence:!0,type:"String"}},$M=Wd(TT);$M.data.presence={message:VM};var YM=Wd(TT);YM.file_path.presence={message:VM};var f6=Object.assign(Wd(TT),d6),RT=Wd(o6);RT.csv_url=Kd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();RT.passthrough_headers=ST.object();function E6(e){let t=Qd.validateObject(e,$M);return zd(e,t)}a(E6,"dataObject");function h6(e){let t=Qd.validateBySchema(e,ST.object(RT));return zd(e,t)}a(h6,"urlObject");function m6(e){let t=Qd.validateObject(e,YM);return zd(e,t)}a(m6,"fileObject");function p6(e){let t=Qd.validateObject(e,f6);return zd(e,t)}a(p6,"s3FileObject");function zd(e,t){if(!t){let r=t6.checkGlobalSchemaTable(e.schema,e.table);if(r)return du(new Error,r,$d.BAD_REQUEST);if(e.operation===Yd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Vd.accessSync(e.file_path,Vd.constants.R_OK|Vd.constants.F_OK)}catch(s){return s.code===Yd.NODE_ERROR_CODES.ENOENT?du(s,`No such file or directory ${s.path}`,$d.BAD_REQUEST):s.code===Yd.NODE_ERROR_CODES.EACCES?du(s,`Permission denied ${s.path}`,$d.BAD_REQUEST):du(s)}try{let s=Vd.statSync(e.file_path).size;if(s>kM)return du(new Error,n6.MAX_FILE_SIZE_ERR(s,kM),$d.BAD_REQUEST)}catch(s){r6.error(s),console.error(s)}}}return t}a(zd,"postValidateChecks");KM.exports={dataObject:E6,urlObject:h6,fileObject:m6,s3FileObject:p6}});var AT=T((x_e,WM)=>{"use strict";var fu=q(),Jd=b();async function S6(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===Jd.OPERATIONS_ENUM.INSERT||t.operation===Jd.OPERATIONS_ENUM.UPDATE||t.operation===Jd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Jd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(fu.info(i.message),i):i.http_resp_msg?(fu.error(`Error calling operation: ${e.name}`),fu.error(i.http_resp_msg),i):(fu.error(`Error calling operation: ${e.name}`),fu.error(i),i)}}a(S6,"callOperationFunctionAsAwait");WM.exports={callOperationFunctionAsAwait:S6}});var zM=T((V_e,QM)=>{"use strict";var OT=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}},NT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};QM.exports={BulkLoadFileObject:OT,BulkLoadDataObject:NT}});var XM=T((Y_e,JM)=>{"use strict";var bT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};JM.exports=bT});var DT=T((X_e,EP)=>{"use strict";var Xd=qr(),Zd=gT(),T6=require("needle"),Rs=b(),W_e=ke(),ta=$(),{handleHDBError:$e,hdb_errors:oP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:ht,CHECK_LOGS_WRAPPER:$i}=oP,ra=q(),yT=require("papaparse");ta.promisifyPapaParse();var gs=require("fs-extra"),R6=require("path"),{chain:jM}=require("stream-chain"),ZM=require("stream-json/streamers/StreamArray"),eP=require("stream-json/utils/Batch"),tP=require("stream-chain/utils/comp"),{finished:rP}=require("stream"),g6=X(),aP=AT(),A6=lT(),{BulkLoadFileObject:wT,BulkLoadDataObject:O6}=zM(),CT=eT(),{verifyBulkLoadAttributePerms:cP}=Md(),Q_e=XM(),z_e=dt(),J_e=nn(),{databases:N6}=(fe(),Z(Ce)),{coerceType:b6}=(ef(),Z(UT)),sP="No records parsed from csv file.",Vi=`${g6.get("HDB_ROOT")}/tmp`,{schema_regex:y6}=Ds(),nP=1024*1024*2,iP=5e3,I6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};EP.exports={csvDataLoad:w6,csvURLLoad:C6,csvFileLoad:L6,importFromS3:D6};async function w6(e,t){let r=Zd.dataObject(e);if(r)throw $e(r,r.message,Dt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=_P(e.schema,e.table),i=yT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:IT.bind(null,n),dynamicTyping:!1}),o=new CT;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,Dt.BAD_REQUEST,void 0,void 0,!0);let u=new O6(e.action,e.schema,e.table,i.data);return s=await aP.callOperationFunctionAsAwait(dP,u,null),s.message===sP?sP:fP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(w6,"csvDataLoad");async function C6(e){let t=Zd.urlObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await U6(e,r)}catch(n){throw ra.error(ht.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,$i(ht.DOWNLOAD_FILE_ERR(r)))}try{let n=new wT(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 LT(n);return await jd(s),i}catch(n){throw await jd(s),Yi(n)}}a(C6,"csvURLLoad");async function L6(e){let t=Zd.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new wT(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 LT(r)}catch(s){throw Yi(s)}}a(L6,"csvFileLoad");async function D6(e){let t=Zd.s3FileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=R6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new wT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await M6(n,e);let o=await LT(i);return await jd(r),o}catch(s){throw await jd(r),Yi(s)}}a(D6,"importFromS3");async function U6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await T6("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)}v6(r,e.csv_url),await P6(t,r.raw)}a(U6,"downloadCSVFile");async function M6(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 A6.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(){ra.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ra.error(ht.S3_DOWNLOAD_ERR+" - "+r),$e(r,$i(ht.S3_DOWNLOAD_ERR))}}a(M6,"downloadFileFromS3");async function P6(e,t){try{await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,t)}catch(r){throw ra.error(ht.WRITE_TEMP_FILE_ERR),$e(r,$i(ht.DEFAULT_BULK_LOAD_ERR))}}a(P6,"writeFileToTempFolder");async function jd(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{ra.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(jd,"deleteTempFile");function v6(e,t){if(e.statusCode!==oP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Dt.BAD_REQUEST);if(!I6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Dt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Dt.BAD_REQUEST)}a(v6,"validateURLResponse");async function LT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await B6(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await H6(e);break;default:throw $e(new Error,ht.DEFAULT_BULK_LOAD_ERR,Dt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,ht.INVALID_FILE_EXT_ERR(e))}return fP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(LT,"fileLoad");async function uP(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 Xd.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(uP,"validateChunk");async function lP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ta.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ta.isEmpty(c)&&!ta.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 aP.callOperationFunctionAsAwait(dP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,$i(ht.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_CSV_ERR+" - "+c);r(u)}}a(lP,"insertChunk");async function B6(e){let t={records:0,number_written:0},r=_P(e.schema,e.table);try{let s=new CT,n=gs.createReadStream(e.file_path,{highWaterMark:nP});n.setEncoding("utf8"),await yT.parsePromise(n,uP.bind(null,e,s),IT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:nP}),n.setEncoding("utf8"),await yT.parsePromise(n,lP.bind(null,e,t),IT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,$i(ht.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.PAPA_PARSE_ERR+s)}}a(B6,"callPapaParse");function _P(e,t){let r=N6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>b6(i,n));return s}a(_P,"createTransformMap");function IT(e,t,r){let s=e.get(r);return s?s(t):ta.autoCast(t)}a(IT,"typeFunction");async function H6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new CT,n=jM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),ZM.withParser(),c=>c.value,new eP({batchSize:iP}),tP(async c=>{await uP(e,s,r,c)})]);await new Promise((c,u)=>{rP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=jM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),ZM.withParser(),c=>c.value,new eP({batchSize:iP}),tP(async c=>{await lP(e,t,r,c)})]);return await new Promise((c,u)=>{rP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,$i(ht.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_JSON_ERR+s)}}a(H6,"insertJson");async function dP(e){let t={};try{e.data&&e.data.length>0&&F6(e.data[0])?t=await G6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ra.info(t.message))}catch(r){throw Yi(r)}return t}a(dP,"callBulkFileLoad");function F6(e){let t=Object.keys(e);for(let r of t)if(!y6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(F6,"validateColumnNames");async function G6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Xd.insert;break;case"update":i=Xd.update;break;case"upsert":i=Xd.upsert;break;default:throw $e(new Error,ht.INVALID_ACTION_PARAM_ERR(s),Dt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,ht.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=ta.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(G6,"bulkFileLoad");function fP(e,t){return`successfully loaded ${t} of ${e} records`}a(fP,"buildResponseMsg");function Yi(e){return $e(e,$i(ht.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var mP=T((Z_e,hP)=>{"use strict";var MT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};hP.exports=MT});var TP=T((tde,SP)=>{"use strict";var q6=b(),pP=require("moment"),x6=require("uuid").v4,PT=class{static{a(this,"JobObject")}constructor(){this.id=x6(),this.type=void 0,this.start_datetime=pP().valueOf(),this.created_datetime=pP().valueOf(),this.end_datetime=void 0,this.status=q6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};SP.exports=PT});var vT=T((sde,bP)=>{"use strict";var k6=require("uuid").v4,AP=qr(),OP=Gr(),V6=vs(),$6=No(),Y6=mP(),Ye=b(),K6=TP(),W6=Dp(),Jr=q(),Q6=Ja(),sa=$(),{promisify:z6}=require("util"),Ki=require("moment"),J6=vd(),tf=gT(),RP=Hh(),{deleteTransactionLogsBeforeValidator:X6}=zS(),{handleHDBError:j6,hdb_errors:Z6}=j(),{HTTP_STATUS_CODES:e9}=Z6,gP=OP.searchByValue,t9=OP.searchByHash,r9=AP.insert,s9=z6(J6.evaluateSQL),n9=AP.update;bP.exports={addJob:a9,updateJob:u9,handleGetJob:i9,handleGetJobsByStartDate:o9,getJobById:NP};async function i9(e){try{let t=await NP(e.id);return sa.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(i9,"handleGetJob");async function o9(e){try{let t=await c9(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(o9,"handleGetJobsByStartDate");async function a9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||sa.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=tf.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=tf.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=tf.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=tf.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=RP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=RP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=X6(e);break;default:break}if(s)throw j6(s,s.message,e9.BAD_REQUEST,void 0,void 0,!0);let n=new K6;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 V6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await gP(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=k6();try{o=await gP(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 Q6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await r9(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(a9,"addJob");async function c9(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 Y6(s,e.hdb_user);try{return await s9(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(c9,"getJobsInDateRange");async function NP(e){if(sa.isEmptyOrZeroLength(e))return sa.errorizeMessage("Invalid job ID specified.");let t=new $6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await t9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),sa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(NP,"getJobById");async function u9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(sa.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 W6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await n9(t),r}a(u9,"updateJob")});var DP=T((ide,LP)=>{"use strict";var yP=$(),ar=b(),l9=require("moment"),rf=DT(),sf=q(),IP=vT(),wP=Bd(),CP=Oi(),_9=Ze(),d9=Cd(),BT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function f9(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(yP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await mn(e,rf.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await mn(e,rf.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await mn(e,rf.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await mn(e,rf.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await mn(e,wP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await mn(e,wP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await mn(e,CP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await mn(e,CP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await mn(e,d9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(f9,"parseMessage");async function mn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=l9().valueOf(),await IP.updateJob(e.job),await E9(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):sf.error(`There was an error running ${t.name} job with id ${e.job.id}`),sf.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await IP.updateJob(e.job)}catch(n){throw sf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(mn,"runJob");async function E9(e){sf.trace("launching job thread:",e),_9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(E9,"launchJobThread");LP.exports={parseMessage:f9,RunnerMessage:BT}});var MP=T((ade,UP)=>{"use strict";var HT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};UP.exports=HT});var zP=T((ude,VT)=>{"use strict";var cf=Gr(),qT=vd(),nf=DT(),pn=D_(),of=Si(),hu=Oi(),h9=mp(),Eu=xr(),af=bp(),Ut=QS(),mt=q(),m9=wp(),p9=z_(),S9=uS(),T9=Z_(),R9=lS(),g9=_S(),A9=ES(),O9=mS(),FT=TS(),PP=Bd(),N9=Md(),xT=vT(),P=b(),{hdb_errors:pu,handleHDBError:mu}=j(),{HTTP_STATUS_CODES:vP}=pu,GT=NS(),BP=fd(),YP=require("util"),na=qr(),b9=vn(),y9=Go(),HP=DP(),FP=Mc(),GP=(Sd(),Z(Jc)),qP=hr(),xP=Cd(),kP=Od(),{setServerUtilities:I9}=(ef(),Z(UT)),{CONTEXT:w9}=(as(),Z(LE)),{_assignPackageExport:C9}=require("../../index"),{transformReq:L9}=$(),{server:D9}=(Mr(),Z(to)),U9=AT(),VP=cf.searchByHash,M9=cf.searchByValue,P9=YP.promisify(cf.search),v9=YP.promisify(qT.evaluateSQL),B9={[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=MP();async function KP(e,t){try{if(e.body.operation!=="read_log"&&(mt.log_level===P.LOG_LEVELS.INFO||mt.log_level===P.LOG_LEVELS.DEBUG||mt.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;mt.info(o)}}catch(s){mt.error(s)}let r=await U9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return B9[e.body.operation]&&b9.setSchemaDataToGlobal(s=>{s&&mt.error(s)}),r}a(KP,"processLocalTransaction");var $P=F9();VT.exports={chooseOperation:WP,getOperationFunction:QP,operation:kT,processLocalTransaction:KP};I9(VT.exports);D9.operation=kT;function WP(e){let t;try{t=QP(e)}catch(n){throw mt.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=qT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=qT.checkASTPermissions(e,i);if(o)throw mt.error(`${vP.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),mu(new Error,o,pu.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=N9.verifyPerms(i,n);if(o)throw mt.error(`${vP.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),mu(new Error,o,pu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw mu(n,"There was an error when trying to choose an operation path")}return r}a(WP,"chooseOperation");function QP(e){if(mt.trace(`getOperationFunction with operation: ${e.operation}`),$P.has(e.operation))return $P.get(e.operation);throw mu(new Error,pu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),pu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(QP,"getOperationFunction");C9("operation",kT);function kT(e,t){e.hdb_user=this[w9]?.user,e.bypass_auth=!t;let r=WP(e);return KP({body:e},r)}a(kT,"operation");async function H9(e){mt.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 na.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await na.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await na.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await hu.deleteRecord(i);break;default:mt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){mt.info("Invalid operation in transaction"),mt.error(o)}}a(H9,"catchup");async function $s(e){L9(e);let t,r;try{r=await xT.addJob(e),t=r.createdJob,mt.info("addJob result",r);let s=new HP.RunnerMessage(t,e);return await HP.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 mt.error(n),mu(s,n)}}a($s,"executeJob");function F9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(na.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(na.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(na.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(cf.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(VP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(VP)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(M9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(P9)),e.set(P.OPERATIONS_ENUM.SQL,new H(v9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H($s,nf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H($s,nf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H($s,nf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H($s,nf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(pn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(pn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(pn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(pn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(pn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(pn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(pn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(pn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(of.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(of.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(of.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(of.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(hu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Eu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Eu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Eu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Eu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(af.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(af.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(af.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(af.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Eu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(m9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(p9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(S9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(T9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(R9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(g9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(qP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(A9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(O9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(FT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(FT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(FT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H($s,PP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H($s,hu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H($s,hu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H($s,PP.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(xT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(xT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(GT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(GT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(GT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(BP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(BP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(H9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(y9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H($s,hu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(h9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(FP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(FP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(GP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(GP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(qP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(Ut.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Ut.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Ut.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Ut.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Ut.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Ut.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Ut.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Ut.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Ut.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Ut.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Ut.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Ut.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Ut.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Ut.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Ut.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Ut.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(xP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H($s,xP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(kP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(kP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(pn.getBackup)),e}a(F9,"initializeOperationFunctionMap")});var lf=T((_de,jP)=>{"use strict";var $T=b(),G9=$(),Su=q(),{handleHDBError:YT,hdb_errors:uf}=j(),{isMainThread:q9}=require("worker_threads"),{Readable:x9}=require("stream"),JP=require("os"),k9=require("util"),V9=Gp(),$9=k9.promisify(V9.authorize),XP=zP(),{createGzip:Y9,constants:K9}=require("zlib");function W9(e){let t=`Found an uncaught exception with message: ${e.message}. ${JP.EOL}Stack: ${e.stack} ${JP.EOL}Terminating ${q9?"HDB":"thread"}.`;console.error(t),Su.fatal(t),process.exit(1)}a(W9,"handleServerUncaughtException");function Q9(e,t,r){if(Su[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:uf.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(Q9,"serverErrorHandler");function z9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=YT(new Error,"Invalid JSON.",uf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(G9.isEmpty(e.body.operation)){let s=YT(new Error,"Request body must include an 'operation' property.",uf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(z9,"reqBodyValidationHandler");function J9(e,t,r){let s;e.body.operation!==$T.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==$T.OPERATIONS_ENUM.LOGIN&&e.body.operation!==$T.OPERATIONS_ENUM.LOGOUT?$9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Su.warn(n),Su.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(YT(n,i,uf.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(J9,"authHandler");async function X9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=XP.chooseOperation(e.body);let n=await XP.processLocalTransaction(e,s);if(n instanceof x9&&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(Y9({level:K9.Z_BEST_SPEED})))}return n}catch(n){throw Su.error(n),n}}a(X9,"handlePostRequest");jP.exports={authHandler:J9,handlePostRequest:X9,handleServerUncaughtException:W9,serverErrorHandler:Q9,reqBodyValidationHandler:z9}});var rv=T((fde,tv)=>{"use strict";var j9=require("fastify-plugin"),{handlePostRequest:ZP,authHandler:Z9,reqBodyValidationHandler:e7}=lf();async function t7(e){e.decorate("hdbCore",{preValidation:[e7,Z9],request:t=>ev(ZP(t,response)),requestWithoutAuthentication:(t,r)=>ev(ZP(t,r,!0))})}a(t7,"hdbCore");async function ev(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(ev,"convertAsyncIterators");tv.exports=j9(t7)});var nv=T((hde,sv)=>{"use strict";var KT=require("fs"),ia=X();ia.initSync();var{CONFIG_PARAMS:Tu}=b(),r7=1024*1024*1024;function s7(e){let t=ia.get(Tu.HTTP_TIMEOUT),r=ia.get(Tu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:r7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=ia.get(Tu.TLS_PRIVATEKEY),i=ia.get(Tu.TLS_CERTIFICATE),o=ia.get(Tu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:KT.readFileSync(`${n}`),cert:KT.readFileSync(i)+(o?`
|
|
27
27
|
|
|
28
|
-
`+WT.readFileSync(o):"")},s.http2=!0}return s}a(n7,"getServerOptions");nv.exports=n7});var cv=T((Sde,av)=>{"use strict";var QT=X();QT.initSync();var{CONFIG_PARAMS:ov}=b();function i7(){let e=QT.get(ov.HTTP_CORSACCESSLIST),t=QT.get(ov.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(i7,"getCORSOptions");av.exports=i7});var _v=T((Rde,lv)=>{"use strict";var uv=X();uv.initSync();var o7=b();function a7(){return uv.get(o7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(a7,"getHeaderTimeoutConfig");lv.exports=a7});var XT={};Qe(XT,{customFunctionsServer:()=>l7,handleFile:()=>u7,ready:()=>f7});async function u7(e,t,r,s){if(!pn){let c=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);pn=Nv(c),ut.http((await pn).server)}let n=await pn,i=(0,fv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!dv.has(i)){dv.add(i);try{n.register(d7(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 l7(){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 _7();let e=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=pn=await Nv(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 _7(){try{De.info("Custom Functions starting configuration."),await Tv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function d7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Ev.existsSync)(e)&&r.register(Sv.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 Nv(e){De.info("Custom Functions starting buildServer.");let t=(0,Rv.default)(e),r=(0,hv.default)(t);r.server.headersTimeout=(0,Av.default)(),r.setErrorHandler(Ov.serverErrorHandler);let s=(0,gv.default)();return s&&r.register(mv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(pv.default),await r.register(c7),await r.after(),hT(r),De.info("Custom Functions completed buildServer."),r}function f7(){if(pn)return pn.then?pn.then(e=>e.ready()):pn.ready()}var fv,Ev,hv,mv,pv,Sv,zT,JT,De,c7,Tv,Rv,gv,Av,Ov,pn,dv,bv=Te(()=>{fv=require("path"),Ev=require("fs"),hv=D(require("fastify")),mv=D(require("@fastify/cors")),pv=D(ST()),Sv=D(require("@fastify/autoload")),zT=D(X()),JT=D(b()),De=D(G()),c7=D(sv()),Tv=D(xr()),Rv=D(iv()),gv=D(cv()),Av=D(_v()),Ov=D(uf());Yo();Mr();dv=new Set;a(u7,"handleFile");a(l7,"customFunctionsServer");a(_7,"setUp");a(d7,"buildRouteFolder");a(Nv,"buildServer");a(f7,"ready")});var jT={};Qe(jT,{start:()=>E7});function E7(e){return{handleFile(t,r,s){Iv||(Iv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=yv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,wv.default)(n,(0,Cv.realpathSync)(o))}}return i(n)},{runFirst:!0})),yv.set(r,s)}}}var wv,Cv,yv,Iv,Lv=Te(()=>{wv=D(require("send")),Cv=require("fs"),yv=new Map;a(E7,"start")});function p7(e,t=1,r){if(ZT++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:df.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===df.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});m7.push(n),await n,ia.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=_f.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ia.indexOf(s);o>-1&&ia.splice(o,1)}if(a(i,"removeWorker"),oa){let o=oa;oa=[];for(let c of o)Pv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{eR?eR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),ZT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function vv(e=0,t){if(typeof e=="string")try{(0,ff.existsSync)(e)&&(0,ff.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=S7:r=T7(t):r=tR;let s=(0,aa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Pv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eR=!0,r(o,(c,u)=>{if(!c){if(Dv){let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});Dv.deliverSocket(l,e,u),l.resume()}else ZT>0?(oa.length===0&&setTimeout(()=>{oa.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,oa.push(o)):(console.log("start up a dynamic thread to handle request"),p7(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 aa.Socket({handle:o,writable:!0,readable:!0});O7(l,c,e)}Nr(!0,"socket-routed")})};let n=Tc();Mv.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 tR(e,t){let r,s=0;for(let n of ia){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=lf)return lf=i,t(r);s=i}lf=0,t(r)}function S7(e,t){let r={};e.getpeername(r);let s=r.address,n=ca.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);tR(e,o=>{ca.set(s,{worker:o,lastUsed:i}),t(o)})}function T7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new aa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ca.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);tR(s,d=>{ca.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function g7(){lf=0;for(let e of ia)e.expectedIdle=e.recentELU.idle+R7,e.requests=1;ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function O7(e,t,r){let s=A7++;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(),_f.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")),_f.delete(s)),n.event=="destroy"&&(e.destroy(),_f.delete(s))})}var Ki,aa,df,Mv,ff,h7,ia,oa,Pv,Dv,ZT,m7,eR,lf,Uv,ca,R7,_f,A7,Bv=Te(()=>{Ki=D(Ze()),aa=require("net"),df=D(b()),Mv=D(G()),ff=require("fs");xn();({isMainThread:h7}=require("worker_threads")),ia=[],oa=[],Pv=[],ZT=0,m7=[];h7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(p7,"startHTTPWorker");a(vv,"startSocketServer");lf=0;a(tR,"findMostIdleWorker");Uv=36e5,ca=new Map;a(S7,"findByRemoteAddressAffinity");a(T7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ca)r.lastUsed+Uv<e&&ca.delete(t)},Uv).unref();R7=1e3;a(g7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(g7);_f=new Map,A7=1;a(O7,"proxySocket")});var Gv=T((Ude,qv)=>{"use strict";var N7=require("cluster"),As=X();As.initSync();var Fv=b(),Cde=require("util"),Sn=G(),rR=require("fs"),b7=require("fastify"),Lde=Tc(),y7=require("@fastify/cors"),I7=require("@fastify/compress"),w7=require("@fastify/static"),C7=ST(),L7=require("path"),{PACKAGE_ROOT:D7}=b(),U7=Pn(),M7=$(),P7=xr(),v7=tc(),{server:B7}=(Mr(),Z(eo)),{authHandler:H7,handlePostRequest:F7,serverErrorHandler:q7,reqBodyValidationHandler:G7}=uf(),Dde=require("net"),{registerContentHandlers:x7}=(Yo(),Z(FM)),k7=6e4,V7=1024*1024*1024,$7="TRUE",{CONFIG_PARAMS:Tn}=Fv,Wi;qv.exports={hdbServer:Hv,start:Hv};async function Hv(e){try{Sn.info("In Fastify server"+process.cwd()),Sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=N7.isMaster,await Y7();let t=As.get(Tn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=K7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{B7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),Sn.error(r),Sn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Sn.fatal(t),process.exit(1)}}a(Hv,"operationsServer");async function Y7(){Sn.trace("Configuring HarperDB process."),U7.setSchemaDataToGlobal(),await P7.setUsersToGlobal(),await v7.getLicense()}a(Y7,"setUp");function K7(e){Sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=W7(e),r=b7(t);r.server.headersTimeout=z7(),r.setErrorHandler(q7);let s=Q7();s&&r.register(y7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(C7),r.register(I7),r.register(w7,{root:L7.join(D7,"studio")}),x7(r);let n=As.get(Fv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!M7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[G7,H7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),F7(i,o)}),r.get("/health",()=>"HarperDB is running."),Sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(K7,"buildServer");function W7(e){let t=As.get(Tn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Tn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:V7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(Tn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(Tn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(Tn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:rR.readFileSync(n),cert:rR.readFileSync(i)+(o?`
|
|
28
|
+
`+KT.readFileSync(o):"")},s.http2=!0}return s}a(s7,"getServerOptions");sv.exports=s7});var av=T((pde,ov)=>{"use strict";var WT=X();WT.initSync();var{CONFIG_PARAMS:iv}=b();function n7(){let e=WT.get(iv.HTTP_CORSACCESSLIST),t=WT.get(iv.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(n7,"getCORSOptions");ov.exports=n7});var lv=T((Tde,uv)=>{"use strict";var cv=X();cv.initSync();var i7=b();function o7(){return cv.get(i7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(o7,"getHeaderTimeoutConfig");uv.exports=o7});var JT={};Qe(JT,{customFunctionsServer:()=>u7,handleFile:()=>c7,ready:()=>d7});async function c7(e,t,r,s){if(!Sn){let c=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Sn=Ov(c),ut.http((await Sn).server)}let n=await Sn,i=(0,dv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!_v.has(i)){_v.add(i);try{n.register(_7(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 u7(){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 l7();let e=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Sn=await Ov(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 l7(){try{De.info("Custom Functions starting configuration."),await Sv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function _7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,fv.existsSync)(e)&&r.register(pv.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 Ov(e){De.info("Custom Functions starting buildServer.");let t=(0,Tv.default)(e),r=(0,Ev.default)(t);r.server.headersTimeout=(0,gv.default)(),r.setErrorHandler(Av.serverErrorHandler);let s=(0,Rv.default)();return s&&r.register(hv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(mv.default),await r.register(a7),await r.after(),ET(r),De.info("Custom Functions completed buildServer."),r}function d7(){if(Sn)return Sn.then?Sn.then(e=>e.ready()):Sn.ready()}var dv,fv,Ev,hv,mv,pv,QT,zT,De,a7,Sv,Tv,Rv,gv,Av,Sn,_v,Nv=Te(()=>{dv=require("path"),fv=require("fs"),Ev=D(require("fastify")),hv=D(require("@fastify/cors")),mv=D(pT()),pv=D(require("@fastify/autoload")),QT=D(X()),zT=D(b()),De=D(q()),a7=D(rv()),Sv=D(xr()),Tv=D(nv()),Rv=D(av()),gv=D(lv()),Av=D(lf());Ko();Mr();_v=new Set;a(c7,"handleFile");a(u7,"customFunctionsServer");a(l7,"setUp");a(_7,"buildRouteFolder");a(Ov,"buildServer");a(d7,"ready")});var XT={};Qe(XT,{start:()=>f7});function f7(e){return{handleFile(t,r,s){yv||(yv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=bv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Iv.default)(n,(0,wv.realpathSync)(o))}}return i(n)},{runFirst:!0})),bv.set(r,s)}}}var Iv,wv,bv,yv,Cv=Te(()=>{Iv=D(require("send")),wv=require("fs"),bv=new Map;a(f7,"start")});function m7(e,t=1,r){if(jT++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:ff.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===ff.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});h7.push(n),await n,oa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=df.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=oa.indexOf(s);o>-1&&oa.splice(o,1)}if(a(i,"removeWorker"),aa){let o=aa;aa=[];for(let c of o)Mv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{ZT?ZT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),jT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Pv(e=0,t){if(typeof e=="string")try{(0,Ef.existsSync)(e)&&(0,Ef.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=p7:r=S7(t):r=eR;let s=(0,ca.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Mv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),ZT=!0,r(o,(c,u)=>{if(!c){if(Lv){let l=o._socket||new ca.Socket({handle:o,writable:!0,readable:!0});Lv.deliverSocket(l,e,u),l.resume()}else jT>0?(aa.length===0&&setTimeout(()=>{aa.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,aa.push(o)):(console.log("start up a dynamic thread to handle request"),m7(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 ca.Socket({handle:o,writable:!0,readable:!0});A7(l,c,e)}Nr(!0,"socket-routed")})};let n=Rc();Uv.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 eR(e,t){let r,s=0;for(let n of oa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=_f)return _f=i,t(r);s=i}_f=0,t(r)}function p7(e,t){let r={};e.getpeername(r);let s=r.address,n=ua.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);eR(e,o=>{ua.set(s,{worker:o,lastUsed:i}),t(o)})}function S7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new ca.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ua.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);eR(s,d=>{ua.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function R7(){_f=0;for(let e of oa)e.expectedIdle=e.recentELU.idle+T7,e.requests=1;oa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function A7(e,t,r){let s=g7++;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(),df.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")),df.delete(s)),n.event=="destroy"&&(e.destroy(),df.delete(s))})}var Wi,ca,ff,Uv,Ef,E7,oa,aa,Mv,Lv,jT,h7,ZT,_f,Dv,ua,T7,df,g7,vv=Te(()=>{Wi=D(Ze()),ca=require("net"),ff=D(b()),Uv=D(q()),Ef=require("fs");kn();({isMainThread:E7}=require("worker_threads")),oa=[],aa=[],Mv=[],jT=0,h7=[];E7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(m7,"startHTTPWorker");a(Pv,"startSocketServer");_f=0;a(eR,"findMostIdleWorker");Dv=36e5,ua=new Map;a(p7,"findByRemoteAddressAffinity");a(S7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ua)r.lastUsed+Dv<e&&ua.delete(t)},Dv).unref();T7=1e3;a(R7,"updateWorkerIdleness");(0,Wi.setMonitorListener)(R7);df=new Map,g7=1;a(A7,"proxySocket")});var Gv=T((Dde,Fv)=>{"use strict";var O7=require("cluster"),As=X();As.initSync();var Hv=b(),wde=require("util"),Tn=q(),tR=require("fs"),N7=require("fastify"),Cde=Rc(),b7=require("@fastify/cors"),y7=require("@fastify/compress"),I7=require("@fastify/static"),w7=pT(),C7=require("path"),{PACKAGE_ROOT:L7}=b(),D7=vn(),U7=$(),M7=xr(),P7=rc(),{server:v7}=(Mr(),Z(to)),{authHandler:B7,handlePostRequest:H7,serverErrorHandler:F7,reqBodyValidationHandler:G7}=lf(),Lde=require("net"),{registerContentHandlers:q7}=(Ko(),Z(HM)),x7=6e4,k7=1024*1024*1024,V7="TRUE",{CONFIG_PARAMS:Rn}=Hv,Qi;Fv.exports={hdbServer:Bv,start:Bv};async function Bv(e){try{Tn.info("In Fastify server"+process.cwd()),Tn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Tn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=O7.isMaster,await $7();let t=As.get(Rn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=Y7(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{v7.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),Tn.error(r),Tn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Tn.fatal(t),process.exit(1)}}a(Bv,"operationsServer");async function $7(){Tn.trace("Configuring HarperDB process."),D7.setSchemaDataToGlobal(),await M7.setUsersToGlobal(),await P7.getLicense()}a($7,"setUp");function Y7(e){Tn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=K7(e),r=N7(t);r.server.headersTimeout=Q7(),r.setErrorHandler(F7);let s=W7();s&&r.register(b7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(w7),r.register(y7),r.register(I7,{root:C7.join(L7,"studio")}),q7(r);let n=As.get(Hv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!U7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[G7,B7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),H7(i,o)}),r.get("/health",()=>"HarperDB is running."),Tn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Y7,"buildServer");function K7(e){let t=As.get(Rn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Rn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:k7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(Rn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(Rn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(Rn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:tR.readFileSync(n),cert:tR.readFileSync(i)+(o?`
|
|
29
29
|
|
|
30
|
-
`+rR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(W7,"getServerOptions");function Q7(){let e=As.get(Tn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Tn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===$7)&&(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(Q7,"getCORSOpts");function z7(){return As.get(Tn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??k7}a(z7,"getHeaderTimeoutConfig")});var jv=T((Hde,Xv)=>{"use strict";var{decode:J7}=require("msgpackr"),{isMainThread:Pde,parentPort:X7,threadId:vde}=require("worker_threads"),Vv=dt(),Rn=ke(),j7=b(),Tu=G(),xv=X(),$v=b();Ze();var Z7=nn(),{recordAction:eee,recordActionBinary:tee}=(xn(),Z(A_)),{publishToStream:ree}=Vv,Bde={durable:Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Rn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},see,nee,iee,Yv,Kv;Xv.exports={initialize:Wv,workQueueListener:Jv,setSubscription:oee,setIgnoreOrigin:cee,getDatabaseSubscriptions:aee};async function Wv(){Kv=!0,Tu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Vv.getNATSReferences();see=e,nee=e.info.server_name,iee=t,Yv=r}a(Wv,"initialize");var hf=new Map;function oee(e,t,r){let s=hf.get(e);s||hf.set(e,s=new Map),s.set(t,r),Kv||Wv().then(Jv)}a(oee,"setSubscription");function aee(){return hf}a(aee,"getDatabaseSubscriptions");var Qv;function cee(e){Qv=e}a(cee,"setIgnoreOrigin");var zv=100,kv=new Array(zv),Ef=0;async function Jv(){let t=await(await Yv.consumers.get(Rn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();X7?.on("message",async r=>{let{type:s}=r;s===$v.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await kv[Ef],kv[Ef]=uee(r).catch(s=>{Tu.error(s)}),++Ef>=zv&&(Ef=0)}a(Jv,"workQueueListener");async function uee(e){let t=J7(e.data);eee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=xv.get(j7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Rn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!Qv),tee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Rn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Tu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Tu.trace(`messageProcessor nats msg id: ${e.headers.get(Rn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=hf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:sR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:sR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:sR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}xv.get($v.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ree(e.subject.split(".").slice(0,-1).join("."),Z7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Tu.error(o)}e.ack()}a(uee,"messageProcessor");function sR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sR,"convertOperation")});var uR={};Qe(uR,{disableNATS:()=>_ee,publishToStream:()=>Rf,setNATSReplicator:()=>nR,setPublishToStream:()=>dee,setSubscription:()=>cR,start:()=>lee});function lee(){pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Eee()}function _ee(e=!0){s0=e}function dee(e,t){Rf=e,cR=t}function Eee(){if(s0||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];nR(n,r,i)}}lR((r,s)=>{nR(r.tableName,r.databaseName,r),s&&i0(r)}),!Zv&&(Zv=!0)}function nR(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){i0(i)}static subscribe(){let i=new is;return cR(t,e,i),i}static subscribeOnThisThread(i){return i<fee}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 mf(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 i0(e){let t=pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Rf(`${oR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aR.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 e0,oR,aR,t0,r0,pf,Sf,Tf,s0,Rf,cR,fee,n0,Zv,mf,iR,o0=Te(()=>{fe();as();e0=D(dt()),oR=D(ke()),aR=D(nn());Pa();t0=D(jv()),r0=D(mr()),pf=D(X()),Sf=D(b()),Tf=D(G());a(lee,"start");a(_ee,"disableNATS");Rf=e0.publishToStream,cR=t0.setSubscription;a(dee,"setPublishToStream");fee=2;a(Eee,"assignReplicationSource");a(nR,"setNATSReplicator");a(i0,"publishSchema");mf=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=pf.default.get(Sf.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||(Tf.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(Rf(`${oR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,aR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Tf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},iR=class extends mf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,r0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};n0=new iR});async function c0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await _R.getResource(e,{});n=new fR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await _R.get(e);i&&i.delete()}n=new Af(e,t)}return n}function dR(){return gf++,gf>65500&&(gf=1),gf}var a0,ua,_R,gf,Af,fR,u0=Te(()=>{fe();Qc();a0=D(mr()),ua=D(G());di();_R=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(c0,"getSession");gf=1;a(dR,"getNextMessageId");Af=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,ua.trace)("Resuming subscription from",n,"from",o);let h=Qn.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=dR());let Q=N.id;Array.isArray(Q)&&(Q=$o(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,ua.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=dR();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=Qn.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=[]}},fR=class extends Af{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=dR(),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,ua.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,a0.getNextMonotonicTime)()),(0,ua.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),_R.put(this.sessionRecord)),t.qos}}});var hR={};Qe(hR,{start:()=>mee});async function mee({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}=d0(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;hee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,f0.getSuperUser)());let{onMessage:u,onClose:_}=d0(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 d0(e,t,r,s,n){_0||(_0=!0,Ac(d=>{Of>0&&d.push({metric:"mqtt-connections",connections:Of,byThread:!0})}));let i;Of++;let o,c={protocolVersion:4},u=(0,Nf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Of--,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,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&l0.notify({username:s.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&l0.error({username:s.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.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=c0({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,q)=>{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:q.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=jo(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,Nf.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 Nf,f0,ER,gn,Xr,l0,hee,_0,Of,E0=Te(()=>{Nf=require("mqtt-packet");u0();f0=D(xr());Yo();xn();Mr();ER=D(X()),gn=D(b()),Xr=D(G()),l0=(0,Xr.loggerWithTag)("auth-event"),hee=!0;a(mee,"start");Of=0;a(d0,"onSocket")});var m0,h0,mR,p0=Te(()=>{m0=require("os"),h0=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,m0.platform)()!="win32"&&(mR=require("node-unix-socket").createReuseportFd)});var bd={};Qe(bd,{component_errors:()=>la,loadComponent:()=>bf,loadComponentDirectories:()=>y0,setErrorReporter:()=>Ree});function y0(e,t){t&&(SR=t),e&&(TR=e);let r=[];if((0,Os.existsSync)(pR)){let n=(0,Os.readdirSync)(pR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(pR,o);r.push(bf(c,SR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(bf(s,SR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{b0=!0})}function Ree(e){Au=e}async function bf(e,t,r,s,n,i){if(!T0.has(e)){T0.set(e,!0),n&&(TR=n);try{let o;s&&(la=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,N0.getConfigObj)():(0,R0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=RR;let u=[],_=s;for(let l in o){let d=o[l];if(la.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,O0.getHdbBasePath)().length){N=null;break}if(N)f=await bf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Tee[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(Ru.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&&!S0.includes(I)){let N=gR.get(AR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&gu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!mR)&&(S0.push(I),vv(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),TR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,A0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==RR[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,g0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:q}=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(q.isFile()){let x=await See(Q);Ru.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Ru.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${q.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Au?.(x),((0,_a.getWorkerIndex)()===0?console:gu.default).error(x),t.set(d.path||"/",new Ou(x)),la.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}`,Au?.(h),((0,_a.getWorkerIndex)()===0?console:gu.default).error(h),t.set(d.path||"/",new Ou(h),null,!0),la.set(s?l:(0,gt.basename)(e),h.message)}}if(Ru.isMainThread&&!b0&&i&&(0,_a.watchDir)(e,async()=>y0()),o.extensionModule)return await Tl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Au?.(new Error(l)),((0,_a.getWorkerIndex)()===0?console:gu.default).error(l),la.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}`,Au?.(o),t.set("",new Ou(o))}}}var Os,gt,Ru,R0,gR,AR,g0,_a,gu,A0,O0,pee,N0,See,pR,TR,b0,SR,la,Tee,RR,S0,T0,Au,Ou,yd=Te(()=>{Os=require("fs"),gt=require("path"),Ru=require("worker_threads"),R0=require("yaml"),gR=D(X()),AR=D(b());qA();VA();$A();xM();bv();Lv();g0=D(require("fast-glob")),_a=D(Ze()),gu=D(G());UE();Mr();A0=D(j());as();fe();Bv();O0=D(X()),pee=D(Gv());pd();o0();E0();N0=D(hr());p0();({readFile:See}=Os.promises),pR=gR.get(AR.CONFIG_PARAMS.COMPONENTSROOT),TR=new Map,la=new Map;a(y0,"loadComponentDirectories");Tee={REST:Gd,rest:Gd,graphqlSchema:DE,jsResource:PE,fastifyRoutes:XT,login:BE,static:jT,operationsApi:pee,customFunctions:{},http:{},clustering:uR,authentication:zc,mqtt:hR},RR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(RR,"static",{value:{files:"web/**"}});S0=[],T0=new Map;a(Ree,"setErrorReporter");a(bf,"loadComponent");Ou=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 C0=T((Efe,w0)=>{var{isMainThread:I0}=require("worker_threads"),{getTables:gee}=(fe(),Z(Ce)),{loadComponentDirectories:Aee,loadComponent:Oee}=(yd(),Z(bd)),{resetResources:Nee}=(Qc(),Z(aU)),bee=KS(),yee=hr(),{dirname:Iee}=require("path"),{getConnection:wee}=dt(),Cee=X(),Lee=b(),OR=new Map;async function Dee(e=!1){!I0&&Cee.get(Lee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&wee();try{I0&&await bee()}catch(s){console.error(s)}let t=Nee();gee(),t.isWorker=e,await Oee(Iee(yee.getConfigFilePath()),t,"hdb",!0,OR),await Aee(OR,t);let r=[];for(let[s]of OR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Dee,"loadRootComponents");w0.exports.loadRootComponents=Dee});var Ze=T((mfe,Zn)=>{"use strict";var{Worker:Uee,MessageChannel:Mee,parentPort:Ys,isMainThread:wR,threadId:Pee,workerData:An}=require("worker_threads"),{PACKAGE_ROOT:vee}=b(),{join:M0,isAbsolute:Bee,extname:Hee}=require("path"),{server:P0}=(Mr(),Z(eo)),{watch:Fee,readdir:qee}=require("fs/promises"),{totalmem:L0}=require("os"),wf=b(),Gee=X(),On=G(),{randomBytes:xee}=require("crypto"),{_assignPackageExport:kee}=require("../../index"),Vee=b(),D0=1024*1024,jn=[],jr=[],$ee=50,CR=1e4,Yee="restart",v0="request_thread_info",B0="resource_report",H0="thread_info",F0="added-port",Kee="ack",NR;kee("threads",jr);Zn.exports={startWorker:bR,restartWorkers:DR,shutdownWorkers:Xee,workers:jn,setMonitorListener:ite,onMessageFromWorkers:jee,onMessageByType:$0,broadcast:ete,broadcastWithAcknowledgement:rte,setChildListenerByType:Jee,getWorkerIndex:q0,getWorkerCount:G0,getTicketKeys:x0,setMainIsWorker:Qee,setTerminateTimeout:Wee,restartNumber:An?.restartNumber||1};jr.onMessageByType=$0;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 LR;function Wee(e){CR=e}a(Wee,"setTerminateTimeout");function q0(){return An?An.workerIndex:LR?0:void 0}a(q0,"getWorkerIndex");function G0(){return An?An.workerCount:LR?1:void 0}a(G0,"getWorkerCount");function Qee(e){LR=e}a(Qee,"setMainIsWorker");var yf;function x0(){return yf||(yf=wR?xee(48):An.ticketKeys,yf)}a(x0,"getTicketKeys");Object.defineProperty(P0,"workerIndex",{get(){return q0()}});Object.defineProperty(P0,"workerCount",{get(){return G0()}});var k0={[v0](e,t){ste(t)},[B0](e,t){nte(t,e)}};function bR(e,t={}){let r=process.constrainedMemory?.()||L0();r=Math.min(r,L0(),2e4*D0);let s=Math.max(Math.floor(r/D0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new Mee;_.existingPort=u,i.push(_),o.push(_.port2)}Hee(e)||(e+=".js");let c=new Uee(Bee(e)?e:M0(vee,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:Zn.exports.restartNumber,ticketKeys:x0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:F0,port:u,threadId:c.threadId},[u]);return Cf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>bR(e,t),c.on("error",u=>{console.error("Worker error:",u),On.error("Worker error:",u)}),c.on("exit",u=>{jn.splice(jn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<$ee?(t.unexpectedRestarts=c.unexpectedRestarts+1,bR(e,t)):On.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{k0[u.type]?.(u,c)}),jn.push(c),ate(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(bR,"startWorker");var zee=[wf.THREAD_TYPES.HTTP];async function DR(e=null,t=2,r=!0){if(wR){if(r){let{loadRootComponents:o}=C0();await o()}Zn.exports.restartNumber++,t<1&&(t=t*jn.length);let s=[],n=[];for(let o of jn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;On.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Zn.exports.restartNumber,type:wf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=zee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),CR*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===Vee.ITC_EVENT_TYPES.CHILD_STARTED&&(On.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");On.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}=dd();r&&(e==="http"||!e)&&Gee.get(wf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Yee,workerType:e})}a(DR,"restartWorkers");function Jee(e,t){k0[e]=t}a(Jee,"setChildListenerByType");function Xee(e){return DR(e,1/0,!1)}a(Xee,"shutdownWorkers");var V0=[];function jee(e){V0.push(e)}a(jee,"onMessageFromWorkers");var yR=new Map;function $0(e,t){let r=yR.get(e);r||yR.set(e,r=[]),r.push(t)}a($0,"onMessageByType");var Zee=10;async function ete(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Zee&&(t=0,await new Promise(setImmediate))}catch(s){On.error("Unable to send message to worker",s)}}a(ete,"broadcast");var If=new Map,tte=1;function rte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=tte++,i=a(()=>{If.delete(n),--r===0&&t(),s!==Ys&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,If.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of If)o.port===s&&o()})),s.postMessage(e),r++}catch(n){On.error("Unable to send message to worker",n)}r===0&&t()})}a(rte,"broadcastWithAcknowledgement");function ste(e){e.postMessage({type:H0,workers:Y0()})}a(ste,"sendThreadInfo");function Y0(){let e=Date.now();return jn.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(Y0,"getChildWorkerInfo");function nte(e,t){e.resources=t,e.resources.updated=Date.now()}a(nte,"recordResourceReport");var IR;function ite(e){IR=e}a(ite,"setMonitorListener");var ote=1e3,U0=!1;function ate(){U0||(U0=!0,setInterval(()=>{for(let e of jn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}IR&&IR()},ote).unref())}a(ate,"startMonitoring");var cte=1e3;if(Ys){Cf(Ys);for(let e=0,t=An.addPorts.length;e<t;e++){let r=An.addPorts[e];r.threadId=An.addThreadIds[e],Cf(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:B0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},cte).unref(),NR=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:v0});function r(s){s.type===H0&&(Ys.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else NR=Y0;Zn.exports.getThreadInfo=NR;function Cf(e,t){jr.push(e),e.on("message",r=>{if(r.type===F0)r.port.threadId=r.threadId,Cf(r.port);else if(r.type===Kee){let s=If.get(r.id);s&&s()}else{for(let n of V0)n(r,e);let s=yR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){On.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(Cf,"addPort");if(wR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await qee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(M0(s,i.name));try{for await(let{filename:i}of Fee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await DR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Zn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===wf.ITC_EVENT_TYPES.SHUTDOWN&&(Zn.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{On.warn("Thread did not voluntarily terminate",Pee),process.exit(0)},CR).unref())})});function W0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;da||((0,bu.onMessageByType)(K0,d=>{Q0(d.path)}),(0,bu.onMessageByType)(ute,d=>{(0,Nu.trace)("confirming to proceed with txn",d.txnId)}),da=Object.create(null));let c=da[i]||(da[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=$o(t);let _=new MR(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 Q0(e,t){if(!da)return;let r=da[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:UR,exclusiveStart:!0})){UR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=$o(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,Nu.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,Nu.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"},UR,!0)}function z0(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,bu.broadcast)({type:K0,path:n}),Q0(n,!0)})}}var Nu,bu,K0,ute,da,Afe,MR,UR,J0=Te(()=>{Nu=D(G()),bu=D(Ze());Pa();Qc();io();K0="transaction",ute="transaction-await",Afe=Buffer.alloc(4096);a(W0,"addSubscription");MR=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"}}},UR=Date.now();a(Q0,"notifyFromTransactionData");a(z0,"listenToCommits")});var MT={};Qe(MT,{coerceType:()=>Pf,makeTable:()=>Hf,setServerUtilities:()=>Ste,updateResource:()=>Cu});function Hf(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=[]),z0(i,u);let S=nh(i,s,u),A=0,I,N,Y,Q={},q=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,Mt=2,Pe={},At={},es=864e5,zR,qu,VB=10,$B=6;E&&jR();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,ie)=>{if(V?.source!==M)return M[y](z,ie,V)}}else return(M,V,z)=>{let ie=[];for(let k of U){if(M?.source===k)break;ie.push(k[y](V,z,M))}return Promise.all(ie)}},"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,ie=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[ie.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await ie.getResource(M.id,V,yu);switch(M.type){case"put":return k._writeUpdate(z,yu);case"delete":return k._writeDelete(yu);case"publish":return k._writePublish(z,yu);case"invalidate":return k.invalidate(yu);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,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ie;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,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Pt of k.writes)try{ne.push(U(Pt,k))}catch(kt){throw kt.message+=" writing "+JSON.stringify(Pt)+" of event "+JSON.stringify(k),kt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Pt;for(let kt of k.attributes)ne.find(ii=>ii.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Du.signalSchemaChange(new Uu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});y&&(await Ne,Du.signalUserChange(new Uu.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){pa(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=In(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return JR(m,g,{transaction:U},L,M=>{if(M?Cu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Ws.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[vR]=!0,HR(V,z=>(Cu(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[Ks],this[me]);if(m)return this[vR]=!0,HR(m,g=>{this[Ks]=g,this[Re]=g.value,this[Mf]=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,Xf()}static enableAuditing(m=!0){E=m,m&&jR(),at.audit=m}static coerceId(m){return m===""?null:Pf(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));Du.signalSchemaChange(new Uu.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=xu(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=BR(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=xu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=BR(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=xu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=BR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return xu(m)?.delete}update(m,g){if(!In(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[vt]=m}else R=this[vt],R&&(m=Object.assign(R,m)),this[vt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];pa(C),In(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ks],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[Ks],L,Lf,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,Df,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Gu(m,g,null)}),E)S(m,null,L,C,Df,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,sB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=In(C),L=this[we];pa(L);let y=this[Ks];this[PR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[j0]||ul(m)){if(this.validate(m),C?.source?m=va(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=va(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),Cu(this,V));let ie=V?.value;this[PR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Gu(L,ie,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=In(this[me]),C=this[we];pa(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),Cu(this,y)),!(y?.version>L)&&(Gu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ks],L,0,E,this[me],0,"delete"),E||Xf()):i.remove(this[we]))}}),!0}search(m){let g=In(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,Ws.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Pf(Ne,Ee)):Pf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,rB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===wu.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===wu.SEARCH_TYPES.CONTAINS||Ee===wu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===wu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=dte:k.estimated_count=_te}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))):Uf.SKIP);else{let k=bE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(yE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=bE(ne,y,C,at,m.allowFullScan);k=k.concat(Pt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(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 ie(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Pt=m.ensureLoaded!==!1;function kt(ii,He){if(Pt&&He!==void 0){let lr=!z.onlyIfCached&&Jf(He,ii,z,this);if(lr)return lr.then(WB=>kt(WB))}let bs=ii?.value;if(!bs)return Uf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Uf.SKIP;return bs}return a(kt,"processEntry"),k.map(ii=>JR(ii,z,ne,!1,kt))}return a(ie,"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=W0(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 Ws.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||tB(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||tB(C,z)){let ie=V.getValue(i);if(y.push({id:z,timestamp:U,value:ie,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,vf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ks]?.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),ie=z.getValue(i);U.push({id:C,value:ie,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[Mf],timestamp:this[Ks]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[PR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=In(this[me]),R=this[we]||null;pa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ks],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&&Xf(),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],ie=C(R[z.name],z,y+"."+z.name);ie&&(R[z.name]=ie)}}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 Ws.ClientError(g.join(". "))}getUpdatedTime(){return this[Mf]}wasLoadedFromSource(){return N?!!this[vR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Ws.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Ws.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:Pt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Pt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,ie=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*ie,0),Ne=Math.min(k+1.96*ie,g),ne=Math.pow(10,Math.round(Math.log10(ie)));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(){_l(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Iu(),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 Iu();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 Iu();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 YB=at.prototype;return YB[j0]=!0,d&&at.setTTLExpiration(d/1e3),B&&KB(),at;function Gu(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,Lu.getIndexedValues)(M);if(V){X0&&L.prefetch(V.map(z=>({key:z,value:W})),eB);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Lu.getIndexedValues)(U),V){X0&&L.prefetch(V.map(z=>({key:z,value:W})),eB);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(Gu,"updateIndices");function pa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>Z0)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,vf.writeKey)(W,mte,0)>Z0)throw new Error("Primary key size is too large: "+W.length);return!0}a(pa,"checkValidId");function JR(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>$B&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Mt>2&&Mt--}else se=Mt,Mt<VB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(JR,"loadLocalRecord");function xu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return pte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(xu,"getTablePermissions");function Jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Lf|Df)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=XR(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 Ws.ServerError("Entry is not cached",504);return}else return L}}}a(Jf,"ensureLoadedFromSource");function In(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 _i,m.lmdbDb=i,m;m=g}while(!0)}else return new El}a(In,"txnForContext");async function XR(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&(Lf|Df)?L(XR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},hte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,ie)=>{let k;HR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Pt,kt;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;kt=C&Lf;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Lu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Nr(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=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)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}In(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=Gu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Pt||null,M,0,"delete",!!kt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(XR,"getFromSource");function Xf(){if(es!==zR&&(zR=es,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!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`),qu=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);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+Ete<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Iu();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(Xf,"scheduleCleanup");function jR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(jR,"addDeleteRemoval");function KB(){(0,Qi.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 Iu()}}catch(W){Ke.error("Error in evicting old records",W)}},fte).unref()}a(KB,"runRecordExpirationEviction")}function BR(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 eB(){}function Ste(e){sB=e}function Pf(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"&&!Tte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Bf.autoCast)(e)}function tB(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 HR(e,t,r){return e?.then?e.then(t,r):t(e)}function Cu(e,t){e[Ks]=t,e[Re]=t?.value??null,e[Mf]=t?.version}var Ns,Uf,Lu,rB,wu,Mu,Ws,Du,Uu,Ke,vf,Qi,Bf,lte,sB,_te,dte,fte,Ete,X0,hte,Mf,j0,Ks,PR,vR,yu,Lf,Df,mte,Z0,pte,qfe,Tte,Iu,Zd=Te(()=>{Ns=D(b()),Uf=require("lmdb"),Lu=D(mr()),rB=require("lodash");as();OE();wu=D(ze()),Mu=D(X());J0();Ws=D(j()),Du=D(on()),Uu=D(ds());fe();ml();Ke=D(G());fl();di();vf=require("ordered-binary"),Qi=D(Ze());io();Bf=D($());Ga();xn();lte=new Uint8Array(9);lte[8]=192;_te=1e8,dte=1e7,fte=6e4,Ete=864e5;Mu.initSync();X0=Mu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hte=1e4,Mf=Symbol.for("version"),j0=Symbol.for("incremental-update"),Ks=Symbol("entry"),PR=Symbol("is-saving"),vR=Symbol("loaded-from-source"),yu={isNotification:!0,ensureLoaded:!1},Lf=1,Df=8,mte=Buffer.allocUnsafeSlow(8192),Z0=1978,pte={read:!0,insert:!0,update:!0,delete:!0},qfe=(0,Bf.convertToMS)(Mu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Hf,"makeTable");a(BR,"attributesAsObject");a(eB,"noop");a(Ste,"setServerUtilities");Tte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Pf,"coerceType");a(tB,"isDescendantId");Iu=a(()=>new Promise(setImmediate),"rest");a(HR,"when");a(Cu,"updateResource")});var Ce={};Qe(Ce,{database:()=>hc,databases:()=>xe,dropDatabase:()=>Wm,dropTableMeta:()=>bte,getDatabases:()=>hs,getTables:()=>Rte,onUpdatedTable:()=>lR,readMetaDb:()=>Pu,resetDatabases:()=>gte,table:()=>et,tables:()=>pr});function Rte(){return kf||hs(),pr||{}}function hs(){if(kf)return xe;kf=!0,ha=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),t=(0,xt.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,xt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,wr.existsSync)(e)?e:(0,Fe.join)((0,xt.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,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Pu((0,Fe.join)(e,r.name),null,s)}if((0,wr.existsSync)((0,Ea.getBaseSchemaPath)())){for(let r of(0,wr.readdirSync)((0,Ea.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Ea.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Ea.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,wr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Pu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,wr.existsSync)(n))for(let o of(0,wr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Pu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,wr.existsSync)(u)&&Pu(u,o,r,null,!0)}}for(let r in xe){let s=ha.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[Vf]}}return ha=null,xe}}function gte(){kf=!1;for(let[,e]of ei)e.needsDeletion=!0;hs();for(let[e,t]of ei)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ei.delete(e));return xe}function Pu(e,t,r=GR,s,n){let i=new FR.default(e,!1);try{let o=ei.get(e);o?o.needsDeletion=!1:(o=(0,qf.open)(i),ei.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Ff.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,wr.existsSync)(s)&&(i.path=s,_=(0,qf.open)(i),_.isLegacy=!0):_=Al(o));let l=aB(r),d=l[Vf],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,q=typeof S.audit=="boolean"?S.audit:(0,xt.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(fa)||0)&&u.putSync(fa,Y+1):(S.tableId=Y=u.get(fa),Y||(Y=1),u.putSync(fa,Y+1),u.putSync(S.key,S));let x=new zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Il(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 zi.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=cB(l,E,Hf({primaryStore:Q,auditStore:_,audit:q,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 xR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function aB(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)),ha&&!ha.has(e)){let r=new Set;t[Vf]=r,ha.set(e,r)}return t}function cB(e,t,r){return e[t]=r,r}function hc({database:e,table:t}){e||(e=GR),hs();let r=aB(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),n=(0,xt.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,xt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||((0,wr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ei.get(o);if(!c){let u=new FR.default(o,!1);c=(0,qf.open)(u),ei.set(o,c)}return c}async function Wm(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;ei.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[Vf]}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=GR);let l=hc({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 zi.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=Al(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(Cr.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 zi.default(!1,!0),B=e+"/",x=Il(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Ff.INTERNAL_DBIS_NAME,A),x.tableId=S.get(fa),x.tableId||(x.tableId=1),S.putSync(fa,x.tableId+1),h.tableId=x.tableId,f=cB(d,e,Hf({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,q(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Ff.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){q(),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,q(),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 zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!0,q(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.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,q(),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=Nte(f,Q,Y):I&&Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of xR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function q(){N||l.transactionSync(()=>({then(w){N=w}}))}a(q,"startTxn")}async function Nte(e,t,r){try{let s=e.schemaVersion;await Gf.signalSchemaChange(new xf.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,iB.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)}),vu.workerData&&vu.workerData.restartNumber!==oB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Ate?await n:u>Ote&&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 Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function bte({table:e,database:t}){let r=hc({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 lR(e){xR.push(e)}var xt,Ff,qf,Fe,wr,Ea,zi,FR,Cr,nB,qR,iB,Gf,xf,vu,Zr,oB,GR,Vf,pr,xe,fa,xR,kf,ei,ha,Ate,Ote,fe=Te(()=>{xt=D(X()),Ff=D(ze()),qf=require("lmdb"),Fe=require("path"),wr=require("fs"),Ea=D(ve());Zd();zi=D(wl()),FR=D(Ll()),Cr=D(b()),nB=D(require("fs-extra")),qR=require("../../index"),iB=D(mr()),Gf=D(on()),xf=D(ds()),vu=require("worker_threads"),Zr=D(G()),oB=D(Ze());io();Ga();GR="data",Vf=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,qR._assignPackageExport)("databases",xe);(0,qR._assignPackageExport)("tables",pr);fa=Symbol.for("next-table-id"),xR=[],ei=new Map;a(Rte,"getTables");a(hs,"getDatabases");a(gte,"resetDatabases");a(Pu,"readMetaDb");a(aB,"ensureDB");a(cB,"setTable");a(hc,"database");a(Wm,"dropDatabase");a(et,"table");Ate=1e3,Ote=10;a(Nte,"runIndexing");a(bte,"dropTableMeta");a(lR,"onUpdatedTable")});var $=T((Qfe,AB)=>{"use strict";var ti=require("path"),fB=require("fs-extra"),cr=G(),uB=require("fs-extra"),$f=require("os"),yte=require("net"),Ite=require("recursive-iterator"),We=b(),wte=Dg(),lB=require("papaparse"),Yf=require("moment"),{inspect:Cte}=require("util"),_B=require("is-number"),Wfe=require("lodash"),Lte=require("minimist"),Dte=require("https"),Ute=require("http"),{hdb_errors:Kf}=j(),Mte=/^((\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)))$/,EB=require("util").promisify(setTimeout),Pte=100,vte=5,Bte="",Hte=4,dB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};AB.exports={isEmpty:Lr,isEmptyOrZeroLength:Qs,arrayHasEmptyValues:Gte,arrayHasEmptyOrZeroLengthValues:xte,buildFolderPath:kte,isBoolean:hB,errorizeMessage:Fte,stripFileExtension:$te,autoCast:Yte,autoCastJSON:mB,autoCastJSONDeep:VR,removeDir:Kte,compareVersions:Wte,isCompatibleDataVersion:Qte,escapeRawValue:zte,unescapeValue:Jte,stringifyProps:Xte,timeoutPromise:Zte,isClusterOperation:tre,getClusterUser:sre,checkGlobalSchemaTable:rre,getHomeDir:SB,getPropsFilePath:jte,promisifyPapaParse:nre,removeBOM:TB,createEventPromise:ire,checkProcessRunning:ore,checkSchemaTableExist:are,checkSchemaExists:RB,checkTableExists:gB,getStartOfTomorrowInSeconds:cre,getLimitKey:ure,isObject:Vte,isNotEmptyAndHasValue:qte,autoCasterIsNumberCheck:pB,backtickASTSchemaItems:lre,isPortTaken:ere,createForkArgs:_re,autoCastBoolean:dre,async_set_timeout:EB,getTableHashAttribute:fre,doesSchemaExist:Ere,doesTableExist:hre,stringifyObj:mre,ms_to_time:pre,changeExtension:Sre,getEnvCliRootPath:$R,noBootFile:Tre,httpRequest:Rre,transformReq:gre,convertToMS:Are,PACKAGE_ROOT:We.PACKAGE_ROOT};function Fte(e){return e instanceof Error?e:new Error(e)}a(Fte,"errorizeMessage");function Lr(e){return e==null}a(Lr,"isEmpty");function qte(e){return!Lr(e)&&(e||e===0||e===""||hB(e))}a(qte,"isNotEmptyAndHasValue");function Qs(e){return Lr(e)||e.length===0||e.size===0}a(Qs,"isEmptyOrZeroLength");function Gte(e){if(Lr(e))return!0;for(let t=0;t<e.length;t++)if(Lr(e[t]))return!0;return!1}a(Gte,"arrayHasEmptyValues");function xte(e){if(Qs(e))return!0;for(let t=0;t<e.length;t++)if(Qs(e[t]))return!0;return!1}a(xte,"arrayHasEmptyOrZeroLengthValues");function kte(...e){try{return e.join(ti.sep)}catch{console.error(e)}}a(kte,"buildFolderPath");function hB(e){return Lr(e)?!1:e===!0||e===!1}a(hB,"isBoolean");function Vte(e){return Lr(e)?!1:typeof e=="object"}a(Vte,"isObject");function $te(e){return Qs(e)?Bte:e.slice(0,-Hte)}a($te,"stripFileExtension");function Yte(e){return Lr(e)||e===""||typeof e!="string"?e:dB[e]!==void 0?dB[e]:pB(e)===!0?Number(e):Mte.test(e)?new Date(e):e}a(Yte,"autoCast");function mB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(mB,"autoCastJSON");function VR(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=VR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=VR(r);s!==r&&(e[t]=s)}return e}else return mB(e)}a(VR,"autoCastJSONDeep");function pB(e){if(e.startsWith("0.")&&_B(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&_B(e))}a(pB,"autoCasterIsNumberCheck");async function Kte(e){if(Qs(e))throw new Error(`Directory path: ${e} does not exist`);try{await uB.emptyDir(e),await uB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(Kte,"removeDir");function Wte(e,t){if(Qs(e)){cr.info("Invalid current version sent as parameter.");return}if(Qs(t)){cr.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(Wte,"compareVersions");function Qte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Qte,"isCompatibleDataVersion");function zte(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(zte,"escapeRawValue");function Jte(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(Jte,"unescapeValue");function Xte(e,t){if(Lr(e))return cr.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+$f.EOL}!Qs(s)&&s[0]===";"?r+=" "+s+n+$f.EOL:Qs(s)||(r+=s+"="+n+$f.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Xte,"stringifyProps");function SB(){let e;try{e=$f.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(SB,"getHomeDir");function jte(){let e=ti.join(SB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return fB.existsSync(e)||(e=ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(jte,"getPropsFilePath");function Zte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Zte,"timeoutPromise");async function ere(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=yte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(ere,"isPortTaken");function tre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(tre,"isClusterOperation");function rre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rre,"checkGlobalSchemaTable");function sre(e,t){if(Lr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Lr(e)||Qs(e)){cr.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){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(sre,"getClusterUser");function nre(){lB.parsePromise=function(e,t,r){return new Promise(function(s,n){lB.parse(e,{header:!0,transformHeader:TB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(nre,"promisifyPapaParse");function TB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(TB,"removeBOM");function ire(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${Cte(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(ire,"createEventPromise");async function ore(e){let t=!0,r=0;do await EB(Pte*r++),(await wte.findPs(e)).length>0&&(t=!1);while(t&&r<vte);if(t)throw new Error(`process ${e} was not started`)}a(ore,"checkProcessRunning");function are(e,t){let r=RB(e);if(r)return r;let s=gB(e,t);if(s)return s}a(are,"checkSchemaTableExist");function RB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(RB,"checkSchemaExists");function gB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gB,"checkTableExists");function cre(){let e=Yf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Yf().utc().unix();return e-t}a(cre,"getStartOfTomorrowInSeconds");function ure(){return Yf().utc().format("DD-MM-YYYY")}a(ure,"getLimitKey");function lre(e){try{let t=new Ite(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){cr.error("Got an error back ticking items."),cr.error(t)}}a(lre,"backtickASTSchemaItems");function _re(e){return[e]}a(_re,"createForkArgs");function dre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dre,"autoCastBoolean");function fre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(fre,"getTableHashAttribute");function Ere(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Ere,"doesSchemaExist");function hre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(hre,"doesTableExist");function mre(e){try{return JSON.stringify(e)}catch{return e}}a(mre,"stringifyObj");function pre(e){let t=Yf.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(pre,"ms_to_time");function Sre(e,t){let r=ti.basename(e,ti.extname(e));return ti.join(ti.dirname(e),r+t)}a(Sre,"changeExtension");function $R(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a($R,"getEnvCliRootPath");var kR;function Tre(){if(kR)return kR;let e=$R();$R()&&fB.pathExistsSync(ti.join(e,We.HDB_CONFIG_FILE))&&(kR=!0)}a(Tre,"noBootFile");function Rre(e,t){let r;return e.protocol==="http:"?r=Ute:r=Dte,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(Rre,"httpRequest");function gre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(gre,"transformReq");function Are(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(Are,"convertToMS")});var wB=T((Jfe,IB)=>{"use strict";var Dr=X(),Ore=tc(),ae=b(),Bu=ke(),Nn=require("path"),{PACKAGE_ROOT:Qf}=b(),OB=X(),Wf=$(),ma="/dev/null",Nre=Nn.join(Qf,"launchServiceScripts"),NB=Nn.join(Qf,"utility/scripts"),bre=Nn.join(NB,ae.HDB_RESTART_SCRIPT),bB=Nn.resolve(Qf,"dependencies",`${process.platform}-${process.arch}`,Bu.NATS_BINARY_NAME);function yB(){let t=Ore.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Wf.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Qf}}a(yB,"generateMainServerConfig");var yre=9930;function Ire(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.HUB_SERVER),r=Nn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=OB.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==yre?"-"+s:""),script:bB,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Ire,"generateNatsHubServerConfig");var wre=9940;function Cre(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.LEAF_SERVER),r=Nn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=OB.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==wre?"-"+s:""),script:bB,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Cre,"generateNatsLeafServerConfig");function Lre(){Dr.initSync();let e=Nn.join(Dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Nre,autorestart:!1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ma,t.error_file=ma),t}a(Lre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return Wf.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NB},script:bre}}a(Dre,"generateRestart");function Ure(){return{apps:[yB()]}}a(Ure,"generateAllServiceConfigs");IB.exports={generateAllServiceConfigs:Ure,generateMainServerConfig:yB,generateRestart:Dre,generateNatsHubServerConfig:Ire,generateNatsLeafServerConfig:Cre,generateClusteringUpgradeV4ServiceConfig:Lre}});var FS=T((Zfe,xB)=>{"use strict";var Ae=b(),Mre=$(),bn=US(),Hu=dt(),zs=ke(),ri=wB(),zf=X(),si=G(),Pre=un(),{startWorker:CB,onMessageFromWorkers:vre}=Ze(),Bre=Fo(),jfe=require("util"),Hre=require("child_process"),Fre=require("fs"),{execFile:qre}=Hre,Se;xB.exports={enterPM2Mode:Gre,start:ni,stop:YR,reload:DB,restart:UB,list:KR,describe:PB,connect:yn,kill:Yre,startAllServices:Kre,startService:WR,getUniqueServicesList:vB,restartAllServices:Wre,isServiceRegistered:BB,reloadStopStart:HB,restartHdb:MB,deleteProcess:Vre,startClusteringProcesses:qB,startClusteringThreads:GB,isHdbRestartRunning:$re,isClusteringRunning:zre,stopClustering:Qre,reloadClustering:Jre};var Fu=!1;vre(e=>{e.type==="restart"&&zf.initSync(!0)});function Gre(){Fu=!0}a(Gre,"enterPM2Mode");function yn(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(yn,"connect");var ur,xre=10,LB;function ni(e,t=!1){if(Fu)return kre(e);let r=qre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!LB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<xre&&(Fre.existsSync(bn.getHubConfigPath())?ni(e):(await bn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=zf.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=zs.LOG_LEVELS[f]}if(zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{LB=!0,ur&&(ur.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)}ur.push(r)}a(ni,"start");function kre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(kre,"startWithPM2");function YR(e){if(!Fu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(YR,"stop");function DB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(DB,"reload");function UB(e){if(!Fu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(UB,"restart");function Vre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Vre,"deleteProcess");async function MB(){await ni(ri.generateRestart())}a(MB,"restartHdb");async function $re(){let e=await KR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($re,"isHdbRestartRunning");function KR(){return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(KR,"list");function PB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(PB,"describe");function Yre(){if(!Fu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(Yre,"kill");async function Kre(){try{await qB(),await GB(),await ni(ri.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Kre,"startAllServices");async function WR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw Se?.disconnect(),r}}a(WR,"startService");async function vB(){try{let e=await KR(),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 Se?.disconnect(),e}}a(vB,"getUniqueServicesList");async function Wre(e=[]){try{let t=!1,r=await vB();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 UB(o))}t&&await HB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Wre,"restartAllServices");async function BB(e){if(ur?.find(r=>r.name===e))return!0;let t=await Bre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(BB,"isServiceRegistered");async function HB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?zf.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):zf.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await PB(e),s=Mre.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await YR(e),await WR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await MB():await DB(e)}a(HB,"reloadStopStart");var FB;async function qB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await WR(r,e)}}a(qB,"startClusteringProcesses");async function GB(){FB=CB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Hu.createWorkQueueStream(zs.WORK_QUEUE_CONSUMER_NAMES),await Hu.updateIngestStreamConsumer(),await Hu.updateLocalStreams();let e=await Pre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),CB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(GB,"startClusteringThreads");async function Qre(){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 FB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await YR(t)}}a(Qre,"stopClustering");async function zre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await BB(t)===!1)return!1}return!0}a(zre,"isClusteringRunning");async function Jre(){await bn.generateNatsConfig(!0),await Hu.reloadNATSHub(),await Hu.reloadNATSLeaf(),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Jre,"reloadClustering")});var QR=FS(),kB=b();a(async function(){try{let t=await QR.describe(kB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await QR.reload(r.pm_id);await QR.deleteProcess(kB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
30
|
+
`+tR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(K7,"getServerOptions");function W7(){let e=As.get(Rn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Rn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===V7)&&(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(W7,"getCORSOpts");function Q7(){return As.get(Rn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??x7}a(Q7,"getHeaderTimeoutConfig")});var Xv=T((Bde,Jv)=>{"use strict";var{decode:z7}=require("msgpackr"),{isMainThread:Mde,parentPort:J7,threadId:Pde}=require("worker_threads"),kv=dt(),gn=ke(),X7=b(),Ru=q(),qv=X(),Vv=b();Ze();var j7=nn(),{recordAction:Z7,recordActionBinary:eee}=(kn(),Z(O_)),{publishToStream:tee}=kv,vde={durable:gn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:gn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ree,see,nee,$v,Yv;Jv.exports={initialize:Kv,workQueueListener:zv,setSubscription:iee,setIgnoreOrigin:aee,getDatabaseSubscriptions:oee};async function Kv(){Yv=!0,Ru.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await kv.getNATSReferences();ree=e,see=e.info.server_name,nee=t,$v=r}a(Kv,"initialize");var mf=new Map;function iee(e,t,r){let s=mf.get(e);s||mf.set(e,s=new Map),s.set(t,r),Yv||Kv().then(zv)}a(iee,"setSubscription");function oee(){return mf}a(oee,"getDatabaseSubscriptions");var Wv;function aee(e){Wv=e}a(aee,"setIgnoreOrigin");var Qv=100,xv=new Array(Qv),hf=0;async function zv(){let t=await(await $v.consumers.get(gn.WORK_QUEUE_CONSUMER_NAMES.stream_name,gn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();J7?.on("message",async r=>{let{type:s}=r;s===Vv.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await xv[hf],xv[hf]=cee(r).catch(s=>{Ru.error(s)}),++hf>=Qv&&(hf=0)}a(zv,"workQueueListener");async function cee(e){let t=z7(e.data);Z7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=qv.get(X7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(gn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(gn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(gn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!Wv),eee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(gn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Ru.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Ru.trace(`messageProcessor nats msg id: ${e.headers.get(gn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=mf.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:rR(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:rR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:rR(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})}qv.get(Vv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&tee(e.subject.split(".").slice(0,-1).join("."),j7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ru.error(o)}e.ack()}a(cee,"messageProcessor");function rR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(rR,"convertOperation")});var cR={};Qe(cR,{disableNATS:()=>lee,publishToStream:()=>gf,setNATSReplicator:()=>sR,setPublishToStream:()=>_ee,setSubscription:()=>aR,start:()=>uee});function uee(){Sf.default.get(Tf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&fee()}function lee(e=!0){r0=e}function _ee(e,t){gf=e,aR=t}function fee(){if(r0||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];sR(n,r,i)}}uR((r,s)=>{sR(r.tableName,r.databaseName,r),s&&n0(r)}),!jv&&(jv=!0)}function sR(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){n0(i)}static subscribe(){let i=new is;return aR(t,e,i),i}static subscribeOnThisThread(i){return i<dee}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 pf(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=s0;return i}a(s,"getNATSTransaction")}function n0(e){let t=Sf.default.get(Tf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);gf(`${iR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oR.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 Zv,iR,oR,e0,t0,Sf,Tf,Rf,r0,gf,aR,dee,s0,jv,pf,nR,i0=Te(()=>{fe();as();Zv=D(dt()),iR=D(ke()),oR=D(nn());va();e0=D(Xv()),t0=D(mr()),Sf=D(X()),Tf=D(b()),Rf=D(q());a(uee,"start");a(lee,"disableNATS");gf=Zv.publishToStream,aR=e0.setSubscription;a(_ee,"setPublishToStream");dee=2;a(fee,"assignReplicationSource");a(sR,"setNATSReplicator");a(n0,"publishSchema");pf=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=Sf.default.get(Tf.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||(Rf.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(gf(`${iR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,oR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Rf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},nR=class extends pf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,t0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};s0=new nR});async function a0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await lR.getResource(e,{});n=new dR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await lR.get(e);i&&i.delete()}n=new Of(e,t)}return n}function _R(){return Af++,Af>65500&&(Af=1),Af}var o0,la,lR,Af,Of,dR,c0=Te(()=>{fe();zc();o0=D(mr()),la=D(q());fi();lR=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(a0,"getSession");Af=1;a(_R,"getNextMessageId");Of=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,la.trace)("Resuming subscription from",n,"from",o);let h=zn.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 qe(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=_R());let Q=N.id;Array.isArray(Q)&&(Q=Yo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,la.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=_R();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=zn.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 qe(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=[]}},dR=class extends Of{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=_R(),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,la.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,o0.getNextMonotonicTime)()),(0,la.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),lR.put(this.sessionRecord)),t.qos}}});var ER={};Qe(ER,{start:()=>hee});async function hee({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}=_0(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;Eee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,d0.getSuperUser)());let{onMessage:u,onClose:_}=_0(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 _0(e,t,r,s,n){l0||(l0=!0,Oc(d=>{Nf>0&&d.push({metric:"mqtt-connections",connections:Nf,byThread:!0})}));let i;Nf++;let o,c={protocolVersion:4},u=(0,bf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Nf--,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,fR.get)(An.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&u0.notify({username:s.username,status:An.AUTH_AUDIT_STATUS.SUCCESS,type:An.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,fR.get)(An.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&u0.error({username:s.username,status:An.AUTH_AUDIT_STATUS.FAILURE,type:An.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=a0({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,G)=>{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:G.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=Zo(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,bf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Jn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var bf,d0,fR,An,Xr,u0,Eee,l0,Nf,f0=Te(()=>{bf=require("mqtt-packet");c0();d0=D(xr());Ko();kn();Mr();fR=D(X()),An=D(b()),Xr=D(q()),u0=(0,Xr.loggerWithTag)("auth-event"),Eee=!0;a(hee,"start");Nf=0;a(_0,"onSocket")});var h0,E0,hR,m0=Te(()=>{h0=require("os"),E0=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,h0.platform)()!="win32"&&(hR=require("node-unix-socket").createReuseportFd)});var yd={};Qe(yd,{component_errors:()=>_a,loadComponent:()=>yf,loadComponentDirectories:()=>b0,setErrorReporter:()=>Tee});function b0(e,t){t&&(pR=t),e&&(SR=e);let r=[];if((0,Os.existsSync)(mR)){let n=(0,Os.readdirSync)(mR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(mR,o);r.push(yf(c,pR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(yf(s,pR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{N0=!0})}function Tee(e){Ou=e}async function yf(e,t,r,s,n,i){if(!S0.has(e)){S0.set(e,!0),n&&(SR=n);try{let o;s&&(_a=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,O0.getConfigObj)():(0,T0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=TR;let u=[],_=s;for(let l in o){let d=o[l];if(_a.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,A0.getHdbBasePath)().length){N=null;break}if(N)f=await yf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=See[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(gu.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&&!p0.includes(I)){let N=RR.get(gR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Au.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!hR)&&(p0.push(I),Pv(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),SR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,g0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==TR[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,R0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:G}=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(G.isFile()){let x=await pee(Q);gu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else gu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${G.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Ou?.(x),((0,da.getWorkerIndex)()===0?console:Au.default).error(x),t.set(d.path||"/",new Nu(x)),_a.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}`,Ou?.(h),((0,da.getWorkerIndex)()===0?console:Au.default).error(h),t.set(d.path||"/",new Nu(h),null,!0),_a.set(s?l:(0,gt.basename)(e),h.message)}}if(gu.isMainThread&&!N0&&i&&(0,da.watchDir)(e,async()=>b0()),o.extensionModule)return await Rl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Ou?.(new Error(l)),((0,da.getWorkerIndex)()===0?console:Au.default).error(l),_a.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}`,Ou?.(o),t.set("",new Nu(o))}}}var Os,gt,gu,T0,RR,gR,R0,da,Au,g0,A0,mee,O0,pee,mR,SR,N0,pR,_a,See,TR,p0,S0,Ou,Nu,Id=Te(()=>{Os=require("fs"),gt=require("path"),gu=require("worker_threads"),T0=require("yaml"),RR=D(X()),gR=D(b());FA();kA();VA();qM();Nv();Cv();R0=D(require("fast-glob")),da=D(Ze()),Au=D(q());ME();Mr();g0=D(j());as();fe();vv();A0=D(X()),mee=D(Gv());Sd();i0();f0();O0=D(hr());m0();({readFile:pee}=Os.promises),mR=RR.get(gR.CONFIG_PARAMS.COMPONENTSROOT),SR=new Map,_a=new Map;a(b0,"loadComponentDirectories");See={REST:xd,rest:xd,graphqlSchema:UE,jsResource:vE,fastifyRoutes:JT,login:HE,static:XT,operationsApi:mee,customFunctions:{},http:{},clustering:cR,authentication:Jc,mqtt:ER},TR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(TR,"static",{value:{files:"web/**"}});p0=[],S0=new Map;a(Tee,"setErrorReporter");a(yf,"loadComponent");Nu=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 w0=T((ffe,I0)=>{var{isMainThread:y0}=require("worker_threads"),{getTables:Ree}=(fe(),Z(Ce)),{loadComponentDirectories:gee,loadComponent:Aee}=(Id(),Z(yd)),{resetResources:Oee}=(zc(),Z(oU)),Nee=YS(),bee=hr(),{dirname:yee}=require("path"),{getConnection:Iee}=dt(),wee=X(),Cee=b(),AR=new Map;async function Lee(e=!1){!y0&&wee.get(Cee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Iee();try{y0&&await Nee()}catch(s){console.error(s)}let t=Oee();Ree(),t.isWorker=e,await Aee(yee(bee.getConfigFilePath()),t,"hdb",!0,AR),await gee(AR,t);let r=[];for(let[s]of AR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Lee,"loadRootComponents");I0.exports.loadRootComponents=Lee});var Ze=T((hfe,ei)=>{"use strict";var{Worker:Dee,MessageChannel:Uee,parentPort:Ys,isMainThread:IR,threadId:Mee,workerData:On}=require("worker_threads"),{PACKAGE_ROOT:Pee}=b(),{join:U0,isAbsolute:vee,extname:Bee}=require("path"),{server:M0}=(Mr(),Z(to)),{watch:Hee,readdir:Fee}=require("fs/promises"),{totalmem:C0}=require("os"),Cf=b(),Gee=X(),Nn=q(),{randomBytes:qee}=require("crypto"),{_assignPackageExport:xee}=require("../../index"),kee=b(),L0=1024*1024,Zn=[],jr=[],Vee=50,wR=1e4,$ee="restart",P0="request_thread_info",v0="resource_report",B0="thread_info",H0="added-port",Yee="ack",OR;xee("threads",jr);ei.exports={startWorker:NR,restartWorkers:LR,shutdownWorkers:Jee,workers:Zn,setMonitorListener:nte,onMessageFromWorkers:Xee,onMessageByType:V0,broadcast:Zee,broadcastWithAcknowledgement:tte,setChildListenerByType:zee,getWorkerIndex:F0,getWorkerCount:G0,getTicketKeys:q0,setMainIsWorker:Wee,setTerminateTimeout:Kee,restartNumber:On?.restartNumber||1};jr.onMessageByType=V0;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 CR;function Kee(e){wR=e}a(Kee,"setTerminateTimeout");function F0(){return On?On.workerIndex:CR?0:void 0}a(F0,"getWorkerIndex");function G0(){return On?On.workerCount:CR?1:void 0}a(G0,"getWorkerCount");function Wee(e){CR=e}a(Wee,"setMainIsWorker");var If;function q0(){return If||(If=IR?qee(48):On.ticketKeys,If)}a(q0,"getTicketKeys");Object.defineProperty(M0,"workerIndex",{get(){return F0()}});Object.defineProperty(M0,"workerCount",{get(){return G0()}});var x0={[P0](e,t){rte(t)},[v0](e,t){ste(t,e)}};function NR(e,t={}){let r=process.constrainedMemory?.()||C0();r=Math.min(r,C0(),2e4*L0);let s=Math.max(Math.floor(r/L0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new Uee;_.existingPort=u,i.push(_),o.push(_.port2)}Bee(e)||(e+=".js");let c=new Dee(vee(e)?e:U0(Pee,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:ei.exports.restartNumber,ticketKeys:q0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:H0,port:u,threadId:c.threadId},[u]);return Lf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NR(e,t),c.on("error",u=>{console.error("Worker error:",u),Nn.error("Worker error:",u)}),c.on("exit",u=>{Zn.splice(Zn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Vee?(t.unexpectedRestarts=c.unexpectedRestarts+1,NR(e,t)):Nn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{x0[u.type]?.(u,c)}),Zn.push(c),ote(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NR,"startWorker");var Qee=[Cf.THREAD_TYPES.HTTP];async function LR(e=null,t=2,r=!0){if(IR){if(r){let{loadRootComponents:o}=w0();await o()}ei.exports.restartNumber++,t<1&&(t=t*Zn.length);let s=[],n=[];for(let o of Zn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Nn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ei.exports.restartNumber,type:Cf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Qee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),wR*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===kee.ITC_EVENT_TYPES.CHILD_STARTED&&(Nn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Nn.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}=fd();r&&(e==="http"||!e)&&Gee.get(Cf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:$ee,workerType:e})}a(LR,"restartWorkers");function zee(e,t){x0[e]=t}a(zee,"setChildListenerByType");function Jee(e){return LR(e,1/0,!1)}a(Jee,"shutdownWorkers");var k0=[];function Xee(e){k0.push(e)}a(Xee,"onMessageFromWorkers");var bR=new Map;function V0(e,t){let r=bR.get(e);r||bR.set(e,r=[]),r.push(t)}a(V0,"onMessageByType");var jee=10;async function Zee(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>jee&&(t=0,await new Promise(setImmediate))}catch(s){Nn.error("Unable to send message to worker",s)}}a(Zee,"broadcast");var wf=new Map,ete=1;function tte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=ete++,i=a(()=>{wf.delete(n),--r===0&&t(),s!==Ys&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,wf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of wf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Nn.error("Unable to send message to worker",n)}r===0&&t()})}a(tte,"broadcastWithAcknowledgement");function rte(e){e.postMessage({type:B0,workers:$0()})}a(rte,"sendThreadInfo");function $0(){let e=Date.now();return Zn.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($0,"getChildWorkerInfo");function ste(e,t){e.resources=t,e.resources.updated=Date.now()}a(ste,"recordResourceReport");var yR;function nte(e){yR=e}a(nte,"setMonitorListener");var ite=1e3,D0=!1;function ote(){D0||(D0=!0,setInterval(()=>{for(let e of Zn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}yR&&yR()},ite).unref())}a(ote,"startMonitoring");var ate=1e3;if(Ys){Lf(Ys);for(let e=0,t=On.addPorts.length;e<t;e++){let r=On.addPorts[e];r.threadId=On.addThreadIds[e],Lf(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:v0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ate).unref(),OR=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:P0});function r(s){s.type===B0&&(Ys.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else OR=$0;ei.exports.getThreadInfo=OR;function Lf(e,t){jr.push(e),e.on("message",r=>{if(r.type===H0)r.port.threadId=r.threadId,Lf(r.port);else if(r.type===Yee){let s=wf.get(r.id);s&&s()}else{for(let n of k0)n(r,e);let s=bR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Nn.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(Lf,"addPort");if(IR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Fee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(U0(s,i.name));try{for await(let{filename:i}of Hee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ei.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===Cf.ITC_EVENT_TYPES.SHUTDOWN&&(ei.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{Nn.warn("Thread did not voluntarily terminate",Mee),process.exit(0)},wR).unref())})});function K0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;fa||((0,yu.onMessageByType)(Y0,d=>{W0(d.path)}),(0,yu.onMessageByType)(cte,d=>{(0,bu.trace)("confirming to proceed with txn",d.txnId)}),fa=Object.create(null));let c=fa[i]||(fa[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=Yo(t);let _=new UR(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 W0(e,t){if(!fa)return;let r=fa[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:DR,exclusiveStart:!0})){DR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Yo(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,bu.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,bu.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"},DR,!0)}function Q0(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,yu.broadcast)({type:Y0,path:n}),W0(n,!0)})}}var bu,yu,Y0,cte,fa,gfe,UR,DR,z0=Te(()=>{bu=D(q()),yu=D(Ze());va();zc();oo();Y0="transaction",cte="transaction-await",gfe=Buffer.alloc(4096);a(K0,"addSubscription");UR=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"}}},DR=Date.now();a(W0,"notifyFromTransactionData");a(Q0,"listenToCommits")});var UT={};Qe(UT,{coerceType:()=>vf,makeTable:()=>Ff,setServerUtilities:()=>pte,updateResource:()=>Lu});function Ff(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=[]),Q0(i,u);let S=ih(i,s,u),A=0,I,N,Y,Q={},G=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,Mt=2,Pe={},At={},es=864e5,QR,qu,kB=10,VB=6;E&&XR();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,ie)=>{if(V?.source!==M)return M[y](z,ie,V)}}else return(M,V,z)=>{let ie=[];for(let k of U){if(M?.source===k)break;ie.push(k[y](V,z,M))}return Promise.all(ie)}},"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,ie=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[ie.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await ie.getResource(M.id,V,Iu);switch(M.type){case"put":return k._writeUpdate(z,Iu);case"delete":return k._writeDelete(Iu);case"publish":return k._writePublish(z,Iu);case"invalidate":return k.invalidate(Iu);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 ie;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,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=qe(k,()=>{if(k.type==="transaction"){let ne=[];for(let Pt of k.writes)try{ne.push(U(Pt,k))}catch(kt){throw kt.message+=" writing "+JSON.stringify(Pt)+" of event "+JSON.stringify(k),kt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Pt;for(let kt of k.attributes)ne.find(oi=>oi.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Uu.signalSchemaChange(new Mu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});y&&(await Ne,Uu.signalUserChange(new Mu.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=wn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return zR(m,g,{transaction:U},L,M=>{if(M?Lu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Ws.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Xf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[PR]=!0,BR(V,z=>(Lu(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=Xf(this[we],this[Ks],this[me]);if(m)return this[PR]=!0,BR(m,g=>{this[Ks]=g,this[Re]=g.value,this[Pf]=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,jf()}static enableAuditing(m=!0){E=m,m&&XR(),at.audit=m}static coerceId(m){return m===""?null:vf(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));Uu.signalSchemaChange(new Mu.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=ku(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=vR(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=ku(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=vR(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=ku(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=vR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return ku(m)?.delete}update(m,g){if(!wn(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[vt]=m}else R=this[vt],R&&(m=Object.assign(R,m)),this[vt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),wn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ks],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[Ks],L,Df,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,Uf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{xu(m,g,null)}),E)S(m,null,L,C,Uf,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,rB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=wn(C),L=this[we];Sa(L);let y=this[Ks];this[MR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[X0]||ll(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),Lu(this,V));let ie=V?.value;this[MR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(xu(L,ie,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=wn(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),Lu(this,y)),!(y?.version>L)&&(xu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ks],L,0,E,this[me],0,"delete"),E||jf()):i.remove(this[we]))}}),!0}search(m){let g=wn(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,Ws.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>vf(Ne,Ee)):vf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,tB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Cu.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===Cu.SEARCH_TYPES.CONTAINS||Ee===Cu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Cu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=_te:k.estimated_count=lte}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))):Mf.SKIP);else{let k=yE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(IE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=yE(ne,y,C,at,m.allowFullScan);k=k.concat(Pt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(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 ie(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Pt=m.ensureLoaded!==!1;function kt(oi,He){if(Pt&&He!==void 0){let lr=!z.onlyIfCached&&Xf(He,oi,z,this);if(lr)return lr.then(KB=>kt(KB))}let bs=oi?.value;if(!bs)return Mf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Mf.SKIP;return bs}return a(kt,"processEntry"),k.map(oi=>zR(oi,z,ne,!1,kt))}return a(ie,"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=K0(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 Ws.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||eB(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||eB(C,z)){let ie=V.getValue(i);if(y.push({id:z,timestamp:U,value:ie,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,Bf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ks]?.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),ie=z.getValue(i);U.push({id:C,value:ie,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[Pf],timestamp:this[Ks]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[MR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=wn(this[me]),R=this[we]||null;Sa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ks],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&&jf(),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],ie=C(R[z.name],z,y+"."+z.name);ie&&(R[z.name]=ie)}}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 Ws.ClientError(g.join(". "))}getUpdatedTime(){return this[Pf]}wasLoadedFromSource(){return N?!!this[PR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Ws.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Ws.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:Pt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Pt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,ie=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*ie,0),Ne=Math.min(k+1.96*ie,g),ne=Math.pow(10,Math.round(Math.log10(ie)));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(){dl(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await wu(),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 wu();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 wu();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 $B=at.prototype;return $B[X0]=!0,d&&at.setTTLExpiration(d/1e3),B&&YB(),at;function xu(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,Du.getIndexedValues)(M);if(V){J0&&L.prefetch(V.map(z=>({key:z,value:W})),Z0);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Du.getIndexedValues)(U),V){J0&&L.prefetch(V.map(z=>({key:z,value:W})),Z0);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(xu,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>j0)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,Bf.writeKey)(W,hte,0)>j0)throw new Error("Primary key size is too large: "+W.length);return!0}a(Sa,"checkValidId");function zR(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>VB&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Mt>2&&Mt--}else se=Mt,Mt<kB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(zR,"loadLocalRecord");function ku(W){if(!W)return;let m=W.role.permission;if(m.super_user)return mte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(ku,"getTablePermissions");function Xf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Df|Uf)||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 Ws.ServerError("Entry is not cached",504);return}else return L}}}a(Xf,"ensureLoadedFromSource");function wn(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 hl}a(wn,"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&(Df|Uf)?L(JR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Ete)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,ie)=>{let k;BR(qe(M,async Ee=>{let Ne=performance.now(),ne,Pt,kt;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;kt=C&Df;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Du.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Nr(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=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)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}wn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=xu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Pt||null,M,0,"delete",!!kt):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 jf(){if(es!==QR&&(QR=es,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!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`),qu=setTimeout(()=>G=G.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);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+fte<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await wu();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(jf,"scheduleCleanup");function XR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(XR,"addDeleteRemoval");function YB(){(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 wu()}}catch(W){Ke.error("Error in evicting old records",W)}},dte).unref()}a(YB,"runRecordExpirationEviction")}function vR(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 Z0(){}function pte(e){rB=e}function vf(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"&&!Ste.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Hf.autoCast)(e)}function eB(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 BR(e,t,r){return e?.then?e.then(t,r):t(e)}function Lu(e,t){e[Ks]=t,e[Re]=t?.value??null,e[Pf]=t?.version}var Ns,Mf,Du,tB,Cu,Pu,Ws,Uu,Mu,Ke,Bf,zi,Hf,ute,rB,lte,_te,dte,fte,J0,Ete,Pf,X0,Ks,MR,PR,Iu,Df,Uf,hte,j0,mte,Ffe,Ste,wu,ef=Te(()=>{Ns=D(b()),Mf=require("lmdb"),Du=D(mr()),tB=require("lodash");as();NE();Cu=D(ze()),Pu=D(X());z0();Ws=D(j()),Uu=D(on()),Mu=D(ds());fe();pl();Ke=D(q());El();fi();Bf=require("ordered-binary"),zi=D(Ze());oo();Hf=D($());xa();kn();ute=new Uint8Array(9);ute[8]=192;lte=1e8,_te=1e7,dte=6e4,fte=864e5;Pu.initSync();J0=Pu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ete=1e4,Pf=Symbol.for("version"),X0=Symbol.for("incremental-update"),Ks=Symbol("entry"),MR=Symbol("is-saving"),PR=Symbol("loaded-from-source"),Iu={isNotification:!0,ensureLoaded:!1},Df=1,Uf=8,hte=Buffer.allocUnsafeSlow(8192),j0=1978,mte={read:!0,insert:!0,update:!0,delete:!0},Ffe=(0,Hf.convertToMS)(Pu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Ff,"makeTable");a(vR,"attributesAsObject");a(Z0,"noop");a(pte,"setServerUtilities");Ste=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(vf,"coerceType");a(eB,"isDescendantId");wu=a(()=>new Promise(setImmediate),"rest");a(BR,"when");a(Lu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>Qm,dropTableMeta:()=>Nte,getDatabases:()=>hs,getTables:()=>Tte,onUpdatedTable:()=>uR,readMetaDb:()=>vu,resetDatabases:()=>Rte,table:()=>et,tables:()=>pr});function Tte(){return Vf||hs(),pr||{}}function hs(){if(Vf)return xe;Vf=!0,ma=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),t=(0,xt.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,xt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,wr.existsSync)(e)?e:(0,Fe.join)((0,xt.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,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&vu((0,Fe.join)(e,r.name),null,s)}if((0,wr.existsSync)((0,ha.getBaseSchemaPath)())){for(let r of(0,wr.readdirSync)((0,ha.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,ha.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,ha.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,wr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);vu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,wr.existsSync)(n))for(let o of(0,wr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&vu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,wr.existsSync)(u)&&vu(u,o,r,null,!0)}}for(let r in xe){let s=ma.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[$f]}}return ma=null,xe}}function Rte(){Vf=!1;for(let[,e]of ti)e.needsDeletion=!0;hs();for(let[e,t]of ti)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ti.delete(e));return xe}function vu(e,t,r=GR,s,n){let i=new HR.default(e,!1);try{let o=ti.get(e);o?o.needsDeletion=!1:(o=(0,qf.open)(i),ti.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Gf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,wr.existsSync)(s)&&(i.path=s,_=(0,qf.open)(i),_.isLegacy=!0):_=Ol(o));let l=oB(r),d=l[$f],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,G=typeof S.audit=="boolean"?S.audit:(0,xt.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(Ea)||0)&&u.putSync(Ea,Y+1):(S.tableId=Y=u.get(Ea),Y||(Y=1),u.putSync(Ea,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=wl(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=aB(l,E,Ff({primaryStore:Q,auditStore:_,audit:G,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 qR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function oB(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)),ma&&!ma.has(e)){let r=new Set;t[$f]=r,ma.set(e,r)}return t}function aB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=GR),hs();let r=oB(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),n=(0,xt.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,xt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||((0,wr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ti.get(o);if(!c){let u=new HR.default(o,!1);c=(0,qf.open)(u),ti.set(o,c)}return c}async function Qm(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;ti.delete(n.path),n.status==="open"&&(await n.close(),await sB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[$f]}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=GR);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=Ol(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(Cr.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=wl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Gf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(Ea),x.tableId||(x.tableId=1),S.putSync(Ea,x.tableId+1),h.tableId=x.tableId,f=aB(d,e,Ff({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,G(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Gf.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){G(),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,G(),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<Bu.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Bu.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,G(),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=Ote(f,Q,Y):I&&xf.signalSchemaChange(new kf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of qR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function G(){N||l.transactionSync(()=>({then(w){N=w}}))}a(G,"startTxn")}async function Ote(e,t,r){try{let s=e.schemaVersion;await xf.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--,Zr.error(f)}),Bu.workerData&&Bu.workerData.restartNumber!==iB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>gte?await n:u>Ate&&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 xf.signalSchemaChange(new kf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function Nte({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 uR(e){qR.push(e)}var xt,Gf,qf,Fe,wr,ha,Ji,HR,Cr,sB,FR,nB,xf,kf,Bu,Zr,iB,GR,$f,pr,xe,Ea,qR,Vf,ti,ma,gte,Ate,fe=Te(()=>{xt=D(X()),Gf=D(ze()),qf=require("lmdb"),Fe=require("path"),wr=require("fs"),ha=D(ve());ef();Ji=D(Cl()),HR=D(Dl()),Cr=D(b()),sB=D(require("fs-extra")),FR=require("../../index"),nB=D(mr()),xf=D(on()),kf=D(ds()),Bu=require("worker_threads"),Zr=D(q()),iB=D(Ze());oo();xa();GR="data",$f=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,FR._assignPackageExport)("databases",xe);(0,FR._assignPackageExport)("tables",pr);Ea=Symbol.for("next-table-id"),qR=[],ti=new Map;a(Tte,"getTables");a(hs,"getDatabases");a(Rte,"resetDatabases");a(vu,"readMetaDb");a(oB,"ensureDB");a(aB,"setTable");a(mc,"database");a(Qm,"dropDatabase");a(et,"table");gte=1e3,Ate=10;a(Ote,"runIndexing");a(Nte,"dropTableMeta");a(uR,"onUpdatedTable")});var $=T((Wfe,gB)=>{"use strict";var ri=require("path"),dB=require("fs-extra"),cr=q(),cB=require("fs-extra"),Yf=require("os"),bte=require("net"),yte=require("recursive-iterator"),We=b(),Ite=Lg(),uB=require("papaparse"),Kf=require("moment"),{inspect:wte}=require("util"),lB=require("is-number"),Kfe=require("lodash"),Cte=require("minimist"),Lte=require("https"),Dte=require("http"),{hdb_errors:Wf}=j(),Ute=/^((\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)))$/,fB=require("util").promisify(setTimeout),Mte=100,Pte=5,vte="",Bte=4,_B={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};gB.exports={isEmpty:Lr,isEmptyOrZeroLength:Qs,arrayHasEmptyValues:Gte,arrayHasEmptyOrZeroLengthValues:qte,buildFolderPath:xte,isBoolean:EB,errorizeMessage:Hte,stripFileExtension:Vte,autoCast:$te,autoCastJSON:hB,autoCastJSONDeep:kR,removeDir:Yte,compareVersions:Kte,isCompatibleDataVersion:Wte,escapeRawValue:Qte,unescapeValue:zte,stringifyProps:Jte,timeoutPromise:jte,isClusterOperation:ere,getClusterUser:rre,checkGlobalSchemaTable:tre,getHomeDir:pB,getPropsFilePath:Xte,promisifyPapaParse:sre,removeBOM:SB,createEventPromise:nre,checkProcessRunning:ire,checkSchemaTableExist:ore,checkSchemaExists:TB,checkTableExists:RB,getStartOfTomorrowInSeconds:are,getLimitKey:cre,isObject:kte,isNotEmptyAndHasValue:Fte,autoCasterIsNumberCheck:mB,backtickASTSchemaItems:ure,isPortTaken:Zte,createForkArgs:lre,autoCastBoolean:_re,async_set_timeout:fB,getTableHashAttribute:dre,doesSchemaExist:fre,doesTableExist:Ere,stringifyObj:hre,ms_to_time:mre,changeExtension:pre,getEnvCliRootPath:VR,noBootFile:Sre,httpRequest:Tre,transformReq:Rre,convertToMS:gre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Hte(e){return e instanceof Error?e:new Error(e)}a(Hte,"errorizeMessage");function Lr(e){return e==null}a(Lr,"isEmpty");function Fte(e){return!Lr(e)&&(e||e===0||e===""||EB(e))}a(Fte,"isNotEmptyAndHasValue");function Qs(e){return Lr(e)||e.length===0||e.size===0}a(Qs,"isEmptyOrZeroLength");function Gte(e){if(Lr(e))return!0;for(let t=0;t<e.length;t++)if(Lr(e[t]))return!0;return!1}a(Gte,"arrayHasEmptyValues");function qte(e){if(Qs(e))return!0;for(let t=0;t<e.length;t++)if(Qs(e[t]))return!0;return!1}a(qte,"arrayHasEmptyOrZeroLengthValues");function xte(...e){try{return e.join(ri.sep)}catch{console.error(e)}}a(xte,"buildFolderPath");function EB(e){return Lr(e)?!1:e===!0||e===!1}a(EB,"isBoolean");function kte(e){return Lr(e)?!1:typeof e=="object"}a(kte,"isObject");function Vte(e){return Qs(e)?vte:e.slice(0,-Bte)}a(Vte,"stripFileExtension");function $te(e){return Lr(e)||e===""||typeof e!="string"?e:_B[e]!==void 0?_B[e]:mB(e)===!0?Number(e):Ute.test(e)?new Date(e):e}a($te,"autoCast");function hB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(hB,"autoCastJSON");function kR(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=kR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=kR(r);s!==r&&(e[t]=s)}return e}else return hB(e)}a(kR,"autoCastJSONDeep");function mB(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(mB,"autoCasterIsNumberCheck");async function Yte(e){if(Qs(e))throw new Error(`Directory path: ${e} does not exist`);try{await cB.emptyDir(e),await cB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(Yte,"removeDir");function Kte(e,t){if(Qs(e)){cr.info("Invalid current version sent as parameter.");return}if(Qs(t)){cr.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(Kte,"compareVersions");function Wte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Wte,"isCompatibleDataVersion");function Qte(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(Qte,"escapeRawValue");function zte(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(zte,"unescapeValue");function Jte(e,t){if(Lr(e))return cr.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+Yf.EOL}!Qs(s)&&s[0]===";"?r+=" "+s+n+Yf.EOL:Qs(s)||(r+=s+"="+n+Yf.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Jte,"stringifyProps");function pB(){let e;try{e=Yf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(pB,"getHomeDir");function Xte(){let e=ri.join(pB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return dB.existsSync(e)||(e=ri.join(__dirname,"../","hdb_boot_properties.file")),e}a(Xte,"getPropsFilePath");function jte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(jte,"timeoutPromise");async function Zte(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=bte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Zte,"isPortTaken");function ere(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(ere,"isClusterOperation");function tre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Wf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Wf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(tre,"checkGlobalSchemaTable");function rre(e,t){if(Lr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Lr(e)||Qs(e)){cr.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){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(rre,"getClusterUser");function sre(){uB.parsePromise=function(e,t,r){return new Promise(function(s,n){uB.parse(e,{header:!0,transformHeader:SB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(sre,"promisifyPapaParse");function SB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(SB,"removeBOM");function nre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${wte(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(nre,"createEventPromise");async function ire(e){let t=!0,r=0;do await fB(Mte*r++),(await Ite.findPs(e)).length>0&&(t=!1);while(t&&r<Pte);if(t)throw new Error(`process ${e} was not started`)}a(ire,"checkProcessRunning");function ore(e,t){let r=TB(e);if(r)return r;let s=RB(e,t);if(s)return s}a(ore,"checkSchemaTableExist");function TB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Wf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(TB,"checkSchemaExists");function RB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Wf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(RB,"checkTableExists");function are(){let e=Kf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Kf().utc().unix();return e-t}a(are,"getStartOfTomorrowInSeconds");function cre(){return Kf().utc().format("DD-MM-YYYY")}a(cre,"getLimitKey");function ure(e){try{let t=new yte(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){cr.error("Got an error back ticking items."),cr.error(t)}}a(ure,"backtickASTSchemaItems");function lre(e){return[e]}a(lre,"createForkArgs");function _re(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(_re,"autoCastBoolean");function dre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(dre,"getTableHashAttribute");function fre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(fre,"doesSchemaExist");function Ere(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Ere,"doesTableExist");function hre(e){try{return JSON.stringify(e)}catch{return e}}a(hre,"stringifyObj");function mre(e){let t=Kf.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(mre,"ms_to_time");function pre(e,t){let r=ri.basename(e,ri.extname(e));return ri.join(ri.dirname(e),r+t)}a(pre,"changeExtension");function VR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Cte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(VR,"getEnvCliRootPath");var xR;function Sre(){if(xR)return xR;let e=VR();VR()&&dB.pathExistsSync(ri.join(e,We.HDB_CONFIG_FILE))&&(xR=!0)}a(Sre,"noBootFile");function Tre(e,t){let r;return e.protocol==="http:"?r=Dte:r=Lte,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(Tre,"httpRequest");function Rre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Rre,"transformReq");function gre(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(gre,"convertToMS")});var IB=T((zfe,yB)=>{"use strict";var Dr=X(),Are=rc(),ae=b(),Hu=ke(),bn=require("path"),{PACKAGE_ROOT:zf}=b(),AB=X(),Qf=$(),pa="/dev/null",Ore=bn.join(zf,"launchServiceScripts"),OB=bn.join(zf,"utility/scripts"),Nre=bn.join(OB,ae.HDB_RESTART_SCRIPT),NB=bn.resolve(zf,"dependencies",`${process.platform}-${process.arch}`,Hu.NATS_BINARY_NAME);function bB(){let t=Are.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Qf.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Qf.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:zf}}a(bB,"generateMainServerConfig");var bre=9930;function yre(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",Hu.NATS_CONFIG_FILES.HUB_SERVER),r=bn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=AB.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Hu.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==bre?"-"+s:""),script:NB,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(yre,"generateNatsHubServerConfig");var Ire=9940;function wre(){Dr.initSync(!0);let e=Dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",Hu.NATS_CONFIG_FILES.LEAF_SERVER),r=bn.join(Dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=AB.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Hu.LOG_LEVEL_FLAGS[Dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Ire?"-"+s:""),script:NB,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=pa,i.error_file=pa),i}a(wre,"generateNatsLeafServerConfig");function Cre(){Dr.initSync();let e=bn.join(Dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Ore,autorestart:!1};return Dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=pa,t.error_file=pa),t}a(Cre,"generateClusteringUpgradeV4ServiceConfig");function Lre(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return Qf.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Qf.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:OB},script:Nre}}a(Lre,"generateRestart");function Dre(){return{apps:[bB()]}}a(Dre,"generateAllServiceConfigs");yB.exports={generateAllServiceConfigs:Dre,generateMainServerConfig:bB,generateRestart:Lre,generateNatsHubServerConfig:yre,generateNatsLeafServerConfig:wre,generateClusteringUpgradeV4ServiceConfig:Cre}});var HS=T((jfe,qB)=>{"use strict";var Ae=b(),Ure=$(),yn=DS(),Fu=dt(),zs=ke(),si=IB(),Jf=X(),ni=q(),Mre=ln(),{startWorker:wB,onMessageFromWorkers:Pre}=Ze(),vre=Go(),Xfe=require("util"),Bre=require("child_process"),Hre=require("fs"),{execFile:Fre}=Bre,Se;qB.exports={enterPM2Mode:Gre,start:ii,stop:$R,reload:LB,restart:DB,list:YR,describe:MB,connect:In,kill:$re,startAllServices:Yre,startService:KR,getUniqueServicesList:PB,restartAllServices:Kre,isServiceRegistered:vB,reloadStopStart:BB,restartHdb:UB,deleteProcess:kre,startClusteringProcesses:FB,startClusteringThreads:GB,isHdbRestartRunning:Vre,isClusteringRunning:Qre,stopClustering:Wre,reloadClustering:zre};var Gu=!1;Pre(e=>{e.type==="restart"&&Jf.initSync(!0)});function Gre(){Gu=!0}a(Gre,"enterPM2Mode");function In(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{ni.setupConsoleLogging(),r&&t(r),e(s)})})}a(In,"connect");var ur,qre=10,CB;function ii(e,t=!1){if(Gu)return xre(e);let r=Fre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!CB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<qre&&(Hre.existsSync(yn.getHubConfigPath())?ii(e):(await yn.generateNatsConfig(!0),ii(e),await new Promise(c=>setTimeout(c,3e3)),await yn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await yn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Jf.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?ni.OUTPUTS.STDERR:ni.OUTPUTS.STDOUT;ni.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=zs.LOG_LEVELS[f]}if(zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?ni.OUTPUTS.STDERR:ni.OUTPUTS.STDOUT;ni.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{CB=!0,ur&&(ur.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)}ur.push(r)}a(ii,"start");function xre(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(xre,"startWithPM2");function $R(e){if(!Gu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a($R,"stop");function LB(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(LB,"reload");function DB(e){if(!Gu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(DB,"restart");function kre(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(kre,"deleteProcess");async function UB(){await ii(si.generateRestart())}a(UB,"restartHdb");async function Vre(){let e=await YR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Vre,"isHdbRestartRunning");function YR(){return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(YR,"list");function MB(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(MB,"describe");function $re(){if(!Gu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a($re,"kill");async function Yre(){try{await FB(),await GB(),await ii(si.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Yre,"startAllServices");async function KR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=si.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=si.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=si.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=si.generateNatsHubServerConfig(),await ii(r,t),await yn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=si.generateNatsLeafServerConfig(),await ii(r,t),await yn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=si.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ii(r)}catch(r){throw Se?.disconnect(),r}}a(KR,"startService");async function PB(){try{let e=await YR(),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 Se?.disconnect(),e}}a(PB,"getUniqueServicesList");async function Kre(e=[]){try{let t=!1,r=await PB();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 DB(o))}t&&await BB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Kre,"restartAllServices");async function vB(e){if(ur?.find(r=>r.name===e))return!0;let t=await vre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vB,"isServiceRegistered");async function BB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Jf.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Jf.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await MB(e),s=Ure.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await $R(e),await KR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await UB():await LB(e)}a(BB,"reloadStopStart");var HB;async function FB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await KR(r,e)}}a(FB,"startClusteringProcesses");async function GB(){HB=wB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Fu.createWorkQueueStream(zs.WORK_QUEUE_CONSUMER_NAMES),await Fu.updateIngestStreamConsumer(),await Fu.updateLocalStreams();let e=await Mre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){ni.info("Starting clustering upgrade 4.0.0 process"),wB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(GB,"startClusteringThreads");async function Wre(){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 HB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await $R(t)}}a(Wre,"stopClustering");async function Qre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await vB(t)===!1)return!1}return!0}a(Qre,"isClusteringRunning");async function zre(){await yn.generateNatsConfig(!0),await Fu.reloadNATSHub(),await Fu.reloadNATSLeaf(),await yn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await yn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(zre,"reloadClustering")});var WR=HS(),xB=b();a(async function(){try{let t=await WR.describe(xB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await WR.reload(r.pm_id);await WR.deleteProcess(xB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|