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 JB=Object.create;var Ta=Object.defineProperty;var XB=Object.getOwnPropertyDescriptor;var jB=Object.getOwnPropertyNames;var ZB=Object.getPrototypeOf,eH=Object.prototype.hasOwnProperty;var a=(e,t)=>Ta(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Qe=(e,t)=>{for(var r in t)Ta(e,r,{get:t[r],enumerable:!0})},eg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of jB(t))!eH.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=XB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?JB(ZB(e)):{},eg(t||!e||!e.__esModule?Ta(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>eg(Ta({},"__esModule",{value:!0}),e);var sg=T((fse,rg)=>{var tH=require("fast-glob"),{statSync:eE,existsSync:tE,readFileSync:rH,writeFileSync:sH}=require("fs"),{spawnSync:nH,spawn:iH,execFileSync:dse}=require("child_process"),{isMainThread:oH}=require("worker_threads"),{join:Ln,relative:tg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:aH,platform:cH}=require("os");require("source-map-support").install();var uH=["resources","server","dataLayer","components"],Ra="ts-build",rE,lH=__filename.endsWith("tsBuild.js");if(lH){if(oH){let r;try{eE(Ln(ts,Ra)),r=!0}catch{}if(r)for(let s of tH.sync(uH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=eE(Ln(ts,s)).mtimeMs-5e3,i=eE(Ln(ts,Ra,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),rE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),rE=!0;if(rE){let s=Ln(ts,"node_modules/.bin/tsc");cH()==="win32"&&(s+=".cmd");let n=nH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Ln(aH(),"harperdb-tsc.pid"),o;if(tE(i))try{process.kill(+rH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=iH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});sH(i,c.pid.toString()),c.unref()}}}}let e=rg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(ts)&&!s[0].includes("node_modules")){let i=tg(ts,s[0]),o;i.startsWith(Ra)?o=Ln(ts,tg(Ra,i)):o=Ln(ts,Ra,i);let c=Ln(o,r),u=c+".js";if(tE(u))return u;if(c.includes(".")&&tE(c))return c}return t(r,s,n)}}});var b=T((mse,pg)=>{"use strict";var Ur=require("path"),_H=require("fs"),{relative:Ese,join:hse}=Ur,{existsSync:dH}=_H;function fH(){let e=__dirname;for(;!dH(Ur.join(e,"package.json"));){let t=Ur.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(fH,"getHDBPackageRoot");var Dn=fH(),ng="js",Ku=ng,EH="harperdb-config.yaml",hH="defaultConfig.yaml",mH="hdb",ig=`harperdb.${Ku}`,og=`customFunctionsServer.${Ku}`,pH=`restartHdb.${Ku}`,nE="HarperDB",Yu="Custom Functions",Wu="Clustering Hub",Qu="Clustering Leaf",SH="Clustering Ingest Service",TH="Clustering Reply Service",RH="foreground.pid",gH="hdb.pid",AH="data",OH={HDB:nE,CLUSTERING_HUB:Wu,CLUSTERING_LEAF:Qu,CLUSTERING_INGEST_SERVICE:SH,CLUSTERING_REPLY_SERVICE:TH,CUSTOM_FUNCTIONS:Yu,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},NH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yH={harperdb:nE,"clustering hub":Wu,"clustering leaf":Qu,"custom functions":Yu,custom_functions:Yu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},IH={CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu},sE={HDB:Ur.join(Dn,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Dn,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Dn,"server/nats"),CLUSTERING_LEAF:Ur.join(Dn,"server/nats")},wH={HDB:Ur.join(sE.HDB,ig),CUSTOM_FUNCTIONS:Ur.join(sE.CUSTOM_FUNCTIONS,og)},CH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Dn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Dn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Dn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},LH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ag="support@harperdb.io",DH="customer-success@harperdb.io",cg=1,UH=4141,ug="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",MH="https://www.harperdb.io/product",PH=`For support, please submit a request at ${ug} or contact ${ag}`,lg=`For license support, please contact ${DH}`,vH="None of the specified records were found.",BH="hash attribute not found",HH=`Your current license only supports ${cg} role. ${lg}`,qH="Your current license only supports 3 connections to a node.",FH="127.0.0.1",GH=1,xH=/^\.$/,kH=/^\.\.$/,VH="U+002E",$H=/\//g,YH="U+002F",KH=/U\+002F/g,WH=/^U\+002E$/,QH=/^U\+002EU\+002E$/,zH="d",JH=999999,XH="*",jH="--max-old-space-size=",ZH="system",eq="__hdb_hash",tq=".harperdb",rq=".hdb",sq="keys",nq="hdb_boot_properties.file",iq=".updateConfig.json",oq="SIGTSTP",aq=24,cq=6e4,uq=448,lq="blob",_q="trash",dq="database",fq="schema",Eq="transactions",hq=".count",mq="id",pq="PROCESS_NAME",_g={SETTINGS_PATH_KEY:"settings_path"},dg=require("lodash"),Sq={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},Tq={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},Rq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},gq={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},Aq={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},_r="hdb_internal:",Oq={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},Nq={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},bq="060493.ks",yq=".license",Iq={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},wq={CSV:".csv",JSON:".json"},Cq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Lq={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},ga={};ga[J.INSERT]=J.INSERT;ga[J.UPDATE]=J.UPDATE;ga[J.UPSERT]=J.UPSERT;ga[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Dq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Uq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},Mq=dg.invert(fg),Pq={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},Eg={settings_path:_g.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];Eg[t.toLowerCase()]=t}var vq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Bq={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},Hq={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},qq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Fq={VERSION_DEFAULT:"2.2.0"},Gq={DEVELOPMENT:8192,DEFAULT:512},xq={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},kq={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Vq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},hg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},$q=Symbol("metadata"),Yq="__clustering__",Kq=Object.values(hg),Wq=15984864e5,mg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Qq=dg.invert(mg),zq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},Jq=111,Xq=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(en,"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:LF.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(PF,"findPs")});var ze=T((Nse,Pg)=>{"use strict";var vF="__dbis__",BF="__txns__",HF="__environment_name__",qF="__dbi_defintion__",FF={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},GF=["__createdtime__","__updatedtime__"],xF="\uFFFF",Mg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},kF=Object.values(Mg);Pg.exports={AUDIT_STORE_NAME:BF,INTERNAL_DBIS_NAME:vF,DBI_DEFINITION_NAME:qF,SEARCH_TYPES:FF,TIMESTAMP_NAMES:GF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:HF,TRANSACTIONS_DBI_NAMES_ENUM:Mg,TRANSACTIONS_DBIS:kF,OVERFLOW_MARKER:xF}});var dr=T((bse,Vg)=>{"use strict";var vg=b(),Bg=ze(),Hg={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},qg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:qg("There was an error processing your request."),400:"Invalid request"},VF=Fg[Hg.INTERNAL_SERVER_ERROR],$F={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},YF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},KF={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},WF={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${Bg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Bg.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},QF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${vg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${vg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},Gg={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},zF={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},JF={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},XF={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},jF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},ZF={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},xg={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},kg={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},eG={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},tG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},rG={...Gg,...KF,...$F,...zF,...JF,...XF,...jF,...ZF,...QF,...xg,...kg,...eG,...tG,...YF};Vg.exports={CHECK_LOGS_WRAPPER:qg,HDB_ERROR_MSGS:rG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:VF,HTTP_STATUS_CODES:Hg,LMDB_ERRORS_ENUM:WF,AUTHENTICATION_ERROR_MSGS:Gg,VALIDATION_ERROR_MSGS:xg,ITC_ERRORS:kg}});var j=T((Ise,Kg)=>{"use strict";var Zi=dr(),sG=G(),nG=b(),Zu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,$g),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&sG[n](i)}},fE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},EE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function $g(e,t,r,s=nG.LOG_LEVELS.ERROR,n=null,i=!1){if(Yg(e))return e;let o=new Zu(e,t,r,s,n);return i&&delete o.stack,o}a($g,"handleHDBError");function Yg(e){return e.__proto__.constructor.name===Zu.name}a(Yg,"isHDBError");Kg.exports={isHDBError:Yg,handleHDBError:$g,ClientError:fE,ServerError:EE,hdb_errors:Zi}});var Qg=T((Cse,Wg)=>{"use strict";var iG={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\r
|
|
1
|
+
"use strict";var zB=Object.create;var Ra=Object.defineProperty;var JB=Object.getOwnPropertyDescriptor;var XB=Object.getOwnPropertyNames;var jB=Object.getPrototypeOf,ZB=Object.prototype.hasOwnProperty;var a=(e,t)=>Ra(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)Ra(e,r,{get:t[r],enumerable:!0})},ZR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of XB(t))!ZB.call(e,n)&&n!==r&&Ra(e,n,{get:()=>t[n],enumerable:!(s=JB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?zB(jB(e)):{},ZR(t||!e||!e.__esModule?Ra(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>ZR(Ra({},"__esModule",{value:!0}),e);var rg=T((dse,tg)=>{var eH=require("fast-glob"),{statSync:tE,existsSync:rE,readFileSync:tH,writeFileSync:rH}=require("fs"),{spawnSync:sH,spawn:nH,execFileSync:_se}=require("child_process"),{isMainThread:iH}=require("worker_threads"),{join:Dn,relative:eg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:oH,platform:aH}=require("os");require("source-map-support").install();var cH=["resources","server","dataLayer","components"],ga="ts-build",sE,uH=__filename.endsWith("tsBuild.js");if(uH){if(iH){let r;try{tE(Dn(ts,ga)),r=!0}catch{}if(r)for(let s of eH.sync(cH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=tE(Dn(ts,s)).mtimeMs-5e3,i=tE(Dn(ts,ga,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),sE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),sE=!0;if(sE){let s=Dn(ts,"node_modules/.bin/tsc");aH()==="win32"&&(s+=".cmd");let n=sH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Dn(oH(),"harperdb-tsc.pid"),o;if(rE(i))try{process.kill(+tH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=nH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});rH(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(ga)?o=Dn(ts,eg(ga,i)):o=Dn(ts,ga,i);let c=Dn(o,r),u=c+".js";if(rE(u))return u;if(c.includes(".")&&rE(c))return c}return t(r,s,n)}}});var b=T((hse,mg)=>{"use strict";var Ur=require("path"),lH=require("fs"),{relative:fse,join:Ese}=Ur,{existsSync:_H}=lH;function dH(){let e=__dirname;for(;!_H(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(dH,"getHDBPackageRoot");var Un=dH(),sg="js",Wu=sg,fH="harperdb-config.yaml",EH="defaultConfig.yaml",hH="hdb",ng=`harperdb.${Wu}`,ig=`customFunctionsServer.${Wu}`,mH=`restartHdb.${Wu}`,iE="HarperDB",Ku="Custom Functions",Qu="Clustering Hub",zu="Clustering Leaf",pH="Clustering Ingest Service",SH="Clustering Reply Service",TH="foreground.pid",RH="hdb.pid",gH="data",AH={HDB:iE,CLUSTERING_HUB:Qu,CLUSTERING_LEAF:zu,CLUSTERING_INGEST_SERVICE:pH,CLUSTERING_REPLY_SERVICE:SH,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"},OH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},NH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},bH={harperdb:iE,"clustering hub":Qu,"clustering leaf":zu,"custom functions":Ku,custom_functions:Ku,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},yH={CLUSTERING_HUB_PROC_DESCRIPTOR:Qu,CLUSTERING_LEAF_PROC_DESCRIPTOR:zu},nE={HDB:Ur.join(Un,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Un,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Un,"server/nats"),CLUSTERING_LEAF:Ur.join(Un,"server/nats")},IH={HDB:Ur.join(nE.HDB,ng),CUSTOM_FUNCTIONS:Ur.join(nE.CUSTOM_FUNCTIONS,ig)},wH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Un,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Un,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Un,"launchServiceScripts/launchUpdateNodes4-0-0.js")},CH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},og="support@harperdb.io",LH="customer-success@harperdb.io",ag=1,DH=4141,cg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",UH="https://www.harperdb.io/product",MH=`For support, please submit a request at ${cg} or contact ${og}`,ug=`For license support, please contact ${LH}`,PH="None of the specified records were found.",vH="hash attribute not found",BH=`Your current license only supports ${ag} role. ${ug}`,HH="Your current license only supports 3 connections to a node.",FH="127.0.0.1",qH=1,GH=/^\.$/,xH=/^\.\.$/,kH="U+002E",VH=/\//g,$H="U+002F",YH=/U\+002F/g,KH=/^U\+002E$/,WH=/^U\+002EU\+002E$/,QH="d",zH=999999,JH="*",XH="--max-old-space-size=",jH="system",ZH="__hdb_hash",eF=".harperdb",tF=".hdb",rF="keys",sF="hdb_boot_properties.file",nF=".updateConfig.json",iF="SIGTSTP",oF=24,aF=6e4,cF=448,uF="blob",lF="trash",_F="database",dF="schema",fF="transactions",EF=".count",hF="id",mF="PROCESS_NAME",lg={SETTINGS_PATH_KEY:"settings_path"},_g=require("lodash"),pF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},SF={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},TF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},RF={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"},gF={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:",AF={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"},OF={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"},NF="060493.ks",bF=".license",yF={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"},IF={CSV:".csv",JSON:".json"},wF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},CF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Aa={};Aa[J.INSERT]=J.INSERT;Aa[J.UPDATE]=J.UPDATE;Aa[J.UPSERT]=J.UPSERT;Aa[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 LF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},DF={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"},UF=_g.invert(dg),MF={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 PF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},vF={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"},BF={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"},HF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},FF={VERSION_DEFAULT:"2.2.0"},qF={DEVELOPMENT:8192,DEFAULT:512},GF={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"},xF={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"},kF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Eg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},VF=Symbol("metadata"),$F="__clustering__",YF=Object.values(Eg),KF=15984864e5,hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},WF=_g.invert(hg),QF={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"},zF=111,JF=`\r
|
|
2
|
+
`,XF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},jF=["*","%"],ZF="unauthorized_access",eq="func_val",tq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sq={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"},nq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iq={HTTP:"http"},oq={STOPPED:"stopped",ONLINE:"online"},aq="3.x.x",cq={SUCCESS:"success",FAILURE:"failure"},uq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:og,HDB_SUPPORT_URL:cg,HDB_PRICING_URL:UH,SUPPORT_HELP_MSG:MH,LICENSE_HELP_MSG:ug,HDB_PROC_NAME:ng,HDB_PROC_DESCRIPTOR:iE,CLUSTERING_LEAF_PROC_DESCRIPTOR:zu,CLUSTERING_HUB_PROC_DESCRIPTOR:Qu,SYSTEM_SCHEMA_NAME:jH,HASH_FOLDER_NAME:ZH,HDB_HOME_DIR_NAME:eF,UPDATE_FILE_NAME:nF,LICENSE_KEY_DIR_NAME:rF,BOOT_PROPS_FILE_NAME:sF,JOB_TYPE_ENUM:vF,JOB_STATUS_ENUM:yF,SYSTEM_TABLE_NAMES:RF,SYSTEM_TABLE_HASH_ATTRIBUTES:gF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:IF,S3_BUCKET_AUTH_KEYS:wF,VALID_SQL_OPS_ENUM:CF,GEO_CONVERSION_ENUM:DF,HDB_SETTINGS_NAMES:dg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:UF,SERVICE_ACTIONS_ENUM:LF,CLUSTER_MESSAGE_TYPE_ENUM:BF,CLUSTER_CONNECTION_DIRECTION_ENUM:HF,CLUSTER_EVENTS_DEFS_ENUM:GF,PERIOD_REGEX:GH,DOUBLE_PERIOD_REGEX:xH,UNICODE_PERIOD:kH,FORWARD_SLASH_REGEX:VH,UNICODE_FORWARD_SLASH:$H,ESCAPED_FORWARD_SLASH_REGEX:YH,ESCAPED_PERIOD_REGEX:KH,ESCAPED_DOUBLE_PERIOD_REGEX:WH,REG_KEY_FILE_NAME:NF,RESTART_TIMEOUT_MS:aF,HDB_FILE_PERMISSIONS:cF,DATABASES_DIR_NAME:_F,LEGACY_DATABASES_DIR_NAME:dF,TRANSACTIONS_DIR_NAME:fF,LIMIT_COUNT_NAME:EF,ID_ATTRIBUTE_STRING:hF,INSERT_MODULE_ENUM:SF,UPGRADE_JSON_FIELD_NAMES_ENUM:TF,RESTART_CODE:iF,RESTART_CODE_NUM:oF,CLUSTER_OPERATIONS:Aa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:OF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:AF,CLUSTERING_MESSAGE_TYPES:QF,HDB_FILE_SUFFIX:tF,BLOB_FOLDER_NAME:uF,HDB_TRASH_DIR:lF,ORIGINATOR_SET_VALUE:zF,LICENSE_VALUES:FF,RAM_ALLOCATION_ENUM:qF,TIME_STAMP_NAMES_ENUM:Eg,TIME_STAMP_NAMES:YF,PERMS_UPDATE_RELEASE_TIMESTAMP:KF,SEARCH_NOT_FOUND_MESSAGE:PH,SEARCH_ATTRIBUTE_NOT_FOUND:vH,LICENSE_ROLE_DENIED_RESPONSE:BH,LICENSE_MAX_CONNS_REACHED:HH,BASIC_LICENSE_MAX_NON_CU_ROLES:ag,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:DH,VALUE_SEARCH_COMPARATORS:hg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:WF,LICENSE_FILE_NAME:bF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:xF,NEW_LINE:JF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:qH,MOMENT_DAYS_TAG:QH,API_TURNOVER_SEC:zH,LOOPBACK:FH,CODE_EXTENSION:Wu,WILDCARD_SEARCH_VALUE:JH,NODE_ERROR_CODES:kF,JAVASCRIPT_EXTENSION:sg,PERMS_CRUD_ENUM:XF,UNAUTHORIZED_PERMISSION_NAME:ZF,SEARCH_WILDCARDS:jF,FUNC_VAL:eq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tq,JWT_ENUM:rq,CLUSTERING_FLAG:$F,ITC_EVENT_TYPES:sq,CUSTOM_FUNCTION_PROC_NAME:ig,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Ku,SERVICES:nq,THREAD_TYPES:iq,MEM_SETTING_KEY:XH,HDB_RESTART_SCRIPT:mH,PROCESS_DESCRIPTORS:AH,SERVICE_SERVERS:IH,SERVICE_SERVERS_CWD:nE,PROCESS_DESCRIPTORS_VALIDATE:bH,LAUNCH_SERVICE_SCRIPTS:wH,LOG_LEVELS:NH,PROCESS_NAME_ENV_PROP:mF,LOG_NAMES:OH,PM2_PROCESS_STATUSES:oq,CONFIG_PARAM_MAP:fg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:fH,HDB_DEFAULT_CONFIG_FILE:EH,ROLE_TYPES_ENUM:CH,BOOT_PROP_PARAMS:lg,INSTALL_PROMPTS:pF,HDB_ROOT_DIR_NAME:hH,CLUSTERING_PROCESSES:yH,FOREGROUND_PID_FILE:TH,PACKAGE_ROOT:Un,PRE_4_0_0_VERSION:aq,DATABASES_PARAM_CONFIG:PF,METADATA_PROPERTY:VF,AUTH_AUDIT_STATUS:cq,AUTH_AUDIT_TYPES:uq,HDB_PID_FILE:RH,DEFAULT_DATABASE_NAME:gH,LEGACY_CONFIG_PARAMS:MF};rg()});var oE=T((pse,Tg)=>{"use strict";var pg=require("minimist");Tg.exports=lq;function lq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Sg(process.env),s=Sg(pg(process.argv))):(r=process.env,s=pg(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(lq,"assignCMDENVVariables");function Sg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Sg,"objKeysToLowerCase")});var F=T((Tse,fE)=>{"use strict";var ci=require("fs-extra"),{workerData:_q,threadId:dq}=require("worker_threads"),Zs=require("path"),Ag=require("yaml"),Og=require("properties-reader"),ct=b(),Rg=oE(),fq=require("os"),{PACKAGE_ROOT:cE}=b(),{_assignPackageExport:Eq}=require("../index"),Na={};for(let e in console)Na[e]||(Na[e]=console[e]);var $t={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ng={STDOUT:"stdOut",STDERR:"stdErr"},hq=Zs.join(cE,"logs"),mq=Zs.join(cE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),pq=1e4,js,Is,Vt,Ju,Xu,ba,Zi,Oa;Oa===void 0&&bg();fE.exports={notify:wg,fatal:Cg,error:ya,warn:dE,info:ju,debug:_E,trace:lE,setLogLevel:Nq,log_level:Vt,loggerWithTag:Sq,suppressLogging:Tq,initLogSettings:bg,setupConsoleLogging:yg,logCustomLevel:Aq,closeLogFile:uE,getLogFilePath:()=>ba,OUTPUTS:Ng,AuthAuditLog:Iq};Eq("logger",fE.exports);function bg(e=!1){try{if(Oa===void 0||e){uE();let t=Oq(),r=Rg(["ROOTPATH"]);try{Oa=Og(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ci.pathExistsSync(Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:Vt,config_log_path:Xu,to_file:js,to_stream:Is}=bq(r.ROOTPATH?Zs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):Oa.get("settings_path"))),Ju=ct.LOG_NAMES.HDB,ba=Zs.join(Xu,Ju)}}catch(t){if(Oa=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=Rg(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){Is=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=yq();js=js===void 0?n:js,js=gg(js),Is=Is===void 0?i:Is,Is=gg(Is),Vt=Vt===void 0?s:Vt,Xu=hq,Ju=ct.LOG_NAMES.INSTALL,ba=Zs.join(Xu,Ju);return}throw ya("Error initializing log settings"),ya(t),t}process.env.DEV_MODE&&(Is=!0),yg()}a(bg,"initLogSettings");var aE=!0;function yg(){ji("error",ya),ji("warn",dE),ji("log",ju),ji("info",ju),ji("debug",_E),ji("trace",lE)}a(yg,"setupConsoleLogging");function ji(e,t){console[e]=function(...r){if(aE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Na[e](...r)}}a(ji,"logConsole");function Sq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wg),fatal:r(Cg),error:r(ya),warn:r(dE),info:r(ju),debug:r(_E),trace:r(lE)};function r(s){return function(...n){return s(t,...n)}}}a(Sq,"loggerWithTag");function Tq(e){try{aE=!1,e()}finally{aE=!0}}a(Tq,"suppressLogging");var Rq=_q?.name?.replace(/ /g,"-")||"main";function en(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Rq+"/"+dq);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(en,"createLogRecord");function Ia(e){js&&Ig(e),Is&&process.stdout.write(e)}a(Ia,"logStdOut");function Zu(e){js&&Ig(e),Is&&process.stderr.write(e)}a(Zu,"logStdErr");function Ig(e){gq(),Zi?ci.appendFileSync(Zi,e):Na.log(e)}a(Ig,"logToFile");function uE(){try{ci.closeSync(Zi)}catch{}Zi=null}a(uE,"closeLogFile");function gq(){if(!Zi){try{if(!ba)debugger;Zi=ci.openSync(ba,"a")}catch(e){Na.error(e)}setTimeout(()=>{uE()},pq).unref()}}a(gq,"openLogFile");function ju(...e){$t[Vt]<=$t.info&&Ia(en("info",e))}a(ju,"info");function lE(...e){$t[Vt]<=$t.trace&&Ia(en("trace",e))}a(lE,"trace");function ya(...e){$t[Vt]<=$t.error&&Zu(en("error",e))}a(ya,"error");function _E(...e){$t[Vt]<=$t.debug&&Ia(en("debug",e))}a(_E,"debug");function wg(...e){$t[Vt]<=$t.notify&&Ia(en("notify",e))}a(wg,"notify");function Cg(...e){$t[Vt]<=$t.fatal&&Zu(en("fatal",e))}a(Cg,"fatal");function dE(...e){$t[Vt]<=$t.warn&&Zu(en("warn",e))}a(dE,"warn");function Aq(e,t,...r){t===Ng.STDERR?Zu(en(e,r)):Ia(en(e,r))}a(Aq,"logCustomLevel");function Oq(){let e;try{e=fq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Zs.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return ci.existsSync(t)||(t=Zs.join(cE,"utility/hdb_boot_properties.file")),t}a(Oq,"getPropsFilePath");function Nq(e){Vt=e}a(Nq,"setLogLevel");function gg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gg,"autoCastBoolean");function bq(e){try{if(e.includes("config/settings.js")){let o=Og(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Zs.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Ag.parseDocument(ci.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(bq,"getLogConfig");function yq(){try{let e=Ag.parseDocument(ci.readFileSync(mq,"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(yq,"getDefaultConfig");function Iq(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(Iq,"AuthAuditLog")});var Dg=T((gse,Lg)=>{"use strict";var wq=require("util"),Cq=require("path"),Lq=require("child_process"),Dq=wq.promisify(Lq.execFile),Uq=1e3*1e3*10;Lg.exports={findPs:Mq};async function Mq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Dq("ps",["wwxo",`pid,${r}`],{maxBuffer:Uq});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:Cq.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(Mq,"findPs")});var ze=T((Ose,Mg)=>{"use strict";var Pq="__dbis__",vq="__txns__",Bq="__environment_name__",Hq="__dbi_defintion__",Fq={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"},qq=["__createdtime__","__updatedtime__"],Gq="\uFFFF",Ug={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},xq=Object.values(Ug);Mg.exports={AUDIT_STORE_NAME:vq,INTERNAL_DBIS_NAME:Pq,DBI_DEFINITION_NAME:Hq,SEARCH_TYPES:Fq,TIMESTAMP_NAMES:qq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Bq,TRANSACTIONS_DBI_NAMES_ENUM:Ug,TRANSACTIONS_DBIS:xq,OVERFLOW_MARKER:Gq}});var dr=T((Nse,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"},kq=Fg[Bg.INTERNAL_SERVER_ERROR],Vq={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.`},$q={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Yq={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"},Kq={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"},Wq={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"},Qq={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."},zq={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`},Jq={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"},Xq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},jq={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}`},Zq={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},eG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},tG={...qg,...Yq,...Vq,...Qq,...zq,...Jq,...Xq,...jq,...Wq,...Gg,...xg,...Zq,...eG,...$q};kg.exports={CHECK_LOGS_WRAPPER:Hg,HDB_ERROR_MSGS:tG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:kq,HTTP_STATUS_CODES:Bg,LMDB_ERRORS_ENUM:Kq,AUTHENTICATION_ERROR_MSGS:qg,VALIDATION_ERROR_MSGS:Gg,ITC_ERRORS:xg}});var j=T((yse,Yg)=>{"use strict";var eo=dr(),rG=F(),sG=b(),el=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Vg),this.statusCode=s||eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(eo.DEFAULT_ERROR_MSGS[s]?eo.DEFAULT_ERROR_MSGS[s]:eo.DEFAULT_ERROR_MSGS[eo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&rG[n](i)}},EE=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}},hE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Vg(e,t,r,s=sG.LOG_LEVELS.ERROR,n=null,i=!1){if($g(e))return e;let o=new el(e,t,r,s,n);return i&&delete o.stack,o}a(Vg,"handleHDBError");function $g(e){return e.__proto__.constructor.name===el.name}a($g,"isHDBError");Yg.exports={isHDBError:$g,handleHDBError:Vg,ClientError:EE,ServerError:hE,hdb_errors:eo}});var Wg=T((wse,Kg)=>{"use strict";var nG={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,`\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
|
-
`)},oG="certificate.pem",aG="privateKey.pem",cG="ca.pem";Wg.exports={CERTIFICATE_VALUES:iG,CERTIFICATE_PEM_NAME:oG,PRIVATEKEY_PEM_NAME:aG,CA_PEM_NAME:cG}});var Fe=T((Lse,zg)=>{"use strict";var 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};zg.exports={validateObject:uG,validateObjectAsync:lG,validateBySchema:_G};function uG(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(uG,"validateObject");async function lG(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(lG,"validateObjectAsync");function _G(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(_G,"validateBySchema")});var mE=T((Mse,eA)=>{"use strict";var Zg=require("fs-extra"),ce=require("joi"),dG=require("os"),{boolean:Ie,string:ws,number:Ot,array:hE}=ce.types(),{totalmem:Jg}=require("os"),eo=require("path"),fG=G(),tl=$(),Use=Qg(),Xg=b(),EG=Fe(),jg="log",hG="components",mG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",pG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",SG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",TG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",RG="rootPath config parameter is undefined",gG="clustering.enabled config parameter is undefined",ci=Ot.min(0).required(),rl=hE.items({host:ws.required(),port:ci}).empty(null),tn;eA.exports={configValidator:AG,routesValidator:wG,route_constraints:rl};function AG(e){if(tn=e.rootPath,tl.isEmpty(tn))throw RG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(IG),s=ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),n=ws.optional().empty(null),i=ws.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(el),c=ce.custom(NG).empty(null).default(el),u=e.clustering?.enabled;if(tl.isEmpty(u))throw gG;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:rl}).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:rl}).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:ws.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:ws.custom(yG).optional().empty(null),maxSize:ws.custom(bG).optional().empty(null),path:ws.optional().empty(null).default(el)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:hE.optional(),headersTimeout:Ot.min(1).optional(),keepAliveTimeout:Ot.min(1).optional(),port:Ot.optional().empty(null),securePort:Ot.optional().empty(null),timeout:Ot.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ws.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:hE.optional(),headersTimeout:Ot.min(1).optional(),port:Ot.min(0).optional().empty(null),securePort:Ot.min(0).optional().empty(null)}).required(),threads:r.optional(),storage: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(AG,"configValidator");function OG(e){return Zg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(OG,"doesPathExist");function NG(e,t){ce.assert(e,ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=OG(e);if(r)return t.message(r)}a(NG,"validatePath");function bG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(mG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(SG):e}a(bG,"validateRotationMaxSize");function yG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(pG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TG):e}a(yG,"validateRotationInterval");function IG(e,t){let r=t.state.path.join("."),s=dG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Jg();return i=Math.round(Math.min(i,Jg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),fG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(IG,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(tn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(tn,hG);case"logging.root":return eo.join(tn,jg);case"clustering.leafServer.streams.path":return eo.join(tn,"clustering","leaf");case"storage.path":let s=eo.join(tn,Xg.LEGACY_DATABASES_DIR_NAME);return Zg.existsSync(s)?s:eo.join(tn,Xg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(tn,jg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function wG(e){let t=ce.object({routes:rl});return EG.validateBySchema({routes:e},t)}a(wG,"routesValidator")});var to={};Qe(to,{server:()=>ut});var tA,ut,Mr=Te(()=>{tA=require("../index"),ut={};(0,tA._assignPackageExport)("server",ut)});var hr=T((Bse,lA)=>{"use strict";var Er=b(),mt=$(),lt=G(),{configValidator:CG,routesValidator:rA}=mE(),Kt=require("fs-extra"),LG=require("yaml"),rs=require("path"),DG=require("is-number"),nA=require("properties-reader"),UG=require("lodash"),{handleHDBError:MG}=j(),{HTTP_STATUS_CODES:PG,HDB_ERROR_MSGS:sl}=dr(),vse=require("minimist"),{server:vG}=(Mr(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,BG="Unable to get config value because config is uninitialized",HG="Config successfully initialized",qG="Error backing up config file",FG="Empty parameter sent to getConfigValue",iA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),GG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sA={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},nl,_t,il;lA.exports={createConfigFile:xG,getDefaultConfig:kG,getConfigValue:aA,initConfig:SE,flattenConfig:ro,updateConfigValue:cA,updateConfigObject:$G,getConfiguration:WG,setConfiguration:QG,readConfigFile:RE,getClusteringRoutes:zG,initOldConfig:uA,getConfigFromFile:JG,getConfigFilePath:ui,addConfig:XG,deleteConfigFromFile:jG,getConfigObj:ZG};function xG(e){let t=Un(iA);nl=ro(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===fr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=pE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&oA(t,r),TE(t);let s=t.toJSON();_t=ro(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Kt.createFileSync(i),Kt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(xG,"createConfigFile");function oA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ia.TABLES))for(let i in s[n][Ia.TABLES])for(let o in s[n][Ia.TABLES][i]){let c=s[n][Ia.TABLES][i][o],u=[fr.DATABASES,n,Ia.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[fr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(oA,"setSchemasConfig");function kG(e){if(nl===void 0){let r=Un(iA);nl=ro(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(kG,"getDefaultConfig");function aA(e){if(e==null){lt.error(FG);return}if(_t===void 0){lt.trace(BG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(aA,"getConfigValue");function ui(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):nA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ui,"getConfigFilePath");function SE(e=!1){if(_t===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{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{uA(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Un(r)}catch(i){if(i.code===Er.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
|
|
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}`)}VG(s,r),TE(s);let n=s.toJSON();if(vG.config=n,_t=ro(n),_t.logging_rotation_rotate)for(let i in sA)_t[i]&<.error(`Config ${sA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(HG)}}a(SE,"initConfig");function VG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],rs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],rs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],rs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Kt.writeFileSync(t,String(e)))}a(VG,"checkForUpdatedConfig");function TE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=CG(t);if(r.error)throw sl.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(TE,"validateConfig");function $G(e,t){_t===void 0&&(_t={});let r=ss[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a($G,"updateConfigObject");function cA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&SE();let o=aA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Un(c),_;if(r===void 0&&e.toLowerCase()===fr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=pE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===fr.HTTP_SECUREPORT&&r[f]===_t[fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===fr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Er.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=pE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&oA(u,_),TE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&YG(c,l),Kt.writeFileSync(d,String(u)),n&&(_t=ro(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cA,"updateConfigValue");function YG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Kt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(qG),lt.error(r)}}a(YG,"backupConfigFile");var KG=["databases"];function ro(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),il=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!KG.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!fr[u.toUpperCase()]&&ss[u]&&(n[ss[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(ro,"flattenConfig");function pE(e,t){if(e===fr.CLUSTERING_NODENAME||e===fr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(DG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return mt.autoCast(t)}a(pE,"castConfigValue");function WG(){let e=mt.getPropsFilePath(),t=ui(e);return Un(t).toJSON()}a(WG,"getConfiguration");async function QG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cA(void 0,void 0,n,!0),GG}catch(i){throw typeof i=="string"||i instanceof String?MG(i,i,PG.BAD_REQUEST,void 0,void 0,!0):i}}a(QG,"setConfiguration");function RE(){let e=mt.getPropsFilePath();try{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=ui(e);return Un(t).toJSON()}a(RE,"readConfigFile");function Un(e){return LG.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Un,"parseYamlDoc");function zG(){let e=RE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=rA(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=rA(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!mt.isEmptyOrZeroLength(s)&&!mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(zG,"getClusteringRoutes");function uA(e){let t=nA(e);_t={};for(let r in ss){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ss[r].toLowerCase();n===fr.LOGGING_ROOT?_t[n]=rs.dirname(s):_t[n]=s}return _t}a(uA,"initOldConfig");function JG(e){let t=RE();return UG.get(t,e.replaceAll("_","."))}a(JG,"getConfigFromFile");async function XG(e,t){let r=Un(ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(ui(),String(r))}a(XG,"addConfig");function jG(e){let t=ui(mt.getPropsFilePath()),r=Un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Kt.writeFileSync(n,String(r))}a(jG,"deleteConfigFromFile");function ZG(){return il||(SE(),il)}a(ZG,"getConfigObj")});var X=T((qse,fA)=>{"use strict";var gE=require("fs-extra"),ns=require("path"),_A=require("os"),ex=require("properties-reader"),wa=G(),li=$(),ee=b(),ol=hr(),tx="Error initializing environment manager",al="BOOT_PROPS_FILE_PATH",dA=!1,rx={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},rn={};fA.exports={BOOT_PROPS_FILE_PATH:al,getHdbBasePath:sx,setHdbBasePath:nx,get:ix,initSync:ax,setProperty:he,initTestEnvironment:cx};function sx(){return rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(sx,"getHdbBasePath");function nx(e){rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nx,"setHdbBasePath");function ix(e){let t=ol.getConfigValue(e);return t===void 0?rn[e]:t}a(ix,"get");function he(e,t){rx[e]&&(rn[e]=t),ol.updateConfigObject(e,t)}a(he,"setProperty");function ox(){let e;try{e=li.getPropsFilePath(),gE.accessSync(e,gE.constants.F_OK|gE.constants.R_OK),dA=!0;let t=ex(e);return rn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),rn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rn[al]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(ox,"doesPropFileExist");function ax(e=!1){try{(dA||ox()||li.noBootFile())&&(ol.initConfig(e),rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ol.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wa.error(tx),wa.error(t),console.error(t),process.exit(1)}}a(ax,"initSync");function cx(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ns.join(__dirname,"../../","unitTests");rn[al]=ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,_A.userInfo()?_A.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,li.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,li.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,li.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,li.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,li.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${al}. Please check your boot props and settings files`;wa.fatal(r),wa.error(t)}}a(cx,"initTestEnvironment")});var ve=T((Gse,RA)=>{"use strict";var Ma=b(),ux=$(),Wt=X(),Pa=require("path"),lx=require("minimist"),EA=require("fs-extra"),hA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Mn,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:cl}=Ma,La,Da,Ua;function mA(){if(La!==void 0)return La;if(Wt.getHdbBasePath()!==void 0)return La=Wt.get(Mn.STORAGE_PATH)||Pa.join(Wt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(mA,"getBaseSchemaPath");function pA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=TA(cl),Da}a(pA,"getSystemSchemaPath");function SA(){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(SA,"getTransactionAuditStoreBasePath");function _x(e,t){let r=Wt.get(Mn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(SA(),e.toString())}a(_x,"getTransactionAuditStorePath");function TA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(mA(),e)}a(TA,"getSchemaPath");function dx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,lx(process.argv));let s=r[Mn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ux.isObject(s))throw o;i=s}for(let o of i){let c=o[cl];if(!c)continue;let u=Wt.get(Mn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return hA.set(u,[cl,Ca.TABLES,t,Ca.PATH],_),Wt.setProperty(Mn.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return hA.set(u,[cl,Ca.PATH],l),Wt.setProperty(Mn.DATABASES,u),l}}let n=r[Mn.STORAGE_PATH.toUpperCase()];if(n){if(!EA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return EA.mkdirsSync(i),Wt.setProperty(Mn.STORAGE_PATH,n),i}return pA()}a(dx,"initSystemSchemaPaths");function fx(){La=void 0,Da=void 0,Ua=void 0}a(fx,"resetPaths");RA.exports={getBaseSchemaPath:mA,getSystemSchemaPath:pA,getTransactionAuditStorePath:_x,getTransactionAuditStoreBasePath:SA,getSchemaPath:TA,initSystemSchemaPaths:dx,resetPaths:fx}});var mr=T(($se,bA)=>{"use strict";var Ex=dr().LMDB_ERRORS_ENUM,kse=require("lmdb"),hx=ze(),Vse=require("buffer").Buffer,{OVERFLOW_MARKER:gA,MAX_SEARCH_KEY_LENGTH:ul}=hx,AA=["number","string","symbol","boolean","bigint"];function mx(e){if(e=e?.primaryStore||e,!e)throw new Error(Ex.ENV_REQUIRED)}a(mx,"validateEnv");function px(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(px,"stringifyData");function Sx(e){return e instanceof Date?e.valueOf():e}a(Sx,"convertKeyValueToWrite");function Tx(e){if(e==null)return;if(AA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+gA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+gA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Tx,"getIndexedValues");var ll=0,OA=0;function NA(){OA=Date.now()-performance.now()}a(NA,"adjustStartTime");NA();var Rx=6e4;setInterval(NA,Rx).unref();function gx(){let e=performance.now()+OA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(gx,"getNextMonotonicTime");bA.exports={validateEnv:mx,stringifyData:px,convertKeyValueToWrite:Sx,getNextMonotonicTime:gx,getIndexedValues:Tx}});var yA,is,AE,va=Te(()=>{yA=require("events"),is=class extends yA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new AE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},AE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Pr(e){return e[vt]||(e[vt]=Object.create(null))}function El(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new os.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[vt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=IA(d,o);if(f)return l||(l=this[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 IA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},El(r,t)),new r(e)):new _l(e);case Array:let s=new fl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IA(o,t?.elements)),s[n]=o}return s}}function hl(e){let t=e[vt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=hl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ba(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=Ba(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[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 dl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[_i]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(dl(i))return!0}else return!0}}else{let r=e[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(dl(n))return!0}else return!0}else return!0}}return!1}var os,vt,_l,_i,fl,ml=Te(()=>{as();os=D(j()),vt=Symbol("own-data");a(Pr,"getChanges");a(El,"assignTrackedAccessors");a(IA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};El(_l,{});a(hl,"collapseData");a(Ba,"deepFreeze");a(dl,"hasChanges");_i=Symbol.for("has-array-changes"),fl=class extends Array{static{a(this,"TrackedArray")}[_i];constructor(t){super(t)}splice(...t){return this[_i]=!0,super.splice(...t)}push(...t){return this[_i]=!0,super.push(...t)}pop(){return this[_i]=!0,super.pop()}unshift(...t){return this[_i]=!0,super.unshift(...t)}shift(){return this[_i]=!0,super.shift()}};fl.prototype.constructor=Array});function bx(){Nx=setInterval(function(){for(let e of OE)if(e.stale){let t=e[me]?.url;wA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Ox).unref()}var NE,wA,Ax,OE,di,pl,Ox,Nx,bE=Te(()=>{NE=D(mr()),wA=D(G());as();Ax=100,OE=new Set,di=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),OE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(OE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,NE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<Ax>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},pl=class extends di{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,NE.getNextMonotonicTime)())}getReadTxn(){}},Ox=3e4;a(bx,"startMonitoringTxns");bx()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new di;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var CA,fi=Te(()=>{CA=require("../index");as();bE();a(Ge,"transaction");(0,CA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function IE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new so.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(UA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Ls.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\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 so.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new so.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=wE(e);if(!S)throw new so.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:DA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function wE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),UA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return Cs(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return Cs(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return Cs(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return Cs(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Cs(r,n=>(0,Ls.compareKeys)(n,s[0])>=0&&(0,Ls.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<=0);case"ne":return Cs(r,n=>(0,Ls.compareKeys)(n,s)!==0);default:throw new so.ClientError(`Unknown query comparator "${t}"`)}}function Cs(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new yE,r,s,n,i,o,c=LA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=yx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?Ix:LA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,pt,Ls,DA,yx,UA,LA,Ix,yE,Tl=Te(()=>{so=D(j()),pt=D(ze()),Ls=require("ordered-binary"),DA=require("lmdb"),yx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(IE,"idsForCondition");UA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(wE,"filterByType");a(Cs,"attributeComparator");LA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Ix=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");yE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var DE={};Qe(DE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>Cx});function Cx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function MA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new LE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[we]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[qA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new Rl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Rl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new HA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function CE(e){let t=e[Re];if(t){let r=e[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 PA(e){if(typeof e=="string")return t=>CE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=CE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=CE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var vA,BA,HA,me,we,cs,qA,Re,wx,Nt,Rl,LE,as=Te(()=>{vA=require("crypto");va();BA=require("../index"),HA=D(j());ml();fi();Tl();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),qA=Symbol("save-updates"),Re=Symbol("stored-record"),wx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=PA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[cs]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,vA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=PA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[cs])return this.constructor.create(this[we],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[cs]}static coerceId(t){return t}static parseQuery(t){return Sl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&wx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:MA(t,this)}}return MA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[we]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[we],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[cs]=!0),n}subscribe(t){return new is}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new is}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,BA._assignPackageExport)("Resource",Nt);a(Cx,"snake_case");Rl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(MA,"pathToId");LE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(CE,"selectFromObject");a(PA,"transformForSelect")});var ME={};Qe(ME,{loadGQLSchema:()=>Ux,start:()=>UE,startOnMainThread:()=>Dx});function UE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(F){if(F.kind==="NonNullType"){let B=Q(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:Q(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a(Q,"getProperty");let A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let F of S.fields){let w=Q(F.type);w.name=F.name.value,I.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):Lx.includes(S.type)||(0,FA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,gl.dirname)(s),S.tableClass):i.set((0,gl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,gl.dirname)(s)+"/"+S.name,A.tableClass)}}}var gl,FA,Lx,Dx,Ux,GA=Te(()=>{gl=require("path");fe();FA=D(Ze()),Lx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(UE,"start");Dx=UE,Ux=UE({ensureTable:et}).handleFile});async function Al(e){return Mx?(Ha||(Ha=Px(Bx)),(await(await Ha).import(e)).namespace):import(e)}async function Px(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ha=new Compartment({console,Math,Date,fetch:vx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,kA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:pr,databases:xe})}};let s=await(0,xA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function vx(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Bx(){return{Resource:Nt,tables:pr}}var xA,kA,Mx,Ha,PE=Te(()=>{as();fe();xA=require("fs/promises"),kA=require("path"),Mx=!1;a(Al,"secureImport");a(Px,"getCompartment");a(vx,"secureOnlyFetch");a(Bx,"getGlobalVars")});var BE={};Qe(BE,{handleFile:()=>Hx});async function Hx(e,t,r,s){let n=new Map,i=(0,VA.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,vE.dirname)(t),o.default),c(o,(0,vE.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var VA,vE,$A=Te(()=>{VA=require("url");PE();vE=require("path");a(Hx,"handleFile")});var qE={};Qe(qE,{start:()=>qx});function qx({resources:e}){e.set("login",HE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HE,YA=Te(()=>{as();a(qx,"start");HE=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var GE=T((Ane,QA)=>{"use strict";var{Readable:Fx}=require("stream"),Gx=1e4;QA.exports={streamAsJSON(e){return new FE({value:e})}};var FE=class extends Fx{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),KA)}catch(n){yield KA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);WA(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Gx?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return WA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function KA(e){return console.error(e),JSON.stringify(e.toString())}a(KA,"handleError");function WA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(WA,"when")});var aO=T((bne,oO)=>{"use strict";var xE=require("recursive-iterator"),xx=require("alasql"),kE=require("clone"),zA=$(),{handleHDBError:JA,hdb_errors:kx}=j(),{HDB_ERROR_MSGS:XA,HTTP_STATUS_CODES:jA}=kx,{getDatabases:Vx}=(fe(),Z(Ce)),$x=["DISTINCT_ARRAY"],ZA=Symbol("validateTables"),VE=Symbol("validateTable"),Nne=Symbol("getAllColumns"),eO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),tO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),$E=Symbol("validateColumn"),rO=Symbol("setColumnsForTable"),sO=Symbol("checkColumnsForAsterisk"),nO=Symbol("validateGroupBy"),iO=Symbol("hasColumns"),YE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ZA](),this[sO](),this[eO]()}[ZA](){if(this[iO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[VE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[VE](t.table)})}}[iO](){let t=!1,r=new xE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[VE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Vx();if(!r[t.databaseid])throw JA(new Error,XA.SCHEMA_NOT_FOUND(t.databaseid),jA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw JA(new Error,XA.TABLE_NOT_FOUND(t.databaseid,t.tableid),jA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=kE(n);i.table=kE(t),this.attributes.push(i)})}[Ol](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[sO](){let t=new xE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[rO](r.tableid)}[rO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new xx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[eO](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[nO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new xE(t),n=[];for(let{node:i,path:o}of s)!zA.isEmpty(i)&&!zA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[tO](i):n.push(this[$E](i)));return n}[nO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&$x.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=kE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ol](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Ol](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[tO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[$E](t)}[$E](t){let r=this[Ol](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};oO.exports=YE});var uO=T((Ine,cO)=>{"use strict";var KE=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};cO.exports=KE});var _O=T((Cne,lO)=>{"use strict";var WE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};lO.exports=WE});var OO={};Qe(OO,{AUDIT_STORE_OPTIONS:()=>gO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>Sr,setAuditRetention:()=>Yx,transactionKeyEncoder:()=>RO});function bl(e){let t=e.auditStore=e.openDB(mO.AUDIT_STORE_NAME,gO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,SO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-QE})){if((n[0]&15)===JE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},QE/10).unref())}),t}function Yx(e){clearTimeout(Fa),Fa=null,QE=e}function yl(e,t,r,s,n,i,o){let c=AO[i],u=1;s&&(s>1?no.setFloat64(0,s):Hr.set(ZE),u=9),f(0),f(t),d(r),no.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,io.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(jE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),no.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(no.setUint16(u,E|32768),u+=2):E<1056964608?(no.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,no.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new XE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:AO[s&7],tableId:i,get recordId(){return hO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?hO(e,l,d):void 0},getValue(f){return s&zE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return jE.error("Reading audit entry error",e),{}}}function hO(e,t,r){let s=e.subarray(t,r);return(0,io.readKey)(s,0,r-t)}var io,Nl,mO,pO,SO,TO,jE,Hr,no,RO,gO,QE,Fa,zE,dO,JE,fO,EO,AO,XE,oo=Te(()=>{io=require("ordered-binary"),Nl=D(X()),mO=D(ze()),pO=D(b()),SO=D(Ze()),TO=D($());xa();jE=D(G());(0,Nl.initSync)();Hr=Buffer.alloc(1024),no=new DataView(Hr.buffer,Hr.byteOffset,1024),RO={writeKey(e,t,r){return e===Ga?(t.set(Ga,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,io.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,io.readKey)(e,t,r)}},gO={encoding:"binary",keyEncoder:RO},QE=(0,TO.convertToMS)((0,Nl.get)(pO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(bl,"openAuditStore");a(Yx,"setAuditRetention");zE=16,dO=1,JE=2,fO=3,EO=4,AO={put:dO|zE,[dO]:"put",delete:JE,[JE]:"delete",message:fO|zE,[fO]:"message",invalidate:EO,[EO]:"invalidate"};a(yl,"createAuditEntry");a(Sr,"readAuditEntry");XE=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(hO,"readKeySafely")});var CO={};Qe(CO,{HAS_EXPIRATION:()=>ih,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Kx,METADATA:()=>ka,NO_TIMESTAMP:()=>eh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>ZE,RecordEncoder:()=>nh,TIMESTAMP_ASSIGN_LAST:()=>Qx,TIMESTAMP_ASSIGN_NEW:()=>yO,TIMESTAMP_ASSIGN_PREVIOUS:()=>IO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>th,getUpdateRecord:()=>oh,handleLocalTimeForGets:()=>Ll});function wO(){return co[0]=co[0]^64,Wx.getFloat64(0)}function Ll(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[ka]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[ka];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=zx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(co,0,d),l.timestampBytes=null,l.localTime=wO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ei.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ei.length;u++){let _=Ei[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ei.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function oh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?th|IO:eh:ao=u?i?.localTime?th|16384:yO|16384:eh,l>0&&(c|=ih),Cl=c,sh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:ao>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=rh,A.timestampOffset=rh.start||0))}if(u){let A=_?.user?.username;if(E&&(wl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=Sr(N).previousLocalTime;return r.put(I,yl(o,t,s,Y,A,d,wl),{ifVersion:p}),S}}r.put(Ga,yl(o,t,s,i?.localTime?1:0,A,d,wl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var NO,bO,Il,Ga,ZE,Kx,ka,co,Wx,eh,yO,Qx,IO,th,ih,rh,wl,ao,Cl,sh,nh,zx,Ei,xa=Te(()=>{NO=require("msgpackr");oo();bO=D(G()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),ZE=new Uint8Array([1,1,1,1,3,64,0,0]),Kx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),Wx=new DataView(co.buffer,0,8),eh=0,yO=0,Qx=1,IO=3,th=4,ih=16,ao=0,Cl=-1,sh=0,nh=class extends NO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||Cl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=Cl,u=sh;c>=0&&(i+=2,Cl=-1,u&&(i+=8,sh=0));let _=rh=r.call(this,s,n|2048|i);wl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Il[4]=o,Il[5]=o>>8,_.set(Il,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(co,0,c),c+=8;else for(let d=0;d<8;d++)co[d]=t[c++];u=wO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ih&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[ka]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(wO,"getTimestamp");zx=Map.prototype.get;a(Ll,"handleLocalTimeForGets");Ei=[];setInterval(()=>{for(let e=0;e<Ei.length;e++){let t=Ei[e].deref();!t||t.isDone||t.isCommitted?Ei.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&bO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(oh,"getUpdateRecord")});var Dl=T((vne,LO)=>{"use strict";var ch=X(),uh=b(),{RecordEncoder:Jx}=(xa(),Z(CO));ch.initSync();var Xx=ch.get(uh.CONFIG_PARAMS.STORAGE_COMPRESSION),jx=ch.get(uh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Zx=uh.UPDATES_PROPERTY,ah=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Xx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=jx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Jx},this.alwaysLazyProperty=s=>s===Zx)}};LO.exports=ah});var Ml=T((Hne,UO)=>{"use strict";var uo=X(),Va=b();uo.initSync();var ek=uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",DO=uo.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),tk=uo.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ul=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=ek,this.noFSAccess=!0,DO!==void 0&&(this.overlappingSync=DO),this.noReadAhead=tk}};UO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((Fne,kO)=>{"use strict";var _h=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Pl=mr(),vO=G(),Qt=dr().LMDB_ERRORS_ENUM,vl=_O(),dh=Dl(),BO=Ml(),Pn=ze(),MO=b(),{table:rk,resetDatabases:sk}=(fe(),Z(Ce)),PO=X(),ls=Pn.INTERNAL_DBIS_NAME,HO=Pn.DBI_DEFINITION_NAME,nk="data.mdb",ik="lock.mdb",$a=".mdb",ok="-lock",lh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(t,r),this.key_type=this.dbi[Pn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Pn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new _h.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bl(e,t){if(e===void 0)throw new Error(Qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Qt.ENV_NAME_REQUIRED)}a(Bl,"pathEnvNameValidation");async function fh(e,t,r=!0){try{await us.access(e)}catch(s){throw s.code==="ENOENT"?new Error(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,nk),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(fh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function ak(e,t,r=!1,s=!1){Bl(e,t);let n=Tr.basename(e);t=t.toString();let i=PO.get(MO.CONFIG_PARAMS.DATABASES);i||PO.setProperty(MO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await fh(e,t,s),qO(e,t,r)}catch(o){if(o.message===Qt.INVALID_ENVIRONMENT){let c=Tr.join(e,t);await us.mkdirp(s?c:e);let u=new BO(s?c:c+$a,!1),_=_h.open(u);_.dbis=Object.create(null);let l=new dh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Eh(e,t,r);return _[Pn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ak,"createEnvironment");async function ck(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Tr.join(e,t);return rk({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ck,"copyEnvironment");async function qO(e,t,r=!1){Bl(e,t),t=t.toString();let s=Eh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await fh(e,t),i=Tr.join(e,t+$a),o=n!=i,c=new BO(n,o),u=_h.open(c);u.dbis=Object.create(null);let _=GO(u);for(let l=0;l<_.length;l++)qr(u,_[l]);return u[Pn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(qO,"openEnvironment");async function uk(e,t,r=!1){Bl(e,t),t=t.toString();let s=Tr.join(e,t+$a),n=await fh(e,t);if(global.lmdb_map!==void 0){let i=Eh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await FO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+ok:Tr.join(Tr.dirname(n),ik))}a(uk,"deleteEnvironment");async function FO(e){Pl.validateEnv(e);let t=e[Pn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function Eh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Eh,"getCachedEnvironmentName");function lk(e){Pl.validateEnv(e);let t=Object.create(null),r=qr(e,ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ls)try{t[s]=Object.assign(new vl,n)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(lk,"listDBIDefinitions");function GO(e){Pl.validateEnv(e);let t=[],r=qr(e,ls);for(let{key:s}of r.getRange({start:!1}))s!==ls&&t.push(s);return t}a(GO,"listDBIs");function _k(e,t){let s=qr(e,ls).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{vO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(_k,"getDBIDefinition");function xO(e,t,r,s=!r){if(Hl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===Qt.DBI_DOES_NOT_EXIST){let i=new dh(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[HO]=c,qr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(xO,"createDBI");function qr(e,t){if(Hl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=_k(e,t):r=new vl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new dh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(Qt.DBI_DOES_NOT_EXIST):n}return s[HO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function dk(e,t){Hl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Pn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(dk,"statDBI");async function fk(e,t){try{let r=Tr.join(e,t+$a);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(fk,"environmentDataSize");function Ek(e,t){if(Hl(e,t),t=t.toString(),t===ls)throw new Error(Qt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,ls).removeSync(t)}a(Ek,"dropDBI");function hk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{qr(e,i)}catch(o){if(o.message===Qt.DBI_DOES_NOT_EXIST)xO(e,i,i!==t,i===t),s=!0;else throw o}}s&&sk()}a(hk,"initializeDBIs");kO.exports={openDBI:qr,openEnvironment:qO,createEnvironment:ak,listDBIs:GO,listDBIDefinitions:lk,createDBI:xO,dropDBI:Ek,statDBI:dk,deleteEnvironment:uk,initializeDBIs:hk,TransactionCursor:lh,environmentDataSize:fk,copyEnvironment:ck,closeEnvironment:FO}});var $O=T((xne,VO)=>{"use strict";var hh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};VO.exports=hh});var KO=T((Vne,YO)=>{"use strict";var mh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};YO.exports=mh});var QO=T((Yne,WO)=>{"use strict";var ph=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};WO.exports=ph});var lo=T((Jne,XO)=>{"use strict";var mk=Ue(),pk=$O(),Sk=KO(),Tk=QO(),Ds=mr(),Ya=dr().LMDB_ERRORS_ENUM,Rk=ze(),sn=b(),gk=$(),Ak=require("uuid"),Wne=require("lmdb"),{handleHDBError:Ok,hdb_errors:Nk}=j(),{OVERFLOW_MARKER:Qne,MAX_SEARCH_KEY_LENGTH:zne}=Rk,zO=X();zO.initSync();var ql=zO.get(sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sh=sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function bk(e,t,r,s,n=Ds.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new pk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];JO(_,!0,n);let l=yk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Rh(o,c,s,i,n)}a(bk,"insertRecords");function yk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][sn.FUNC_VAL],s[o]=c)}let u=Ds.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Fl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Fl),e.dbis[t].put(n,s,s[hi])})}a(yk,"insertRecord");function Ik(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ik,"removeSkippedRecords");function JO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ds.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sh]))&&(e[Sh]=r||Ds.getNextMonotonicTime()):delete e[Sh]}a(JO,"setTimestamps");function Th(e,t,r){r.indexOf(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),mk.initializeDBIs(e,t,r)}a(Th,"initializeTransaction");async function wk(e,t,r,s,n=Ds.getNextMonotonicTime()){Ah(e,t,r,s),Th(e,t,r);let i=new Sk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=gh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Rh(c,u,s,i,n,o)}a(wk,"updateRecords");async function Ck(e,t,r,s,n=Ds.getNextMonotonicTime()){try{Ah(e,t,r,s)}catch(u){throw Ok(u,u.message,Nk.HTTP_STATUS_CODES.BAD_REQUEST)}Th(e,t,r);let i=new Tk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;gk.isEmpty(_[t])?(l=Ak.v4(),_[t]=l):l=_[t];let d=gh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Rh(o,c,s,i,n)}a(Ck,"upsertRecords");async function Rh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ds.getNextMonotonicTime(),Ik(r,i),s}a(Rh,"finalizeWrite");function gh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(JO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][sn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ds.getIndexedValues(A);if(I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ds.getIndexedValues(p),I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Fl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[hi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:gh(e,t,r,s,n,i,o))}a(gh,"updateUpsertRecord");function Lk(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Lk,"validateBasic");function Ah(e,t,r,s){if(Lk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(Ah,"validateWrite");function Fl(){}a(Fl,"noop");XO.exports={insertRecords:bk,updateRecords:wk,upsertRecords:Ck}});var mi=T((jne,Dk)=>{Dk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Us=T((Zne,eN)=>{"use strict";var ZO=$(),jO=b(),_o=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,nn=require("joi"),vn={schema_format:{pattern:_o,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Uk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required(),Mk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()),Pk=nn.alternatives(nn.string().min(1).max(vn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),nn.number()).required();function vk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>vn.schema_length.maximum?`'${e}' maximum of 250 characters`:_o.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(vk,"checkValidTable");function Bk(e,t){return ZO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Bk,"validateSchemaExists");function Hk(e,t){let r=t.state.ancestors[0].schema;return ZO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Hk,"validateTableExists");function qk(e,t){return e.toLowerCase()===jO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${jO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qk,"validateSchemaName");eN.exports={common_validators:vn,schema_regex:_o,hdb_schema_table:Uk,validateSchemaExists:Bk,validateTableExists:Hk,validateSchemaName:qk,checkValidTable:vk,hdb_database:Mk,hdb_table:Pk}});var Gl=T((tie,tN)=>{var{common_validators:Ms}=Us(),Wa=Fe(),Ka="is required",tt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function Qa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Qa,"makeAttributesStrings");function Fk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Fk,"schema_object");function Gk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Gk,"table_object");function xk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(xk,"create_table_object");function kk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence={message:Ka},tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(kk,"attribute_object");function Vk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Vk,"describe_table");function $k(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a($k,"validateTableResidence");tN.exports={schema_object:Fk,create_table_object:xk,table_object:Gk,attribute_object:kk,describe_table:Vk,validateTableResidence:$k}});var sN=T((sie,rN)=>{"use strict";var Yk=require("uuid"),Oh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Yk.v4(),this.schema_table=`${this.schema}.${this.table}`}};rN.exports=Oh});var xl=T((iie,nN)=>{"use strict";var Kk=sN(),Nh=class extends Kk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};nN.exports=Nh});var oN=T((aie,iN)=>{"use strict";iN.exports=Qk;var Wk="inserted";function Qk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Wk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Qk,"returnObject")});var kl=T((uie,_N)=>{"use strict";var zk=b(),bh=Ue(),Jk=lo(),{getSystemSchemaPath:Xk,getSchemaPath:jk}=ve(),Zk=mi(),eV=Gl(),tV=xl(),rV=oN(),{handleHDBError:aN,hdb_errors:uN}=j(),cN=$(),{HTTP_STATUS_CODES:sV}=uN,yh=Zk.hdb_attribute,lN=[];for(let e=0;e<yh.attributes.length;e++)lN.push(yh.attributes[e].attribute);var nV="inserted";_N.exports=iV;async function iV(e){let t=eV.attribute_object(e);if(t)throw aN(new Error,t.message,uN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&cN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw aN(new Error,r,sV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=cN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new tV(e.schema,e.table,e.attribute,e.id);try{let i=await bh.openEnvironment(jk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);bh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await bh.openEnvironment(Xk(),zk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Jk.insertRecords(o,yh.hash_attribute,lN,[n]);return rV(nV,c,{records:[n]},u)}catch(i){throw i}}a(iV,"lmdbCreateAttribute")});var wh=T((_ie,fN)=>{var{hdb_table:oV,hdb_database:dN}=Us(),aV=Fe(),Ih=require("joi"),cV={undefined:"undefined",null:"null"},uV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||cV[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),lV=Ih.object({database:dN,schema:dN,table:oV,records:Ih.array().items(Ih.object().custom(uV)).required()});fN.exports=function(e){return aV.validateBySchema(e,lV)}});var za=T((Eie,hN)=>{"use strict";var on=$(),EN=G(),fie=wh(),{getDatabases:_V}=(fe(),Z(Ce)),{ClientError:pi}=j();hN.exports=dV;function dV(e){if(on.isEmpty(e))throw new pi("invalid update parameters defined.");if(on.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(on.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=_V()[e.schema]?.[e.table];if(on.isEmpty(t))throw new pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&on.isEmptyOrZeroLength(o[r]))throw EN.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!on.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw EN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!on.isEmpty(o[r])&&o[r]!==""&&s.has(on.autoCast(o[r]))&&(o.skip=!0),s.add(on.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(dV,"insertUpdateValidate")});var Ja=T((mie,mN)=>{"use strict";var fV=b().OPERATIONS_ENUM,Ch=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=fV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};mN.exports=Ch});var ec=T((Tie,pN)=>{"use strict";var Sie=Ja(),Vl=b(),Dh=$(),Lh=G(),EV=require("uuid"),{handleHDBError:Xa,hdb_errors:hV}=j(),{HDB_ERROR_MSGS:ja,HTTP_STATUS_CODES:Za}=hV;pN.exports=mV;function mV(e,t,r){for(let n=0;n<t.length;n++)pV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];SV(i,r,e.operation)}}a(mV,"processRows");function pV(e){if(Buffer.byteLength(String(e))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xa(new Error,ja.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Dh.isEmptyOrZeroLength(e)||Dh.isEmpty(e.trim()))throw Xa(new Error,ja.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(pV,"validateAttribute");function SV(e,t,r){if(!e.hasOwnProperty(t)||Dh.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=EV.v4();return}throw Lh.error("Update transaction aborted due to record with no hash value:",e),Xa(new Error,ja.RECORD_MISSING_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Lh.error(e),Xa(new Error,ja.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Lh.error(e),Xa(new Error,ja.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(SV,"validateHash")});var TN=T((gie,SN)=>{"use strict";var Uh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};SN.exports=Uh});var AN=T((Oie,gN)=>{"use strict";var Mh=Ue(),TV=G(),RN=dr().LMDB_ERRORS_ENUM;gN.exports=RV;async function RV(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Mh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==RN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Mh.closeEnvironment(global.lmdb_map[s]),await Mh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==RN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){TV.error(t)}}a(RV,"cleanLMDBMap")});var an=T((bie,yN)=>{"use strict";var tc=require("crypto"),gV=X(),{CONFIG_PARAMS:AV}=b(),NN="aes-256-cbc",OV=32,NV=16,Ph=64,bN=32,bV=Ph+bN,ON=new Map;yN.exports={encrypt:yV,decrypt:IV,createNatsTableStreamName:wV};function yV(e){let t=tc.randomBytes(OV),r=tc.randomBytes(NV),s=tc.createCipheriv(NN,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(yV,"encrypt");function IV(e){let t=e.substr(0,Ph),r=e.substr(Ph,bN),s=e.substr(bV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(NN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(IV,"decrypt");function wV(e,t){let r=gV.get(AV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=ON.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),ON.set(r,s)),s}a(wV,"createNatsTableStreamName")});var Si=T((wie,wN)=>{"use strict";var Iie=Fr(),$l=G(),IN=Gl(),CV=an(),Yl=$(),{handleHDBError:Kl,hdb_errors:LV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:vh}=LV,DV=X();DV.initSync();var{getDatabases:Bh}=(fe(),Z(Ce));wN.exports={describeAll:UV,describeTable:Ql,describeSchema:MV};async function UV(e){try{let t=Yl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Bh(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Ql({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Ql({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){$l.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return $l.error("Got an error in describeAll"),$l.error(t),Kl(new Error,Wl.DESCRIBE_ALL_ERR)}}a(UV,"describeAll");async function Ql(e,t){Yl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=IN.describe_table(e);if(i)throw i;let c=Bh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),vh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=CV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){$l.warn(`unable to stat table dbi due to ${f}`)}return d}a(Ql,"descTable");async function MV(e){Yl.transformReq(e);let t=IN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Bh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),vh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yl.isEmpty(u)||u.describe){let _=await Ql({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(MV,"describeSchema")});var cn=T((Uie,MN)=>{var PV=mi(),{callbackify:LN,promisify:vV}=require("util"),{getDatabases:DN}=(fe(),Z(Ce));MN.exports={setSchemaDataToGlobal:CN,getTableSchema:BV,getSystemSchema:HV,setSchemaDataToGlobalAsync:vV(CN)};var UN=Si(),Lie=LN(UN.describeAll),Die=LN(UN.describeTable);function CN(e){global.hdb_schema=DN(),e&&e()}a(CN,"setSchemaDataToGlobal");function BV(e,t,r){let s=DN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(BV,"getTableSchema");function HV(){return PV}a(HV,"getSystemSchema")});var Gr=T((Pie,HN)=>{"use strict";var Jl=wh(),bt=$(),qV=require("util"),Xl=_s(),FV=cn(),PN=G(),{handleHDBError:Ti,hdb_errors:GV}=j(),{HTTP_STATUS_CODES:Ri}=GV,xV=qV.promisify(FV.getTableSchema),kV="updated",vN="inserted",BN="upserted";HN.exports={insert:$V,update:YV,upsert:KV,validation:VV,flush:WV};async function VV(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await xV(e.schema,e.table),r=Jl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&bt.isEmptyOrZeroLength(c[s]))throw PN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw PN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(VV,"validation");async function $V(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.createRecords(e);return zl(vN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a($V,"insertData");async function YV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.updateRecords(e);return bt.isEmpty(s.existing_rows)?zl(kV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(YV,"updateData");async function KV(e){if(e.operation!=="upsert")throw Ti(new Error,"invalid operation, must be upsert",Ri.INTERNAL_SERVER_ERROR);let t=Jl(e);if(t)throw Ti(new Error,t.message,Ri.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ti(new Error,r,Ri.BAD_REQUEST);let s=await Xl.upsertRecords(e);return zl(BN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(KV,"upsertData");function zl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===vN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===BN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function WV(e){return bt.transformReq(e),Xl.flush(e.schema,e.table)}a(WV,"flush")});var qh=T((Bie,GN)=>{var QV=Fe(),Hh=require("joi"),{hdb_table:zV,hdb_database:qN}=Us(),FN={schema:qN,database:qN,table:zV},JV={date:Hh.date().iso().required()},XV={timestamp:Hh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};GN.exports=function(e,t){let r=t==="timestamp"?{...FN,...XV}:{...FN,...JV},s=Hh.object(r);return QV.validateBySchema(e,s)}});var VN=T((Hie,kN)=>{var jV=Fe(),Fh=require("joi"),{hdb_table:ZV,hdb_database:xN}=Us(),e$=Fh.object({schema:xN,database:xN,table:ZV,hash_values:Fh.array().required(),ids:Fh.array()});kN.exports=function(e){return jV.validateBySchema(e,e$)}});var YN=T((qie,$N)=>{"use strict";var Gh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},xh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},kh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};$N.exports={InsertObject:Gh,NoSQLSeachObject:xh,DeleteResponseObject:kh}});var Oi=T((Gie,JN)=>{"use strict";var WN=qh(),t$=VN(),gi=$(),KN=require("moment"),QN=G(),{promisify:r$,callbackify:s$}=require("util"),Ai=b(),n$=cn(),Vh=r$(n$.getTableSchema),$h=_s(),{DeleteResponseObject:i$}=YN(),{handleHDBError:Bn,hdb_errors:o$}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Hn}=o$,a$="records successfully deleted",c$=s$(zN);JN.exports={delete:c$,deleteRecord:zN,deleteFilesBefore:u$,deleteAuditLogsBefore:l$};async function u$(e){let t=WN(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),!KN(e.date,KN.ISO_8601).isValid())throw Bn(new Error,jl.INVALID_DATE,Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_DATE,!0);let s=gi.checkSchemaTableExist(e.schema,e.table);if(s)throw Bn(new Error,s,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,s,!0);let n=await $h.deleteRecordsBefore(e);if(await Vh(e.schema,e.table),QN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(u$,"deleteFilesBefore");async function l$(e){let t=WN(e,"timestamp");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),isNaN(e.timestamp))throw Bn(new Error,jl.INVALID_VALUE("Timestamp"),Hn.BAD_REQUEST,Ai.LOG_LEVELS.ERROR,jl.INVALID_VALUE("Timestamp"),!0);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);let s=await $h.deleteAuditLogsBefore(e);return await Vh(e.schema,e.table),QN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(l$,"deleteAuditLogsBefore");async function zN(e){e.ids&&(e.hash_values=e.ids);let t=t$(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);gi.transformReq(e);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);try{await Vh(e.schema,e.table);let s=await $h.deleteRecords(e);return gi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${a$}`),s}catch(s){if(s.message===Ai.SEARCH_NOT_FOUND_MESSAGE){let n=new i$;return n.message=Ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(zN,"deleteRecord")});var Zl=T((kie,ZN)=>{var _$=require("crypto"),XN=9;function d$(e){let t=E$(XN),r=jN(e+t);return t+r}a(d$,"createHash");function f$(e,t){let r=e.substr(0,XN),s=r+jN(t+r);return e===s}a(f$,"validateHash");function E$(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(E$,"generateSalt");function jN(e){return _$.createHash("md5").update(e).digest("hex")}a(jN,"md5");ZN.exports={hash:d$,validate:f$}});var tb=T(($ie,eb)=>{var Yh=Fe(),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 h$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Yh.validateObject(e,Bt)}a(h$,"addUserValidation");function m$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Yh.validateObject(e,Bt)}a(m$,"alterUserValidation");function p$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Yh.validateObject(e,Bt)}a(p$,"dropUserValidation");eb.exports={addUserValidation:h$,alterUserValidation:m$,dropUserValidation:p$}});var ke=T((Wie,sb)=>{"use strict";var{platform:Kie}=require("os"),S$="nats-server.zip",Kh="nats-server",T$=process.platform==="win32"?`${Kh}.exe`:Kh,Wh="HDB",R$=/^[^\s.,*>]+$/,rb="__request__",g$=a(e=>`${e}.${rb}`,"REQUEST_SUBJECT"),A$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},O$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},N$={HUB:"hub.pid",LEAF:"leaf.pid"},b$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},y$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Wh,deliver_subject:"__HDB__.WORKQUEUE"},I$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Wh,deliver_subject:"HDB.SCHEMAQUEUE"},w$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Wh,deliver_subject:"HDB.USERQUEUE"},C$={SUCCESS:"success",ERROR:"error"},L$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},D$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},U$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},M$={debug:"-D",trace:"-DVV"};sb.exports={NATS_SERVER_ZIP:S$,NATS_SERVER_NAME:Kh,NATS_BINARY_NAME:T$,PID_FILES:N$,NATS_CONFIG_FILES:O$,SERVER_SUFFIX:b$,WORK_QUEUE_CONSUMER_NAMES:y$,SCHEMA_QUEUE_CONSUMER_NAMES:I$,USER_QUEUE_CONSUMER_NAMES:w$,NATS_TERM_CONSTRAINTS_RX:R$,REQUEST_SUFFIX:rb,UPDATE_REMOTE_RESPONSE_STATUSES:C$,CLUSTER_STATUS_STATUSES:L$,REQUEST_SUBJECT:g$,SUBJECT_PREFIXES:D$,MSG_HEADERS:A$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:M$,LOG_LEVEL_HIERARCHY:U$}});var ib=T((zie,nb)=>{"use strict";var e_=b(),t_=class{static{a(this,"BaseLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Qh=class extends t_{static{a(this,"ExtendedLicense")}constructor(t=0,r=e_.RAM_ALLOCATION_ENUM.DEFAULT,s=e_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};nb.exports={BaseLicense:t_,ExtendedLicense:Qh}});var rc=T((Xie,_b)=>{"use strict";var ho=require("fs-extra"),ob=Zl(),ab=require("crypto"),P$=require("moment"),v$=require("uuid").v4,Ht=G(),Jh=require("path"),B$=$(),qn=b(),H$=ib().ExtendedLicense,Eo="invalid license key format",q$="061183",F$="mofi25",G$="aes-256-cbc",x$=16,k$=32,cb=X();cb.initSync();var zh;_b.exports={validateLicense:ub,generateFingerPrint:$$,licenseSearch:lb,getLicense:W$};function Xh(){return Jh.join(cb.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.LICENSE_FILE_NAME)}a(Xh,"getLicenseDirPath");function V$(){let e=Xh();return Jh.join(e,qn.LICENSE_FILE_NAME)}a(V$,"getLicenseFilePath");function jh(){let e=Xh();return Jh.join(e,qn.REG_KEY_FILE_NAME)}a(jh,"getFingerPrintFilePath");async function $$(){let e=jh();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await Y$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a($$,"generateFingerPrint");async function Y$(){let e=v$(),t=ob.hash(e),r=jh();try{await ho.mkdirp(Xh()),await ho.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ht.error(`Error writing fingerprint file to ${r}`),Ht.error(s),new Error("There was an error generating the fingerprint")}return t}a(Y$,"writeFingerprint");function ub(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qn.RAM_ALLOCATION_ENUM.DEFAULT,version:qn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=jh(),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(F$),c=o[1];c=Buffer.concat([Buffer.from(c)],x$);let u=Buffer.concat([Buffer.from(i)],k$),_=ab.createDecipheriv(G$,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=K$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Eo),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<P$().valueOf()&&(r.valid_date=!1),ob.validate(o[1],`${q$}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ht.error("Invalid licence"),r}a(ub,"validateLicense");function K$(e,t){try{let r=ab.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ht.warn("Check old license failed")}}a(K$,"checkOldLicense");function lb(){let e=new H$,t=[];try{t=ho.readFileSync(V$(),"utf-8").split(qn.NEW_LINE)}catch(r){r.code==="ENOENT"?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(B$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=ub(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=qn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return zh=e,e}a(lb,"licenseSearch");async function W$(){return zh||await lb(),zh}a(W$,"getLicense")});var xr=T((roe,Ib)=>{"use strict";var hb="username is required",mb="nothing to update, must supply active, role or password to update",pb="password cannot be an empty string",Sb="If role is specified, it cannot be empty.",Tb="active must be true or false";Ib.exports={addUser:rY,alterUser:sY,dropUser:iY,getSuperUser:uY,userInfo:oY,listUsers:s_,listUsersExternal:aY,setUsersToGlobal:po,findAndValidateUser:bb,getClusterUser:lY,USERNAME_REQUIRED:hb,ALTERUSER_NOTHING_TO_UPDATE:mb,EMPTY_PASSWORD:pb,EMPTY_ROLE:Sb,ACTIVE_BOOLEAN:Tb};var Rb=Gr(),Q$=Oi(),tm=Zl(),gb=tb(),Ab=Fr(),rm=un(),Rr=$(),Ob=require("validate.js"),_e=G(),{promisify:z$}=require("util"),sm=an(),db=b(),fb=ke(),J$=hr(),Zie=X(),eoe=rc(),X$=mi(),{table:toe}=(fe(),Z(Ce)),{handleHDBError:Ps,hdb_errors:j$}=j(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:Zh,HDB_ERROR_MSGS:mo}=j$,{UserEventMsg:nm}=ds(),em=require("lodash"),{server:im}=(Mr(),Z(to)),Z$=G();im.getUser=bb;var Nb={username:!0,active:!0,role:!0,password:!0},Eb=new Map,r_=Ab.searchByValue,eY=Ab.searchByHash,tY=z$(Q$.delete);async function rY(e){let t=Ob.cleanAttributes(e,Nb),r=gb.addUserValidation(t);if(r)throw Ps(new Error,r.message,vs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await r_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ps(new Error,mo.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ps(new Error,mo.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Rb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await po()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ps(new Error,mo.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],rm.signalUserChange(new nm(process.pid)),`${c.username} successfully added`}a(rY,"addUser");async function sY(e){let t=Ob.cleanAttributes(e,Nb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(hb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(mb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(pb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Tb);let r=nY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=sm.encrypt(t.password)),t.password=tm.hash(t.password)),t.role==="")throw new Error(Sb);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await r_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=mo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ps(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mo.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ps(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Rb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await po()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return rm.signalUserChange(new nm(process.pid)),n}a(sY,"alterUser");function nY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(nY,"isClusterUser");async function iY(e){try{let t=gb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ps(new Error,mo.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await tY(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await po()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return rm.signalUserChange(new nm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(iY,"dropUser");async function oY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=em.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await eY(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(oY,"userInfo");async function aY(){let e;try{e=await s_()}catch(t){throw _e.error("Got an error listing users."),_e.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(aY,"listUsersExternal");async function s_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await r_(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=em.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await r_(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=em.cloneDeep(o),o.role=r[o.role],cY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Rr.errorizeMessage(e)}return null}a(s_,"listUsers");function cY(e){try{if(!e){_e.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(X$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(cY,"appendSystemTablesToRole");async function po(){try{let e=await s_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(po,"setUsersToGlobal");async function bb(e,t,r=!0){global.hdb_users||await po();let s=global.hdb_users.get(e);if(!s)throw Ps(new Error,Zh.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ps(new Error,Zh.USER_INACTIVE,vs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(Eb.get(t)===s.password)return n;if(tm.validate(s.password,t))Eb.set(t,s.password);else throw Ps(new Error,Zh.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(bb,"findAndValidateUser");async function uY(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(uY,"getSuperUser");async function lY(){let e=await s_(),t=J$.getConfigFromFile(db.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===db.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=sm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fb.SERVER_SUFFIX.ADMIN,r}a(lY,"getClusterUser");var yb=[];im.invalidateUser=function(e){for(let t of yb)try{t(e)}catch(r){Z$.error("Error invalidating user",r)}};im.onInvalidatedUser=function(e){yb.push(e)}});var nc=T((ooe,Db)=>{"use strict";var Ni=G(),gr=b(),_Y=AN(),noe=cn(),ioe=Si(),dY=xr(),{validateEvent:wb}=ds(),sc=_s(),fY=require("process"),{resetDatabases:EY}=(fe(),Z(Ce)),hY={[gr.ITC_EVENT_TYPES.SCHEMA]:mY,[gr.ITC_EVENT_TYPES.USER]:Lb};async function mY(e){let t=wb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await _Y(e.message),await pY(e.message)}a(mY,"schemaHandler");async function pY(e){try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=EY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(pY,"syncSchemaMetadata");var Cb=[];async function Lb(e){try{try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=wb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${fY.pid} received user event:`,e),await dY.setUsersToGlobal();for(let r of Cb)r()}catch(t){Ni.error(t)}}a(Lb,"userHandler");Lb.addListener=function(e){Cb.push(e)};Db.exports=hY});var ds=T((doe,Mb)=>{"use strict";var coe=G(),om=$(),SY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:uoe,threadId:TY,isMainThread:RY,workerData:loe}=require("worker_threads"),{onMessageFromWorkers:gY,broadcast:_oe,broadcastWithAcknowledgement:AY}=Ze();Mb.exports={sendItcEvent:OY,validateEvent:Ub,SchemaEventMsg:NY,UserEventMsg:bY};var n_;gY(async(e,t)=>{n_=n_||nc(),Ub(e),n_[e.type]&&await n_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function OY(e){return!RY&&e.message&&(e.message.originator=TY),AY(e)}a(OY,"sendItcEvent");function Ub(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||om.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||om.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||om.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(SY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Ub,"validateEvent");function NY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(NY,"SchemaEventMsg");function bY(e){this.originator=e}a(bY,"UserEventMsg")});var un=T((hoe,Hb)=>{"use strict";var Pb=b(),Eoe=$(),i_=G(),vb=TN(),So,{sendItcEvent:Bb}=ds();function yY(e){try{i_.trace("signalSchemaChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.SCHEMA,e);return So.schema(t),Bb(t)}catch(t){i_.error(t)}}a(yY,"signalSchemaChange");function IY(e){try{i_.trace("signalUserChange called with message:",e),So=So||nc();let t=new vb(Pb.ITC_EVENT_TYPES.USER,e);return So.user(t),Bb(t)}catch(t){i_.error(t)}}a(IY,"signalUserChange");Hb.exports={signalSchemaChange:yY,signalUserChange:IY}});var o_=T((poe,Fb)=>{"use strict";var qb=$(),wY=b(),CY=G(),LY=kl(),DY=xl(),UY=un(),{SchemaEventMsg:MY}=ds(),PY="already exists in";Fb.exports=vY;async function vY(e,t,r){if(qb.isEmptyOrZeroLength(r))return r;let s=[];qb.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await BY(e,t.schema,t.name,i)})),n}a(vY,"lmdbCheckForNewAttributes");async function BY(e,t,r,s){let n=new DY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await HY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(PY))CY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(BY,"createNewAttribute");async function HY(e){let t;return t=await LY(e),UY.signalSchemaChange(new MY(process.pid,wY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(HY,"createAttribute")});var To=T((Toe,Gb)=>{"use strict";var am=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};Gb.exports=am});var kb=T((goe,xb)=>{"use strict";var qY=To(),FY=b().OPERATIONS_ENUM,cm=class extends qY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(FY.INSERT,r,s,n,i),this.records=t}};xb.exports=cm});var $b=T((Ooe,Vb)=>{"use strict";var GY=To(),xY=b().OPERATIONS_ENUM,um=class extends GY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(xY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Vb.exports=um});var Kb=T((boe,Yb)=>{"use strict";var kY=To(),VY=b().OPERATIONS_ENUM,lm=class extends kY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(VY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Yb.exports=lm});var Qb=T((Ioe,Wb)=>{"use strict";var $Y=To(),YY=b().OPERATIONS_ENUM,_m=class extends $Y{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(YY.DELETE,s,n,t,i),this.original_records=r}};Wb.exports=_m});var oc=T((Loe,jb)=>{"use strict";var Coe=require("path"),zb=Ue(),KY=kb(),WY=$b(),QY=Kb(),zY=Qb(),Ro=ze(),Jb=$(),{CONFIG_PARAMS:JY}=b(),Xb=X();Xb.initSync();var a_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:XY}=ve();jb.exports=jY;async function jY(e,t){if(Xb.get(JY.LOGGING_AUDITLOG)===!1)return;let r=XY(e.schema,e.table),s=await zb.openEnvironment(r,e.table,!0),n=ZY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){zb.initializeDBIs(s,Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ro.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),Jb.isEmpty(n.user_name)||s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(jY,"writeTransaction");function ZY(e,t){let r=Jb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===a_.INSERT)return new KY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPDATE)return new WY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPSERT)return new QY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.DELETE)return new zY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(ZY,"createTransactionObject")});var dm=T((Moe,Zb)=>{"use strict";var e1=za(),Uoe=Ja(),ac=b(),t1=ec(),r1=lo().insertRecords,s1=Ue(),n1=G(),i1=o_(),{getSchemaPath:o1}=ve(),a1=oc();Zb.exports=c1;async function c1(e){try{let{schema_table:t,attributes:r}=e1(e);t1(e,r,t.hash_attribute),e.schema!==ac.SYSTEM_SCHEMA_NAME&&(r.includes(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ac.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await i1(e.hdb_auth_header,t,r),n=o1(e.schema,e.table),i=await s1.openEnvironment(n,e.table),o=await r1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await a1(e,o)}catch(c){n1.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(c1,"lmdbCreateRecords")});var ry=T((voe,ty)=>{"use strict";var ey=b(),u1=dm(),l1=Ja(),_1=require("fs-extra"),{getSchemaPath:d1}=ve();ty.exports=f1;async function f1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new l1(ey.SYSTEM_SCHEMA_NAME,ey.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await u1(r),await _1.mkdirp(d1(e.schema))}a(f1,"lmdbCreateSchema")});var ny=T((Hoe,sy)=>{"use strict";var fm=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};sy.exports=fm});var cy=T((koe,ay)=>{"use strict";var iy=Ue(),Em=mr(),hm=dr().LMDB_ERRORS_ENUM,E1=ze(),oy=G(),Foe=$(),h1=require("lmdb"),m1=ny(),p1=b(),{OVERFLOW_MARKER:Goe,MAX_SEARCH_KEY_LENGTH:xoe}=E1,S1=p1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function T1(e,t,r,s){if(Em.validateEnv(e),t===void 0)throw new Error(hm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(hm.IDS_REQUIRED):new Error(hm.IDS_MUST_BE_ITERABLE);try{let n=iy.listDBIs(e);iy.initializeDBIs(e,t,n);let i=new m1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[S1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,h1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=Em.getIndexedValues(N);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)I.remove(Y[Q],o)}catch{oy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){oy.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=Em.getNextMonotonicTime(),i}catch(n){throw n}}a(T1,"deleteRecords");ay.exports={deleteRecords:T1}});var cc=T(($oe,ly)=>{"use strict";var go=$(),R1=cy(),g1=Ue(),{getSchemaPath:A1}=ve(),O1=oc(),N1=G();ly.exports=b1;async function b1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(go.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(go.isEmptyOrZeroLength(e.hash_values)&&!go.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];go.isEmpty(u)||e.hash_values.push(u)}}if(go.isEmptyOrZeroLength(e.hash_values))return uy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(go.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=A1(e.schema,e.table),i=await g1.openEnvironment(n,e.table),o=await R1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await O1(e,o)}catch(c){N1.error(`unable to write transaction due to ${c.message}`)}return uy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(b1,"lmdbDeleteRecords");function uy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(uy,"createDeleteResponse")});var pm=T((Woe,_y)=>{"use strict";var y1=b(),Koe=mr();function mm(e,t){let r=Object.create(null);if(t.length===1&&y1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(mm,"parseRow");function I1(e,t,r,s){let n=mm(r,e);s.push(n)}a(I1,"searchAll");function w1(e,t,r,s){let n=mm(r,e);s[t]=n}a(w1,"searchAllToMap");function C1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(C1,"iterateDBI");function bi(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(bi,"pushResults");function L1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(L1,"endsWith");function D1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(D1,"contains");function U1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(U1,"greaterThanCompare");function M1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(M1,"greaterThanEqualCompare");function P1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(P1,"lessThanCompare");function v1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(v1,"lessThanEqualCompare");_y.exports={parseRow:mm,searchAll:I1,searchAllToMap:w1,iterateDBI:C1,endsWith:L1,contains:D1,greaterThanCompare:U1,greaterThanEqualCompare:M1,lessThanCompare:P1,lessThanEqualCompare:v1,pushResults:bi}});var Ao=T((joe,Sy)=>{"use strict";var Fn=Ue(),zoe=G(),Ar=mr(),c_=ze(),Je=dr().LMDB_ERRORS_ENUM,Joe=$(),B1=b(),u_=pm(),{parseRow:H1}=u_,Xoe=require("lmdb"),{OVERFLOW_MARKER:dy,MAX_SEARCH_KEY_LENGTH:q1}=c_;function fy(e,t,r,s=!1,n=void 0,i=void 0){return yi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(fy,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return yi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(uc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[c_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(yi,"setupTransaction");function Ey(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(dy)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[c_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Ey,"getOverflowCheck");function F1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(l_(r),r=lc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>H1(_.value,r))))}a(F1,"searchAll");function G1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);l_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of fy(e,t,t,s,n,i))o.set(c,u_.parseRow(u,r));return o}a(G1,"searchAllToMap");function x1(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=fy(e,void 0,t,r,s,n),c=o.transaction,u=Ey(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(x1,"iterateDBI");function k1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(k1,"countAll");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,t,r,(c,u,_,l)=>(s=Ar.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(V1,"equals");function $1(e,t,r){return Gn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a($1,"count");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,null,r,(c,u)=>{s=Ar.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(Y1,"startsWith");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){return hy(e,t,r,s,n,i,o,!0)}a(K1,"endsWith");function hy(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Gn(e,r,s),yi(e,null,r,(u,_,l,d)=>{let f=Ey(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(dy)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[c_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(hy,"contains");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!0,!1)}a(W1,"greaterThan");function Q1(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),uc(e,t,r,s,u,n,i,o,!1,!1)}a(Q1,"greaterThanEqual");function z1(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!0)}a(z1,"lessThan");function J1(e,t,r,s,n=!1,i=void 0,o=void 0){Gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),uc(e,t,r,u,s,n,i,o,!1,!1)}a(J1,"lessThanEqual");function X1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(X1,"between");function j1(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),r=lc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=u_.parseRow(c,r)),o}a(j1,"searchByHash");function Z1(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Z1,"checkHashExists");function eK(e,t,r,s,n=[]){return py(e,t,r,s,n),my(e,t,r,s,n).map(i=>i[1])}a(eK,"batchSearchByHash");function tK(e,t,r,s,n=[]){py(e,t,r,s,n);let i=new Map;for(let[o,c]of my(e,t,r,s,n))i.set(o,c);return i}a(tK,"batchSearchByHashToMap");function my(e,t,r,s,n=[]){return yi(e,t,t,(i,o,c)=>{r=lc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,u_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(my,"batchHashSearch");function py(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(l_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(py,"initializeBatchSearchByHash");function l_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(l_,"validateFetchAttributes");function Gn(e,t,r){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>q1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(Gn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&B1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Sy.exports={searchAll:F1,searchAllToMap:G1,count:$1,countAll:k1,equals:V1,startsWith:Y1,endsWith:K1,contains:hy,searchByHash:j1,setGetWholeRowAttributes:lc,batchSearchByHash:eK,batchSearchByHashToMap:tK,checkHashExists:Z1,iterateDBI:x1,greaterThan:W1,greaterThanEqual:Q1,lessThan:z1,lessThanEqual:J1,between:X1}});var Oo=T((eae,Oy)=>{var Ty=require("lodash"),Ry=Fe(),Be=require("joi"),rK=$(),{hdb_schema_table:__,checkValidTable:gy,hdb_table:Ay,hdb_database:d_}=Us(),{handleHDBError:sK,hdb_errors:nK}=j(),{getDatabases:iK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:oK}=nK,aK=Be.object({database:d_,schema:d_,table:Ay,search_attribute:__,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(__).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),cK=Be.object({database:d_,schema:d_,table:Ay,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(__).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:__,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Oy.exports=function(e,t){let r=null;switch(t){case"value":r=Ry.validateBySchema(e,aK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(gy("database",e.schema)),i(gy("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Ry.validateBySchema(e,cK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=rK.checkGlobalSchemaTable(e.schema,e.table);if(n)return sK(new Error,n,oK.NOT_FOUND);let o=iK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Ty.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Ty.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var Sm=T((rae,Ny)=>{"use strict";var uK=Ue(),lK=Oo(),{getSchemaPath:_K}=ve();Ny.exports=dK;function dK(e){let t=lK(e,"hashes");if(t)throw t;let r=_K(e.schema,e.table);return uK.openEnvironment(r,e.table)}a(dK,"initialize")});var Tm=T((nae,by)=>{"use strict";var fK=Ao(),EK=Sm();by.exports=hK;async function hK(e){let t=await EK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return fK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(hK,"lmdbGetDataByHash")});var No=T((oae,yy)=>{"use strict";var Rm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};yy.exports=Rm});var wy=T((uae,Iy)=>{"use strict";var cae=No(),mK=Ao(),pK=Sm();Iy.exports=SK;async function SK(e){let t=await pK(e),r=global.hdb_schema[e.schema][e.table];return mK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(SK,"lmdbSearchByHash")});var Bs=T((_ae,Cy)=>{"use strict";var gm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Cy.exports=gm});var f_=T((fae,vy)=>{"use strict";var qt=Ao(),TK=Ue(),RK=$(),oe=ze(),Ii=b(),gK=mi(),Ly=dr().LMDB_ERRORS_ENUM,{getSchemaPath:AK}=ve(),ln=Ii.SEARCH_WILDCARDS;async function OK(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=gK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Py(e,s.hash_attribute,r,t);return Uy(e,n,s.hash_attribute,r)}a(OK,"prepSearch");async function Uy(e,t,r,s){let n=AK(e.schema,e.table),i=await TK.openEnvironment(n,e.table),o=My(i,e,t,r),c=o.transaction||i;if([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(NK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Dy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Dy(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Uy,"executeSearch");function My(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case oe.SEARCH_TYPES.EQUALS:n=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=qt.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=qt.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=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=qt.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=qt.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=qt.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=qt.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=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(My,"searchByType");function Dy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Dy,"createMapFromIterable");function NK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(NK,"checkToFetchMore");function Py(e,t,r,s){if(RK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ln.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ln[0])<0&&n.indexOf(ln[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(ln.indexOf(i)>=0&&ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(ln.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(ln[0])||n.includes(ln[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Ly.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(Ly.UNKNOWN_SEARCH_TYPE)}}a(Py,"createSearchTypeFromSearchObject");vy.exports={executeSearch:Uy,createSearchTypeFromSearchObject:Py,prepSearch:OK,searchByType:My}});var Hy=T((mae,By)=>{"use strict";var hae=Bs(),bK=Oo(),yK=$(),IK=b(),wK=f_();By.exports=CK;function CK(e,t){if(!yK.isEmpty(t)&&IK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=bK(e,"value");if(s)throw s;let n=!0;return wK.prepSearch(e,t,n)}a(CK,"lmdbGetDataByValue")});var _c=T((Tae,qy)=>{"use strict";var Sae=Bs(),LK=Oo(),DK=$(),UK=b(),MK=f_();qy.exports=PK;async function PK(e,t){if(!DK.isEmpty(t)&&UK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=LK(e,"value");if(s)throw s;return MK.prepSearch(e,t,!1)}a(PK,"lmdbSearchByValue")});var Gy=T((Aae,Fy)=>{"use strict";var gae=ze(),Am=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},Om=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Nm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Am,SearchCondition:Om,SortAttribute:Nm}});var Yy=T((yae,$y)=>{"use strict";var Nae=Gy().SearchByConditionsObject,vK=Bs(),BK=Oo(),bm=Ao(),E_=ze(),{Resource:bae}=(as(),Z(DE)),Vy=f_(),HK=pm(),qK=require("lodash"),{getSchemaPath:FK}=ve(),xy=Ue(),{handleHDBError:GK,hdb_errors:xK}=j(),{HTTP_STATUS_CODES:kK}=xK,VK=1e8;$y.exports=$K;async function $K(e){let t=BK(e,"conditions");if(t)throw GK(t,t.message,kK.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=FK(e.schema,e.table),s=await xy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)xy.openDBI(s,_.search_attribute);let i=qK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===E_.SEARCH_TYPES.EQUALS?_.estimated_count=bm.count(s,_.search_attribute,_.search_value):l===E_.SEARCH_TYPES.CONTAINS||l===E_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=VK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await ky(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Vy.filterByType),d=l.length,f=bm.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>HK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await ky(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=bm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a($K,"lmdbSearchByConditions");async function ky(e,t,r,s){let n=new vK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===E_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Vy.searchByType(e,n,i,s).map(o=>o.value)}a(ky,"executeConditionSearch")});var dc=T((wae,Ky)=>{"use strict";var YK=b().OPERATIONS_ENUM,ym=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=YK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ky.exports=ym});var Im=T((Lae,eI)=>{"use strict";var Jy=Bs(),Xy=dc(),jy=_c(),Zy=cc(),zt=b(),Wy=$(),Qy=Ue(),{getTransactionAuditStorePath:KK,getSchemaPath:WK}=ve(),zy=G();eI.exports=QK;async function QK(e){try{if(Wy.isEmpty(global.hdb_schema[e.schema])||Wy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await zK(e),await JK(e);let t=WK(e.schema,e.table);try{await Qy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=KK(e.schema,e.table);await Qy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")zy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(QK,"lmdbDropTable");async function zK(e){let t=new Jy(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 Xy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Zy(n)}a(zK,"deleteAttributesFromSystem");async function JK(e){let t=new Jy(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 Xy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Zy(n)}catch(i){throw i}}a(JK,"dropTableFromSystem")});var rI=T((Uae,tI)=>{"use strict";var XK=require("fs-extra"),jK=Bs(),ZK=No(),eW=dc(),tW=Im(),rW=cc(),sW=Tm(),nW=_c(),_n=b(),{getSchemaPath:iW}=ve(),{handleHDBError:oW,hdb_errors:aW}=j(),{HDB_ERROR_MSGS:cW,HTTP_STATUS_CODES:uW}=aW;tI.exports=lW;async function lW(e){let t;try{t=await _W(e.schema);let r=new jK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await nW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await tW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new eW(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await rW(n);let i=iW(t);await XK.remove(i)}catch(r){throw r}}a(lW,"lmdbDropSchema");async function _W(e){let t=new ZK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await sW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw oW(new Error,cW.SCHEMA_NOT_FOUND(e),uW.NOT_FOUND,void 0,void 0,!0);return s}a(_W,"validateDropSchema")});var Cm=T((Pae,sI)=>{"use strict";var wm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};sI.exports=wm});var iI=T((Hae,nI)=>{"use strict";var dW=require("fs-extra"),h_=Ue(),{getTransactionAuditStorePath:fW}=ve(),Lm=ze(),Bae=Cm();nI.exports=EW;async function EW(e){let t;try{let r=fW(e.schema,e.table);await dW.mkdirp(r),t=await h_.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),h_.createDBI(t,Lm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(EW,"createTransactionsAuditEnvironment")});var uI=T((Fae,cI)=>{"use strict";var Dm=b(),oI=Ue(),hW=lo(),{getSystemSchemaPath:mW,getSchemaPath:pW}=ve(),SW=mi(),TW=kl(),Um=xl(),RW=G(),gW=iI(),Pm=SW.hdb_table,aI=[];for(let e=0;e<Pm.attributes.length;e++)aI.push(Pm.attributes[e].attribute);cI.exports=AW;async function AW(e,t){let r=pW(t.schema,t.table),s=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Um(t.schema,t.table,Dm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Um(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await oI.createEnvironment(r,t.table),e!==void 0){let o=await oI.openEnvironment(mW(),Dm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await hW.insertRecords(o,Pm.hash_attribute,aI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Mm(s),await Mm(n),await Mm(i)}await gW(t)}catch(o){throw o}}a(AW,"lmdbCreateTable");async function Mm(e){try{await TW(e)}catch(t){RW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Mm,"createAttribute")});var _I=T((xae,lI)=>{"use strict";var OW=za(),NW=ec(),bW=o_(),fc=b(),yW=lo().updateRecords,IW=Ue(),{getSchemaPath:wW}=ve(),CW=oc(),LW=G();lI.exports=DW;async function DW(e){try{let{schema_table:t,attributes:r}=OW(e);NW(e,r,t.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(r.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await bW(e.hdb_auth_header,t,r),n=wW(e.schema,e.table),i=await IW.openEnvironment(n,e.table),o=await yW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await CW(e,o)}catch(c){LW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(DW,"lmdbUpdateRecords")});var fI=T((Vae,dI)=>{"use strict";var UW=b().OPERATIONS_ENUM,vm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=UW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dI.exports=vm});var hI=T((Kae,EI)=>{"use strict";var Yae=fI(),MW=za(),PW=ec(),vW=o_(),Ec=b(),BW=lo().upsertRecords,HW=Ue(),{getSchemaPath:qW}=ve(),FW=oc(),GW=G(),{handleHDBError:xW,hdb_errors:kW}=j();EI.exports=VW;async function VW(e){let t;try{t=MW(e)}catch(u){throw xW(u,u.message,kW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;PW(e,s,r.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(s.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await vW(e.hdb_auth_header,r,s),i=qW(e.schema,e.table),o=await HW.openEnvironment(i,e.table),c=await BW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await FW(e,c)}catch(u){GW.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(VW,"lmdbUpsertRecords")});var pI=T((Qae,mI)=>{"use strict";var Bm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};mI.exports=Bm});var TI=T((Jae,SI)=>{"use strict";var Hm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};SI.exports=Hm});var AI=T((Zae,gI)=>{"use strict";var qm=Ue(),{getTransactionAuditStorePath:$W}=ve(),jae=pI(),hc=ze(),YW=$(),RI=TI(),KW=require("util").promisify,WW=KW(setTimeout),QW=1e4,zW=100;gI.exports=JW;async function JW(e){let t=$W(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new RI;do n=await XW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await WW(zW);while(n.transactions_deleted>0);return i}a(JW,"deleteAuditLogsBefore");async function XW(e,t){let r=new RI;try{let s=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];YW.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>QW)break}return await n,r}catch(s){throw s}}a(XW,"deleteTransactions")});var NI=T((tce,OI)=>{"use strict";var Fm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};OI.exports=Fm});var yI=T((nce,bI)=>{"use strict";var jW=Bs(),ZW=dc(),sce=NI(),Hs=b(),eQ=$(),Gm=Ue(),tQ=mi(),rQ=_c(),sQ=cc(),{getSchemaPath:nQ}=ve();bI.exports=iQ;async function iQ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=tQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await aQ(e),n=nQ(e.schema,e.table),i=await Gm.openEnvironment(n,e.table);return t===!0&&await oQ(e,i,r.hash_attribute),Gm.dropDBI(i,e.attribute),s}a(iQ,"lmdbDropAttribute");async function oQ(e,t,r){let s=Gm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(oQ,"removeAttributeFromAllObjects");async function aQ(e){let t=new jW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await rQ(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(eQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new ZW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return sQ(i)}a(aQ,"dropAttributeFromSystem")});var UI=T((ace,DI)=>{"use strict";var xm=Ue(),bo=ze(),oce=mr(),km=b(),II=$(),{getTransactionAuditStorePath:cQ}=ve(),uQ=Ao(),m_=To(),lQ=G();DI.exports=_Q;async function _Q(e){let t=cQ(e.schema,e.table),r=await xm.openEnvironment(t,e.table,!0),s=xm.listDBIs(r);xm.initializeDBIs(r,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return wI(r,e.search_values);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,fQ(r,e.search_values,n);case km.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return dQ(r,e.search_values);default:return wI(r)}}a(_Q,"readAuditLog");function wI(e,t=[0,Date.now()]){II.isEmpty(t[0])&&(t[0]=0),II.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new m_,n))}a(wI,"searchTransactionsByTimestamp");function dQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,LI(e,i))}return Object.fromEntries(r)}a(dQ,"searchTransactionsByUsername");function fQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=uQ.equals(e,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,bo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=LI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);CI(u,"records",r,l,o),CI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(fQ,"searchTransactionsByHashValues");function CI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new m_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new m_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(CI,"loopRecords");function LI(e,t){let r=[];try{let s=e.dbis[bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new m_,i);r.push(o)}}catch(i){lQ.warn(i)}return r}catch(s){throw s}}a(LI,"batchSearchTransactions")});var PI=T((_ce,MI)=>{"use strict";var{getSchemaPath:uce}=ve(),lce=Ue(),{database:EQ}=(fe(),Z(Ce));MI.exports={writeTransaction:hQ};async function hQ(e,t,r){return EQ({database:e,table:t}).transaction(r)}a(hQ,"writeTransaction")});var qI=T((fce,HI)=>{"use strict";var{getSchemaPath:vI}=ve(),BI=Ue();HI.exports={flush:mQ,resetReadTxn:pQ};async function mQ(e,t){return(await BI.openEnvironment(vI(e,t),t.toString())).flushed}a(mQ,"flush");async function pQ(e,t){try{(await BI.openEnvironment(vI(e,t),t.toString())).resetReadTxn()}catch{}}a(pQ,"resetReadTxn")});var kI=T((hce,xI)=>{"use strict";var{Readable:SQ}=require("stream"),{getDatabases:TQ}=(fe(),Z(Ce)),{readSync:RQ,openSync:gQ,createReadStream:FI}=require("fs"),{open:AQ}=require("lmdb"),GI=Dl(),OQ=Ml(),{AUDIT_STORE_OPTIONS:NQ}=(oo(),Z(OO)),{INTERNAL_DBIS_NAME:bQ,AUDIT_STORE_NAME:yQ}=ze();xI.exports=wQ;var Vm=32768,IQ=100;async function wQ(e){let t=e.database||e.schema||"data",r=TQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=AQ({noSync:!0,maxDbs:OQ.MAX_DBS}),f,E=d.openDB(bQ,new GI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:F,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(F,K,w),p++%IQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,F=new GI(!Q,Q);await S(I,F)}e.include_audit&&await S(yQ,Object.assign({},NQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=gQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Vm);RQ(c,_,0,Vm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:Vm}),f=new SQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(wQ,"getBackup")});var YI=T((pce,$I)=>{"use strict";var CQ=G(),{handleHDBError:LQ}=j(),DQ=uO(),UQ=kl(),MQ=dm(),PQ=ry(),vQ=cc(),BQ=Tm(),HQ=wy(),qQ=Hy(),FQ=_c(),GQ=Yy(),xQ=rI(),kQ=uI(),VQ=_I(),$Q=hI(),YQ=AI(),KQ=Im(),WQ=yI(),QQ=UI(),zQ=PI(),VI=qI(),JQ=kI(),$m=class extends DQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return GQ(t)}async getDataByHash(t){return await BQ(t)}async searchByHash(t){return await HQ(t)}async getDataByValue(t,r){return await qQ(t,r)}async searchByValue(t){return await FQ(t)}async createSchema(t){return await PQ(t)}async dropSchema(t){return await xQ(t)}async createTable(t,r){return await kQ(t,r)}async dropTable(t){return await KQ(t)}async createAttribute(t){return await UQ(t)}async createRecords(t){return await MQ(t)}async updateRecords(t){return await VQ(t)}async upsertRecords(t){try{return await $Q(t)}catch(r){throw LQ(r,null,null,CQ.ERR,r)}}async deleteRecords(t){return await vQ(t)}async dropAttribute(t){return await WQ(t)}async deleteAuditLogsBefore(t){return await YQ(t)}async readAuditLog(t){return await QQ(t)}writeTransaction(t,r,s){return zQ.writeTransaction(t,r,s)}flush(t,r){return VI.flush(t,r)}resetReadTxn(t,r){return VI.resetReadTxn(t,r)}getBackup(t){return JQ(t)}};$I.exports=$m});var ew={};Qe(ew,{ResourceBridge:()=>Wm});function Qm({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function WI(e,t){let r=qs(e),s=Qm(e,r);if(!r)throw new Es.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&hl(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function qs(e){let t=e.database||e.schema||jQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,XQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function QI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*zI(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var JI,p_,Es,XI,jI,ms,Ym,Km,ZI,XQ,jQ,ZQ,ez,KI,Wm,tw=Te(()=>{"use strict";JI=D(YI()),p_=D(Oo()),Es=D(j());fe();XI=D(za()),jI=D(ec()),ms=D(b()),Ym=D(un()),Km=D(ds()),ZI=D($());fi();ml();({HDB_ERROR_MSGS:XQ}=Es.hdb_errors),jQ="data",ZQ=1e4,ez=10,Wm=class extends JI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),KI=this}async searchByConditions(t){let r=(0,p_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=qs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Qm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await qs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=qs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){qs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await zm(t.schema),Ym.signalSchemaChange(new Km.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,KI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,XI.default)(t);(0,jI.default)(t,s,r.primaryKey);let n,i=hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=hl(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=hs()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return QI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,ZI.async_set_timeout)(ez),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%ZQ===0&&await _();return u.length>0&&await _(),n?QI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,p_.default)(t,"hashes");if(r)throw r;return WI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of WI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,p_.default)(t,"value");if(s)throw s;let n=qs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Qm(t,n)})}async getDataByValue(t,r){let s=new Map,n=qs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){qs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return qs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=qs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of zI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return zI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Qm,"getSelect");a(WI,"getRecords");a(qs,"getTable");a(QI,"createDeleteResponse");a(zI,"groupRecordsInHistory")});var _s=T((Oce,rw)=>{"use strict";var{ResourceBridge:tz}=(tw(),Z(ew)),rz=X();rz.initSync();var S_;function sz(){return S_||(S_=new tz,S_)}a(sz,"getBridge");rw.exports=sz()});var ow=T((bce,iw)=>{"use strict";var sw=require("lodash"),pc=require("mathjs"),nz=require("jsonata"),nw=$();iw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sw.uniqWith(e,sw.isEqual):e,searchJSON:iz,mad:Sc.bind(null,pc.mad),mean:Sc.bind(null,pc.mean),mode:Sc.bind(null,pc.mode),prod:Sc.bind(null,pc.prod),median:Sc.bind(null,pc.median)};function Sc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Sc,"aggregateFunction");function iz(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(nw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),nw.isEmpty(this.__ala__.res[r])){let s=nz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(iz,"searchJSON")});var cw=T((Ice,aw)=>{"use strict";var rt=require("moment"),Jm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;aw.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Jm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Jm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Jm)}});var dw=T((wce,_w)=>{"use strict";var oz=require("@turf/area"),az=require("@turf/length"),cz=require("@turf/circle"),uz=require("@turf/difference"),lz=require("@turf/distance"),_z=require("@turf/boolean-contains"),dz=require("@turf/boolean-equal"),fz=require("@turf/boolean-disjoint"),Ez=require("@turf/helpers"),uw=b(),de=$();_w.exports={geoArea:hz,geoLength:mz,geoCircle:pz,geoDifference:Sz,geoDistance:lw,geoNear:Tz,geoContains:Rz,geoEqual:gz,geoCrosses:Az,geoConvert:Oz};var Xm="geo1 is required",jm="geo2 is required";function hz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),oz.default(e)}a(hz,"geoArea");function mz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),az.default(e,{units:t||"kilometers"})}a(mz,"geoLength");function pz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),cz.default(e,t,{units:r||"kilometers"})}a(pz,"geoCircle");function Sz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz(e,t)}a(Sz,"geoDifference");function lw(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),lz.default(e,t,{units:r||"kilometers"})}a(lw,"geoDistance");function Tz(e,t,r,s){if(de.isEmpty(e)||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 lw(e,t,s)<=r}a(Tz,"geoNear");function Rz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),_z.default(e,t)}a(Rz,"geoContains");function gz(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),dz.default(e,t)}a(gz,"geoEqual");function Az(e,t){if(de.isEmpty(e))throw new Error(Xm);if(de.isEmpty(e))throw new Error(jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!fz.default(e,t)}a(Az,"geoCrosses");function Oz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(uw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(uw.GEO_CONVERSION_ENUM).join(",")}`);return Ez[t](e,r)}a(Oz,"geoConvert")});var T_=T((Lce,fw)=>{var wi=ow(),Or=cw(),Fs=dw();fw.exports=e=>{e.aggr.mad=e.aggr.MAD=wi.mad,e.aggr.mean=e.aggr.MEAN=wi.mean,e.aggr.mode=e.aggr.MODE=wi.mode,e.aggr.prod=e.aggr.PROD=wi.prod,e.aggr.median=e.aggr.MEDIAN=wi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=wi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=wi.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var pw=T((Dce,mw)=>{"use strict";var Tc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var Nz=T_(),Ew=require("clone"),R_=require("recursive-iterator"),re=G(),ue=$(),yo=_s(),bz=b(),{hdb_errors:yz}=j(),{getDatabases:hw}=(fe(),Z(Ce)),Iz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Nz(Jt);var Zm=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 R_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(Ew(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Tc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=hw()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ue.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new R_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!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 R_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ue.isEmpty(bz.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&&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(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(Ew(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(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(Iz)>-1&&this.tables.forEach(n=>{let i={columnid:hw()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Tc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!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 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,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 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,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 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,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=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new R_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Tc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ps)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await yo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await 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(yz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await yo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};mw.exports=Zm});var Fr=T((Mce,Sw)=>{"use strict";var wz=aO();Sw.exports={searchByConditions:Lz,searchByHash:Dz,searchByValue:Uz,search:Mz};var ep=_s(),{transformReq:tp}=$(),Cz=pw();async function Lz(e){return tp(e),ep.searchByConditions(e)}a(Lz,"searchByConditions");async function Dz(e){tp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of ep.searchByHash(e))r&&t.push(r);return t}a(Dz,"searchByHash");async function Uz(e){tp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of ep.searchByValue(e))t.push(r);return t}a(Uz,"searchByValue");function Mz(e,t){try{let r=new wz(e);r.validate(),new Cz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Mz,"search")});var g_=T((vce,Tw)=>{"use strict";var Pz=_s();Tw.exports={writeTransaction:vz};function vz(e,t,r){return Pz.writeTransaction(e,t,r)}a(vz,"writeTransaction")});var Ow=T((qce,Aw)=>{"use strict";var Bz=Fr(),Hz=cn(),Rw=G(),qz=Gr(),Hce=g_(),Fz=require("clone"),sp=require("alasql"),Gz=T_(),gw=require("util"),xz=gw.promisify(Hz.getTableSchema),kz=gw.promisify(Bz.search),Vz=b(),rp=$();Gz(sp);Aw.exports={update:Yz};var $z="There was a problem performing this update. Please check the logs and try again.";async function Yz({statement:e,hdb_user:t}){let r=await xz(e.table.databaseid,e.table.tableid),s=Kz(e.columns);rp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Fz(n),c=rp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=sp.parse(u).statements[0],l=await kz(_),d=Wz(s,l);return Qz(o,d,t)}a(Yz,"update");function Kz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sp.compile(`SELECT ${r.expression.toString()} AS [${Vz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Rw.error(t),new Error($z)}}a(Kz,"createUpdateRecord");function Wz(e,t){return rp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Wz,"buildUpdateRecords");async function Qz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await qz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Rw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Qz,"updateRecords")});var bw=T((kce,Nw)=>{var zz=require("alasql"),Jz=Fr(),Xz=G(),jz=_s(),ip=require("util"),np=$(),Zz=b(),eJ=cn(),Gce=g_(),xce=Gr(),tJ="record",rJ="successfully deleted",sJ=ip.callbackify(aJ),nJ=ip.promisify(Jz.search),iJ=ip.promisify(eJ.getTableSchema);Nw.exports={convertDelete:sJ};function oJ(e){return`${e.deleted_hashes.length} ${tJ}${e.deleted_hashes.length===1?"":"s"} ${rJ}`}a(oJ,"generateReturnMessage");async function aJ({statement:e,hdb_user:t}){let r=await iJ(e.table.databaseid,e.table.tableid);np.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=np.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=zz.parse(o).statements[0],u={operation:Zz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await nJ(c);let _=await jz.deleteRecords(u);return np.isEmptyOrZeroLength(_.message)&&(_.message=oJ(_)),delete _.txn_time,_}catch(_){throw Xz.error(_),_.hdb_code?_.message:_}}a(aJ,"convertDelete")});var Lw=T(($ce,Cw)=>{"use strict";var cJ=Si(),{hdb_errors:yw}=j(),{getDatabases:Iw}=(fe(),Z(Ce));Cw.exports={checkSchemaExists:ww,checkSchemaTableExists:uJ,schema_describe:cJ};async function ww(e){if(!Iw()[e])return yw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ww,"checkSchemaExists");async function uJ(e,t){let r=await ww(e);if(r)return r;if(!Iw()[e][t])return yw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(uJ,"checkSchemaTableExists")});var Rc=T((Kce,lJ)=>{lJ.exports={name:"harperdb",version:"4.2.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 b_={};Qe(b_,{addAnalyticsListener:()=>Oc,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>_J});function _J(e){Gw=e}function Nr(e,t,r,s,n){if(!Gw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=N_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},N_.set(i,o)}A_||dJ()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Oc(e){Vw.push(e)}function dJ(){A_=performance.now(),setTimeout(async()=>{let e=performance.now()-A_;A_=0;let t=[],r={time:Date.now(),period:e,threadId:Ci.threadId,metrics:t};for(let[n,i]of N_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $w){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Yw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of Vw)n(t);N_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:kw,report:r}):Qw({report:r})},xw).unref()}async function fJ(e,t=6e4){let r=cp(),s=Kw(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:F,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=F+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let 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 Yw()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of F){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,At)=>Pe.value>At.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of $w){let At=A*Pe;for(;N<At;)Q=p[Y++],N+=Q.count,Y===1&&N--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-es.value)*(N-At)/Q.count)}let[F,w,K,B,x,te,be,se,Mt]=I;Object.assign(S,{p1:F,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,O_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,O_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Dw,active:E-Uw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Dw=f,Uw=E}async function Mw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function cp(){return Pw||(Pw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Kw(){return vw||(vw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function mJ(){Ww=!0;let e=(0,Ac.get)(ap.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await fJ(xw,e),await Mw(cp(),EJ),await Mw(Kw(),hJ)},Math.min(e/2,2147483647)).unref()}function Qw(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Bw+=s.mean*s.count);r.totalBytesProcessed=Bw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Hw.get(t))}),Hw.set(t,t.performance.eventLoopUtilization())),r.id=(0,O_.getNextMonotonicTime)(),cp().primaryStore.put(r.id,r),Ww||mJ(),pJ&&(zw=TJ(r))}async function TJ(e){if(await zw,!xn){let r=(0,gc.dirname)((0,Fw.getLogFilePath)());try{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{xn=await(0,op.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await xn.stat()).size;if(t>SJ){let r=Buffer.alloc(t);await xn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await xn.write(r,{position:0}),await xn.truncate(r.length),t=r.length}await xn.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var
|
|
6
|
+
`)},iG="certificate.pem",oG="privateKey.pem",aG="ca.pem";Kg.exports={CERTIFICATE_VALUES:nG,CERTIFICATE_PEM_NAME:iG,PRIVATEKEY_PEM_NAME:oG,CA_PEM_NAME:aG}});var qe=T((Cse,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:cG,validateObjectAsync:uG,validateBySchema:lG};function cG(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(cG,"validateObject");async function uG(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(uG,"validateObjectAsync");function lG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(lG,"validateBySchema")});var pE=T((Use,Zg)=>{"use strict";var jg=require("fs-extra"),ce=require("joi"),_G=require("os"),{boolean:Ie,string:ws,number:Ot,array:mE}=ce.types(),{totalmem:zg}=require("os"),to=require("path"),dG=F(),rl=$(),Dse=Wg(),Jg=b(),fG=qe(),Xg="log",EG="components",hG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",mG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",pG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",SG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",TG="rootPath config parameter is undefined",RG="clustering.enabled config parameter is undefined",ui=Ot.min(0).required(),sl=mE.items({host:ws.required(),port:ui}).empty(null),tn;Zg.exports={configValidator:gG,routesValidator:IG,route_constraints:sl};function gG(e){if(tn=e.rootPath,rl.isEmpty(tn))throw TG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(yG),s=ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(tl),n=ws.optional().empty(null),i=ws.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(tl),c=ce.custom(OG).empty(null).default(tl),u=e.clustering?.enabled;if(rl.isEmpty(u))throw RG;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ui,routes:sl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ui}).required()}).required(),network:ce.object({port:ui}).required()}).required(),leafServer:ce.object({network:ce.object({port:ui,routes:sl}).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:ws.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:ws.custom(bG).optional().empty(null),maxSize:ws.custom(NG).optional().empty(null),path:ws.optional().empty(null).default(tl)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:mE.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:ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ui,securePort:ui}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:mE.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(gG,"configValidator");function AG(e){return jg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AG,"doesPathExist");function OG(e,t){ce.assert(e,ws.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AG(e);if(r)return t.message(r)}a(OG,"validatePath");function NG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(hG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pG):e}a(NG,"validateRotationMaxSize");function bG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(mG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(SG):e}a(bG,"validateRotationInterval");function yG(e,t){let r=t.state.path.join("."),s=_G.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zg();return i=Math.round(Math.min(i,zg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),dG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(yG,"setDefaultThreads");function tl(e,t){if(!rl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(rl.isEmpty(tn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return to.join(tn,EG);case"logging.root":return to.join(tn,Xg);case"clustering.leafServer.streams.path":return to.join(tn,"clustering","leaf");case"storage.path":let s=to.join(tn,Jg.LEGACY_DATABASES_DIR_NAME);return jg.existsSync(s)?s:to.join(tn,Jg.DATABASES_DIR_NAME);case"logging.rotation.path":return to.join(tn,Xg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(tl,"setDefaultRoot");function IG(e){let t=ce.object({routes:sl});return fG.validateBySchema({routes:e},t)}a(IG,"routesValidator")});var ro={};Qe(ro,{server:()=>ut});var eA,ut,Mr=Te(()=>{eA=require("../index"),ut={};(0,eA._assignPackageExport)("server",ut)});var hr=T((vse,uA)=>{"use strict";var Er=b(),pt=$(),lt=F(),{configValidator:wG,routesValidator:tA}=pE(),Kt=require("fs-extra"),CG=require("yaml"),rs=require("path"),LG=require("is-number"),sA=require("properties-reader"),DG=require("lodash"),{handleHDBError:UG}=j(),{HTTP_STATUS_CODES:MG,HDB_ERROR_MSGS:nl}=dr(),Pse=require("minimist"),{server:PG}=(Mr(),Z(ro)),{DATABASES_PARAM_CONFIG:wa,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,vG="Unable to get config value because config is uninitialized",BG="Config successfully initialized",HG="Error backing up config file",FG="Empty parameter sent to getConfigValue",nA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),qG="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"},il,_t,ol;uA.exports={createConfigFile:GG,getDefaultConfig:xG,getConfigValue:oA,initConfig:TE,flattenConfig:so,updateConfigValue:aA,updateConfigObject:VG,getConfiguration:KG,setConfiguration:WG,readConfigFile:gE,getClusteringRoutes:QG,initOldConfig:cA,getConfigFromFile:zG,getConfigFilePath:li,addConfig:JG,deleteConfigFromFile:XG,getConfigObj:jG};function GG(e){let t=Mn(nA);il=so(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("_"),_=SE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&iA(t,r),RE(t);let s=t.toJSON();_t=so(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(GG,"createConfigFile");function iA(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(wa.TABLES))for(let i in s[n][wa.TABLES])for(let o in s[n][wa.TABLES][i]){let c=s[n][wa.TABLES][i][o],u=[fr.DATABASES,n,wa.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 xG(e){if(il===void 0){let r=Mn(nA);il=so(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return il[t.toLowerCase()]}a(xG,"getDefaultConfig");function oA(e){if(e==null){lt.error(FG);return}if(_t===void 0){lt.trace(vG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(oA,"getConfigValue");function li(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):sA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(li,"getConfigFilePath");function TE(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=li(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=Mn(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}`)}kG(s,r),RE(s);let n=s.toJSON();if(PG.config=n,_t=so(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(BG)}}a(TE,"initConfig");function kG(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(kG,"checkForUpdatedConfig");function RE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=wG(t);if(r.error)throw nl.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(RE,"validateConfig");function VG(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(VG,"updateConfigObject");function aA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&TE();let o=oA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Mn(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=SE(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=SE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&iA(u,_),RE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&$G(c,l),Kt.writeFileSync(d,String(u)),n&&(_t=so(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aA,"updateConfigValue");function $G(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(HG),lt.error(r)}}a($G,"backupConfigFile");var YG=["databases"];function so(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)),ol=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!YG.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!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(so,"flattenConfig");function SE(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(LG(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(SE,"castConfigValue");function KG(){let e=pt.getPropsFilePath(),t=li(e);return Mn(t).toJSON()}a(KG,"getConfiguration");async function WG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aA(void 0,void 0,n,!0),qG}catch(i){throw typeof i=="string"||i instanceof String?UG(i,i,MG.BAD_REQUEST,void 0,void 0,!0):i}}a(WG,"setConfiguration");function gE(){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=li(e);return Mn(t).toJSON()}a(gE,"readConfigFile");function Mn(e){return CG.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Mn,"parseYamlDoc");function QG(){let e=gE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=tA(t);if(r)throw nl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=tA(s);if(n)throw nl.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 nl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(QG,"getClusteringRoutes");function cA(e){let t=sA(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(cA,"initOldConfig");function zG(e){let t=gE();return DG.get(t,e.replaceAll("_","."))}a(zG,"getConfigFromFile");async function JG(e,t){let r=Mn(li());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(li(),String(r))}a(JG,"addConfig");function XG(e){let t=li(pt.getPropsFilePath()),r=Mn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Kt.writeFileSync(n,String(r))}a(XG,"deleteConfigFromFile");function jG(){return ol||(TE(),ol)}a(jG,"getConfigObj")});var X=T((Hse,dA)=>{"use strict";var AE=require("fs-extra"),ns=require("path"),lA=require("os"),ZG=require("properties-reader"),Ca=F(),_i=$(),ee=b(),al=hr(),ex="Error initializing environment manager",cl="BOOT_PROPS_FILE_PATH",_A=!1,tx={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},rn={};dA.exports={BOOT_PROPS_FILE_PATH:cl,getHdbBasePath:rx,setHdbBasePath:sx,get:nx,initSync:ox,setProperty:he,initTestEnvironment:ax};function rx(){return rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(rx,"getHdbBasePath");function sx(e){rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(sx,"setHdbBasePath");function nx(e){let t=al.getConfigValue(e);return t===void 0?rn[e]:t}a(nx,"get");function he(e,t){tx[e]&&(rn[e]=t),al.updateConfigObject(e,t)}a(he,"setProperty");function ix(){let e;try{e=_i.getPropsFilePath(),AE.accessSync(e,AE.constants.F_OK|AE.constants.R_OK),_A=!0;let t=ZG(e);return rn[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),rn[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),rn[cl]=e,!0}catch{return Ca.trace(`Environment manager found no properties file at ${e}`),!1}}a(ix,"doesPropFileExist");function ox(e=!1){try{(_A||ix()||_i.noBootFile())&&(al.initConfig(e),rn[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=al.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ca.error(ex),Ca.error(t),console.error(t),process.exit(1)}}a(ox,"initSync");function ax(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ns.join(__dirname,"../../","unitTests");rn[cl]=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,_i.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,_i.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,_i.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,_i.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,_i.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 ${cl}. Please check your boot props and settings files`;Ca.fatal(r),Ca.error(t)}}a(ax,"initTestEnvironment")});var ve=T((qse,TA)=>{"use strict";var Pa=b(),cx=$(),Wt=X(),va=require("path"),ux=require("minimist"),fA=require("fs-extra"),EA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Pn,DATABASES_PARAM_CONFIG:La,SYSTEM_SCHEMA_NAME:ul}=Pa,Da,Ua,Ma;function hA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=Wt.get(Pn.STORAGE_PATH)||va.join(Wt.getHdbBasePath(),Pa.DATABASES_DIR_NAME),Da}a(hA,"getBaseSchemaPath");function mA(){if(Ua!==void 0)return Ua;if(Wt.getHdbBasePath()!==void 0)return Ua=SA(ul),Ua}a(mA,"getSystemSchemaPath");function pA(){if(Ma!==void 0)return Ma;if(Wt.getHdbBasePath()!==void 0)return Ma=Wt.get(Pa.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||va.join(Wt.getHdbBasePath(),Pa.TRANSACTIONS_DIR_NAME),Ma}a(pA,"getTransactionAuditStoreBasePath");function lx(e,t){let r=Wt.get(Pn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||va.join(pA(),e.toString())}a(lx,"getTransactionAuditStorePath");function SA(e,t){e=e.toString(),t=t&&t.toString();let r=Wt.get(Pa.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||va.join(hA(),e)}a(SA,"getSchemaPath");function _x(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ux(process.argv));let s=r[Pn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!cx.isObject(s))throw o;i=s}for(let o of i){let c=o[ul];if(!c)continue;let u=Wt.get(Pn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[La.PATH];if(_)return EA.set(u,[ul,La.TABLES,t,La.PATH],_),Wt.setProperty(Pn.DATABASES,u),_;let l=c?.[La.PATH];if(l)return EA.set(u,[ul,La.PATH],l),Wt.setProperty(Pn.DATABASES,u),l}}let n=r[Pn.STORAGE_PATH.toUpperCase()];if(n){if(!fA.pathExistsSync(n))throw new Error(n+" does not exist");let i=va.join(n,e);return fA.mkdirsSync(i),Wt.setProperty(Pn.STORAGE_PATH,n),i}return mA()}a(_x,"initSystemSchemaPaths");function dx(){Da=void 0,Ua=void 0,Ma=void 0}a(dx,"resetPaths");TA.exports={getBaseSchemaPath:hA,getSystemSchemaPath:mA,getTransactionAuditStorePath:lx,getTransactionAuditStoreBasePath:pA,getSchemaPath:SA,initSystemSchemaPaths:_x,resetPaths:dx}});var mr=T((Vse,NA)=>{"use strict";var fx=dr().LMDB_ERRORS_ENUM,xse=require("lmdb"),Ex=ze(),kse=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ll}=Ex,gA=["number","string","symbol","boolean","bigint"];function hx(e){if(e=e?.primaryStore||e,!e)throw new Error(fx.ENV_REQUIRED)}a(hx,"validateEnv");function mx(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(mx,"stringifyData");function px(e){return e instanceof Date?e.valueOf():e}a(px,"convertKeyValueToWrite");function Sx(e){if(e==null)return;if(gA.includes(typeof e))return e.length>ll?[e.slice(0,ll)+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>ll?t.push(n.slice(0,ll)+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(Sx,"getIndexedValues");var _l=0,AA=0;function OA(){AA=Date.now()-performance.now()}a(OA,"adjustStartTime");OA();var Tx=6e4;setInterval(OA,Tx).unref();function Rx(){let e=performance.now()+AA;return e>_l?(_l=e,e):(_l+=488e-6,_l)}a(Rx,"getNextMonotonicTime");NA.exports={validateEnv:hx,stringifyData:mx,convertKeyValueToWrite:px,getNextMonotonicTime:Rx,getIndexedValues:Sx}});var bA,is,OE,Ba=Te(()=>{bA=require("events"),is=class extends bA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new OE;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)}},OE=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 hl(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}},hl(r,t)),new r(e)):new dl(e);case Array:let s=new El(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 ml(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=ml(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function Ha(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=Ha(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=Ha(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function fl(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[di]||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(fl(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(fl(n))return!0}else return!0}else return!0}}return!1}var os,vt,dl,di,El,pl=Te(()=>{as();os=D(j()),vt=Symbol("own-data");a(Pr,"getChanges");a(hl,"assignTrackedAccessors");a(yA,"trackObject");dl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};hl(dl,{});a(ml,"collapseData");a(Ha,"deepFreeze");a(fl,"hasChanges");di=Symbol.for("has-array-changes"),El=class extends Array{static{a(this,"TrackedArray")}[di];constructor(t){super(t)}splice(...t){return this[di]=!0,super.splice(...t)}push(...t){return this[di]=!0,super.push(...t)}pop(){return this[di]=!0,super.pop()}unshift(...t){return this[di]=!0,super.unshift(...t)}shift(){return this[di]=!0,super.shift()}};El.prototype.constructor=Array});function Nx(){Ox=setInterval(function(){for(let e of NE)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},Ax).unref()}var bE,IA,gx,NE,fi,Sl,Ax,Ox,yE=Te(()=>{bE=D(mr()),IA=D(F());as();gx=100,NE=new Set,fi=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(),NE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(NE.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,bE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<gx>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},Sl=class extends fi{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,bE.getNextMonotonicTime)())}getReadTxn(){}},Ax=3e4;a(Nx,"startMonitoringTxns");Nx()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new fi;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,Ei=Te(()=>{wA=require("../index");as();yE();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 wE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new no.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]=Ls.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 no.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 no.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=CE(e);if(!S)throw new no.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 CE(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 St.SEARCH_TYPES.EQUALS:case void 0:return Cs(r,n=>n===s);case St.SEARCH_TYPES.CONTAINS:return Cs(r,n=>n?.toString().includes(s));case St.SEARCH_TYPES.ENDS_WITH:case St.SEARCH_TYPES._ENDS_WITH:return Cs(r,n=>n?.toString().endsWith(s));case St.SEARCH_TYPES.STARTS_WITH:case St.SEARCH_TYPES._STARTS_WITH:return Cs(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()),Cs(r,n=>(0,Ls.compareKeys)(n,s[0])>=0&&(0,Ls.compareKeys)(n,s[1])<=0);case"gt":case St.SEARCH_TYPES.GREATER_THAN:case St.SEARCH_TYPES._GREATER_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>0);case"ge":case St.SEARCH_TYPES.GREATER_THAN_EQUAL:case St.SEARCH_TYPES._GREATER_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)>=0);case St.SEARCH_TYPES.LESS_THAN:case"lt":case St.SEARCH_TYPES._LESS_THAN:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<0);case"le":case St.SEARCH_TYPES.LESS_THAN_EQUAL:case St.SEARCH_TYPES._LESS_THAN_EQUAL:return Cs(r,n=>(0,Ls.compareKeys)(n,s)<=0);case"ne":return Cs(r,n=>(0,Ls.compareKeys)(n,s)!==0);default:throw new no.ClientError(`Unknown query comparator "${t}"`)}}function Cs(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Tl(e){if(!e)return;let t=new IE,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=bx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?yx:CA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var no,St,Ls,LA,bx,DA,CA,yx,IE,Rl=Te(()=>{no=D(j()),St=D(ze()),Ls=require("ordered-binary"),LA=require("lmdb"),bx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(wE,"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(CE,"filterByType");a(Cs,"attributeComparator");CA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,yx=/([^&|*=]+)([&|*=]*)/g;a(Tl,"parseQuery");IE=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 UE={};Qe(UE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>HA,snake_case:()=>wx});function wx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function 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 DE(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 gl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new gl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new 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 LE(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=>LE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=LE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=LE(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,Ix,Nt,gl,DE,as=Te(()=>{PA=require("crypto");Ba();vA=require("../index"),BA=D(j());pl();Ei();Rl();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),HA=Symbol("save-updates"),Re=Symbol("stored-record"),Ix={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=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 Tl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&Ix[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id: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(wx,"snake_case");gl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(UA,"pathToId");DE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(LE,"selectFromObject");a(MA,"transformForSelect")});var PE={};Qe(PE,{loadGQLSchema:()=>Dx,start:()=>ME,startOnMainThread:()=>Lx});function ME({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):Cx.includes(S.type)||(0,FA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Al.dirname)(s),S.tableClass):i.set((0,Al.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,Al.dirname)(s)+"/"+S.name,A.tableClass)}}}var Al,FA,Cx,Lx,Dx,qA=Te(()=>{Al=require("path");fe();FA=D(Ze()),Cx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(ME,"start");Lx=ME,Dx=ME({ensureTable:et}).handleFile});async function Ol(e){return Ux?(Fa||(Fa=Mx(vx)),(await(await Fa).import(e)).namespace):import(e)}async function Mx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Fa=new Compartment({console,Math,Date,fetch:Px,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,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)}}),Fa}function Px(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function vx(){return{Resource:Nt,tables:pr}}var GA,xA,Ux,Fa,vE=Te(()=>{as();fe();GA=require("fs/promises"),xA=require("path"),Ux=!1;a(Ol,"secureImport");a(Mx,"getCompartment");a(Px,"secureOnlyFetch");a(vx,"getGlobalVars")});var HE={};Qe(HE,{handleFile:()=>Bx});async function Bx(e,t,r,s){let n=new Map,i=(0,kA.pathToFileURL)(r).toString(),o=await Ol(i);u(o.default)&&s.set((0,BE.dirname)(t),o.default),c(o,(0,BE.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,BE,VA=Te(()=>{kA=require("url");vE();BE=require("path");a(Bx,"handleFile")});var qE={};Qe(qE,{start:()=>Hx});function Hx({resources:e}){e.set("login",FE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FE,$A=Te(()=>{as();a(Hx,"start");FE=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 xE=T((gne,WA)=>{"use strict";var{Readable:Fx}=require("stream"),qx=1e4;WA.exports={streamAsJSON(e){return new GE({value:e})}};var GE=class extends Fx{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),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>qx?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((Nne,iO)=>{"use strict";var kE=require("recursive-iterator"),Gx=require("alasql"),VE=require("clone"),QA=$(),{handleHDBError:zA,hdb_errors:xx}=j(),{HDB_ERROR_MSGS:JA,HTTP_STATUS_CODES:XA}=xx,{getDatabases:kx}=(fe(),Z(Ce)),Vx=["DISTINCT_ARRAY"],jA=Symbol("validateTables"),$E=Symbol("validateTable"),One=Symbol("getAllColumns"),ZA=Symbol("validateAllColumns"),Nl=Symbol("findColumn"),eO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),YE=Symbol("validateColumn"),tO=Symbol("setColumnsForTable"),rO=Symbol("checkColumnsForAsterisk"),sO=Symbol("validateGroupBy"),nO=Symbol("hasColumns"),KE=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[$E](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[$E](t.table)})}}[nO](){let t=!1,r=new kE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[$E](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=kx();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=VE(n);i.table=VE(t),this.attributes.push(i)})}[Nl](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 kE(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 Gx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZA](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[sO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new kE(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[YE](i)));return n}[sO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Vx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=VE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Nl](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[Nl](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[YE](t)}[YE](t){let r=this[Nl](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=KE});var cO=T((yne,aO)=>{"use strict";var WE=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=WE});var lO=T((wne,uO)=>{"use strict";var QE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uO.exports=QE});var AO={};Qe(AO,{AUDIT_STORE_OPTIONS:()=>RO,createAuditEntry:()=>Il,openAuditStore:()=>yl,readAuditEntry:()=>Sr,setAuditRetention:()=>$x,transactionKeyEncoder:()=>TO});function yl(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",()=>{Ga||(Ga=setTimeout(()=>{if(Ga=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-zE})){if((n[0]&15)===XE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},zE/10).unref())}),t}function $x(e){clearTimeout(Ga),Ga=null,zE=e}function Il(e,t,r,s,n,i,o){let c=gO[i],u=1;s&&(s>1?io.setFloat64(0,s):Hr.set(eh),u=9),f(0),f(t),d(r),io.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,oo.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(ZE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),io.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(io.setUint16(u,E|32768),u+=2):E<1056964608?(io.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,io.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: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&JE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return ZE.error("Reading audit entry error",e),{}}}function EO(e,t,r){let s=e.subarray(t,r);return(0,oo.readKey)(s,0,r-t)}var oo,bl,hO,mO,pO,SO,ZE,Hr,io,TO,RO,zE,Ga,JE,_O,XE,dO,fO,gO,jE,ao=Te(()=>{oo=require("ordered-binary"),bl=D(X()),hO=D(ze()),mO=D(b()),pO=D(Ze()),SO=D($());ka();ZE=D(F());(0,bl.initSync)();Hr=Buffer.alloc(1024),io=new DataView(Hr.buffer,Hr.byteOffset,1024),TO={writeKey(e,t,r){return e===xa?(t.set(xa,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oo.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,oo.readKey)(e,t,r)}},RO={encoding:"binary",keyEncoder:TO},zE=(0,SO.convertToMS)((0,bl.get)(mO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ga=null;a(yl,"openAuditStore");a($x,"setAuditRetention");JE=16,_O=1,XE=2,dO=3,fO=4,gO={put:_O|JE,[_O]:"put",delete:XE,[XE]:"delete",message:dO|JE,[dO]:"message",invalidate:fO,[fO]:"invalidate"};a(Il,"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(EO,"readKeySafely")});var wO={};Qe(wO,{HAS_EXPIRATION:()=>oh,LAST_TIMESTAMP_PLACEHOLDER:()=>xa,LOCAL_TIMESTAMP:()=>Yx,METADATA:()=>Va,NO_TIMESTAMP:()=>th,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>eh,RecordEncoder:()=>ih,TIMESTAMP_ASSIGN_LAST:()=>Wx,TIMESTAMP_ASSIGN_NEW:()=>bO,TIMESTAMP_ASSIGN_PREVIOUS:()=>yO,TIMESTAMP_PLACEHOLDER:()=>wl,TIMESTAMP_RECORD_PREVIOUS:()=>rh,getUpdateRecord:()=>ah,handleLocalTimeForGets:()=>Dl});function IO(){return uo[0]=uo[0]^64,Kx.getFloat64(0)}function Dl(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[Va];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?.[Va]>=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[Va];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Qx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(uo,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,hi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<hi.length;u++){let _=hi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&hi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function ah(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?co=i?.localTime?rh|yO:th:co=u?i?.localTime?rh|16384:bO|16384:th,l>0&&(c|=oh),Ll=c,nh=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:co>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=sh,A.timestampOffset=sh.start||0))}if(u){let A=_?.user?.username;if(E&&(Cl=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,Il(o,t,s,Y,A,d,Cl),{ifVersion:p}),S}}r.put(xa,Il(o,t,s,i?.localTime?1:0,A,d,Cl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var OO,NO,wl,xa,eh,Yx,Va,uo,Kx,th,bO,Wx,yO,rh,oh,sh,Cl,co,Ll,nh,ih,Qx,hi,ka=Te(()=>{OO=require("msgpackr");ao();NO=D(F()),wl=new Uint8Array([1,1,1,1,4,64,0,0]),xa=new Uint8Array([1,1,1,1,1,0,0,0]),eh=new Uint8Array([1,1,1,1,3,64,0,0]),Yx=Symbol("local-timestamp"),Va=Symbol("metadata"),uo=new Uint8Array(8),Kx=new DataView(uo.buffer,0,8),th=0,bO=0,Wx=1,yO=3,rh=4,oh=16,co=0,Ll=-1,nh=0,ih=class extends OO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(co||Ll>=0){let i=0,o=co;o&&(i+=8,co=0);let c=Ll,u=nh;c>=0&&(i+=2,Ll=-1,u&&(i+=8,nh=0));let _=sh=r.call(this,s,n|2048|i);Cl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(wl[4]=o,wl[5]=o>>8,_.set(wl,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(uo,0,c),c+=8;else for(let d=0;d<8;d++)uo[d]=t[c++];u=IO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&oh&&(_=(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,[Va]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(IO,"getTimestamp");Qx=Map.prototype.get;a(Dl,"handleLocalTimeForGets");hi=[];setInterval(()=>{for(let e=0;e<hi.length;e++){let t=hi[e].deref();!t||t.isDone||t.isCommitted?hi.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(ah,"getUpdateRecord")});var Ul=T((Pne,CO)=>{"use strict";var uh=X(),lh=b(),{RecordEncoder:zx}=(ka(),Z(wO));uh.initSync();var Jx=uh.get(lh.CONFIG_PARAMS.STORAGE_COMPRESSION),Xx=uh.get(lh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,jx=lh.UPDATES_PROPERTY,ch=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Jx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Xx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:zx},this.alwaysLazyProperty=s=>s===jx)}};CO.exports=ch});var Pl=T((Bne,DO)=>{"use strict";var lo=X(),$a=b();lo.initSync();var Zx=lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",LO=lo.get($a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),ek=lo.get($a.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ml=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Zx,this.noFSAccess=!0,LO!==void 0&&(this.overlappingSync=LO),this.noReadAhead=ek}};DO.exports=Ml;Ml.MAX_DBS=1e4});var Ue=T((Fne,xO)=>{"use strict";var dh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),vl=mr(),PO=F(),Qt=dr().LMDB_ERRORS_ENUM,Bl=lO(),fh=Ul(),vO=Pl(),vn=ze(),UO=b(),{table:tk,resetDatabases:rk}=(fe(),Z(Ce)),MO=X(),ls=vn.INTERNAL_DBIS_NAME,BO=vn.DBI_DEFINITION_NAME,sk="data.mdb",nk="lock.mdb",Ya=".mdb",ik="-lock",_h=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[vn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[vn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new dh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Hl(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(Hl,"pathEnvNameValidation");async function Eh(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+Ya);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,sk),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(Eh,"validateEnvironmentPath");function Fl(e,t){if(vl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Fl,"validateEnvDBIName");async function ok(e,t,r=!1,s=!1){Hl(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 Eh(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+Ya,!1),_=dh.open(u);_.dbis=Object.create(null);let l=new fh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=hh(e,t,r);return _[vn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ok,"createEnvironment");async function ak(e,t,r,s=!0){Hl(e,t),t=t.toString();let n=Tr.join(e,t);return tk({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ak,"copyEnvironment");async function HO(e,t,r=!1){Hl(e,t),t=t.toString();let s=hh(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 Eh(e,t),i=Tr.join(e,t+Ya),o=n!=i,c=new vO(n,o),u=dh.open(c);u.dbis=Object.create(null);let _=qO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[vn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(HO,"openEnvironment");async function ck(e,t,r=!1){Hl(e,t),t=t.toString();let s=Tr.join(e,t+Ya),n=await Eh(e,t);if(global.lmdb_map!==void 0){let i=hh(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+ik:Tr.join(Tr.dirname(n),nk))}a(ck,"deleteEnvironment");async function FO(e){vl.validateEnv(e);let t=e[vn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function hh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(hh,"getCachedEnvironmentName");function uk(e){vl.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 Bl,n)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(uk,"listDBIDefinitions");function qO(e){vl.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 lk(e,t){let s=Fr(e,ls).getEntry(t),n=new Bl;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(lk,"getDBIDefinition");function GO(e,t,r,s=!r){if(Fl(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 fh(r,s===!0),o=e.openDB(t,i),c=new Bl(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(Fl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=lk(e,t):r=new Bl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new fh(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 _k(e,t){Fl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[vn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(_k,"statDBI");async function dk(e,t){try{let r=Tr.join(e,t+Ya);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(dk,"environmentDataSize");function fk(e,t){if(Fl(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(fk,"dropDBI");function Ek(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{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&&rk()}a(Ek,"initializeDBIs");xO.exports={openDBI:Fr,openEnvironment:HO,createEnvironment:ok,listDBIs:qO,listDBIDefinitions:uk,createDBI:GO,dropDBI:fk,statDBI:_k,deleteEnvironment:ck,initializeDBIs:Ek,TransactionCursor:_h,environmentDataSize:dk,copyEnvironment:ak,closeEnvironment:FO}});var VO=T((Gne,kO)=>{"use strict";var mh=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=mh});var YO=T((kne,$O)=>{"use strict";var ph=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=ph});var WO=T(($ne,KO)=>{"use strict";var Sh=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=Sh});var _o=T((zne,JO)=>{"use strict";var hk=Ue(),mk=VO(),pk=YO(),Sk=WO(),Ds=mr(),Ka=dr().LMDB_ERRORS_ENUM,Tk=ze(),sn=b(),Rk=$(),gk=require("uuid"),Kne=require("lmdb"),{handleHDBError:Ak,hdb_errors:Ok}=j(),{OVERFLOW_MARKER:Wne,MAX_SEARCH_KEY_LENGTH:Qne}=Tk,QO=X();QO.initSync();var ql=QO.get(sn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Th=sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,mi=sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Nk(e,t,r,s,n=Ds.getNextMonotonicTime()){Oh(e,t,r,s),Rh(e,t,r);let i=new mk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];zO(_,!0,n);let l=bk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return gh(o,c,s,i,n)}a(Nk,"insertRecords");function bk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][sn.FUNC_VAL],s[o]=c)}let u=Ds.getIndexedValues(c),_=e.dbis[o];if(u){ql&&_.prefetch(u.map(l=>({key:l,value:n})),Gl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}ql&&e.dbis[t].prefetch([n],Gl),e.dbis[t].put(n,s,s[mi])})}a(bk,"insertRecord");function yk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(yk,"removeSkippedRecords");function zO(e,t,r){let s=r>0;(s||!Number.isInteger(e[mi]))&&(e[mi]=r||(r=Ds.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Th]))&&(e[Th]=r||Ds.getNextMonotonicTime()):delete e[Th]}a(zO,"setTimestamps");function Rh(e,t,r){r.indexOf(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(sn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),hk.initializeDBIs(e,t,r)}a(Rh,"initializeTransaction");async function Ik(e,t,r,s,n=Ds.getNextMonotonicTime()){Oh(e,t,r,s),Rh(e,t,r);let i=new pk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Ah(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return gh(c,u,s,i,n,o)}a(Ik,"updateRecords");async function wk(e,t,r,s,n=Ds.getNextMonotonicTime()){try{Oh(e,t,r,s)}catch(u){throw Ak(u,u.message,Ok.HTTP_STATUS_CODES.BAD_REQUEST)}Rh(e,t,r);let i=new Sk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Rk.isEmpty(_[t])?(l=gk.v4(),_[t]=l):l=_[t];let d=Ah(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return gh(o,c,s,i,n)}a(wk,"upsertRecords");async function gh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ds.getNextMonotonicTime(),yk(r,i),s}a(gh,"finalizeWrite");function Ah(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[mi])&&_[mi]>r[mi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][sn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ds.getIndexedValues(A);if(I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Gl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ds.getIndexedValues(p),I){ql&&S.prefetch(I.map(N=>({key:N,value:s})),Gl);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[mi])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Ah(e,t,r,s,n,i,o))}a(Ah,"updateUpsertRecord");function Ck(e,t,r){if(Ds.validateEnv(e),t===void 0)throw new Error(Ka.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ka.WRITE_ATTRIBUTES_REQUIRED):new Error(Ka.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ck,"validateBasic");function Oh(e,t,r,s){if(Ck(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ka.RECORDS_REQUIRED):new Error(Ka.RECORDS_MUST_BE_ARRAY)}a(Oh,"validateWrite");function Gl(){}a(Gl,"noop");JO.exports={insertRecords:Nk,updateRecords:Ik,upsertRecords:wk}});var pi=T((Xne,Lk)=>{Lk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Us=T((jne,ZO)=>{"use strict";var jO=$(),XO=b(),fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,nn=require("joi"),Bn={schema_format:{pattern:fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Dk=nn.alternatives(nn.string().min(1).max(Bn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+Bn.schema_format.message}),nn.number()).required(),Uk=nn.alternatives(nn.string().min(1).max(Bn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+Bn.schema_format.message}),nn.number()),Mk=nn.alternatives(nn.string().min(1).max(Bn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+Bn.schema_format.message}),nn.number()).required();function Pk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Bn.schema_length.maximum?`'${e}' maximum of 250 characters`:fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Pk,"checkValidTable");function vk(e,t){return jO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(vk,"validateSchemaExists");function Bk(e,t){let r=t.state.ancestors[0].schema;return jO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Bk,"validateTableExists");function Hk(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(Hk,"validateSchemaName");ZO.exports={common_validators:Bn,schema_regex:fo,hdb_schema_table:Dk,validateSchemaExists:vk,validateTableExists:Bk,validateSchemaName:Hk,checkValidTable:Pk,hdb_database:Uk,hdb_table:Mk}});var xl=T((eie,eN)=>{var{common_validators:Ms}=Us(),Qa=qe(),Wa="is required",tt={database:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},schema:{presence:!1,format:Ms.schema_format,length:Ms.schema_length},table:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length},hash_attribute:{presence:!0,format:Ms.schema_format,length:Ms.schema_length}};function za(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(za,"makeAttributesStrings");function Fk(e){return e=za(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(Fk,"schema_object");function qk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(qk,"table_object");function Gk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,Qa.validateObject(e,tt)}a(Gk,"create_table_object");function xk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence={message:Wa},tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(xk,"attribute_object");function kk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(kk,"describe_table");function Vk(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(Vk,"validateTableResidence");eN.exports={schema_object:Fk,create_table_object:Gk,table_object:qk,attribute_object:xk,describe_table:kk,validateTableResidence:Vk}});var rN=T((rie,tN)=>{"use strict";var $k=require("uuid"),Nh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||$k.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=Nh});var kl=T((nie,sN)=>{"use strict";var Yk=rN(),bh=class extends Yk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};sN.exports=bh});var iN=T((oie,nN)=>{"use strict";nN.exports=Wk;var Kk="inserted";function Wk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Kk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Wk,"returnObject")});var Vl=T((cie,lN)=>{"use strict";var Qk=b(),yh=Ue(),zk=_o(),{getSystemSchemaPath:Jk,getSchemaPath:Xk}=ve(),jk=pi(),Zk=xl(),eV=kl(),tV=iN(),{handleHDBError:oN,hdb_errors:cN}=j(),aN=$(),{HTTP_STATUS_CODES:rV}=cN,Ih=jk.hdb_attribute,uN=[];for(let e=0;e<Ih.attributes.length;e++)uN.push(Ih.attributes[e].attribute);var sV="inserted";lN.exports=nV;async function nV(e){let t=Zk.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,rV.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 eV(e.schema,e.table,e.attribute,e.id);try{let i=await yh.openEnvironment(Xk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);yh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await yh.openEnvironment(Jk(),Qk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await zk.insertRecords(o,Ih.hash_attribute,uN,[n]);return tV(sV,c,{records:[n]},u)}catch(i){throw i}}a(nV,"lmdbCreateAttribute")});var Ch=T((lie,dN)=>{var{hdb_table:iV,hdb_database:_N}=Us(),oV=qe(),wh=require("joi"),aV={undefined:"undefined",null:"null"},cV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||aV[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),uV=wh.object({database:_N,schema:_N,table:iV,records:wh.array().items(wh.object().custom(cV)).required()});dN.exports=function(e){return oV.validateBySchema(e,uV)}});var Ja=T((fie,EN)=>{"use strict";var on=$(),fN=F(),die=Ch(),{getDatabases:lV}=(fe(),Z(Ce)),{ClientError:Si}=j();EN.exports=_V;function _V(e){if(on.isEmpty(e))throw new Si("invalid update parameters defined.");if(on.isEmptyOrZeroLength(e.schema))throw new Si("invalid schema specified.");if(on.isEmptyOrZeroLength(e.table))throw new Si("invalid table specified.");if(!Array.isArray(e.records))throw new Si("records must be an array");let t=lV()[e.schema]?.[e.table];if(on.isEmpty(t))throw new Si(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&on.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new Si("a valid hash attribute must be provided with update record, check log for more info");if(!on.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Si(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!on.isEmpty(o[r])&&o[r]!==""&&s.has(on.autoCast(o[r]))&&(o.skip=!0),s.add(on.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(_V,"insertUpdateValidate")});var Xa=T((hie,hN)=>{"use strict";var dV=b().OPERATIONS_ENUM,Lh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=dV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};hN.exports=Lh});var tc=T((Sie,mN)=>{"use strict";var pie=Xa(),$l=b(),Uh=$(),Dh=F(),fV=require("uuid"),{handleHDBError:ja,hdb_errors:EV}=j(),{HDB_ERROR_MSGS:Za,HTTP_STATUS_CODES:ec}=EV;mN.exports=hV;function hV(e,t,r){for(let n=0;n<t.length;n++)mV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];pV(i,r,e.operation)}}a(hV,"processRows");function mV(e){if(Buffer.byteLength(String(e))>$l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ja(new Error,Za.ATTR_NAME_LENGTH_ERR(e),ec.BAD_REQUEST,void 0,void 0,!0);if(Uh.isEmptyOrZeroLength(e)||Uh.isEmpty(e.trim()))throw ja(new Error,Za.ATTR_NAME_NULLISH_ERR,ec.BAD_REQUEST,void 0,void 0,!0)}a(mV,"validateAttribute");function pV(e,t,r){if(!e.hasOwnProperty(t)||Uh.isEmptyOrZeroLength(e[t])){if(r===$l.OPERATIONS_ENUM.INSERT||r===$l.OPERATIONS_ENUM.UPSERT){e[t]=fV.v4();return}throw Dh.error("Update transaction aborted due to record with no hash value:",e),ja(new Error,Za.RECORD_MISSING_HASH_ERR,ec.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>$l.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Dh.error(e),ja(new Error,Za.HASH_VAL_LENGTH_ERR,ec.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Dh.error(e),ja(new Error,Za.INVALID_FORWARD_SLASH_IN_HASH_ERR,ec.BAD_REQUEST,void 0,void 0,!0)}a(pV,"validateHash")});var SN=T((Rie,pN)=>{"use strict";var Mh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=Mh});var gN=T((Aie,RN)=>{"use strict";var Ph=Ue(),SV=F(),TN=dr().LMDB_ERRORS_ENUM;RN.exports=TV;async function TV(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Ph.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 Ph.closeEnvironment(global.lmdb_map[s]),await Ph.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){SV.error(t)}}a(TV,"cleanLMDBMap")});var an=T((Nie,bN)=>{"use strict";var rc=require("crypto"),RV=X(),{CONFIG_PARAMS:gV}=b(),ON="aes-256-cbc",AV=32,OV=16,vh=64,NN=32,NV=vh+NN,AN=new Map;bN.exports={encrypt:bV,decrypt:yV,createNatsTableStreamName:IV};function bV(e){let t=rc.randomBytes(AV),r=rc.randomBytes(OV),s=rc.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(bV,"encrypt");function yV(e){let t=e.substr(0,vh),r=e.substr(vh,NN),s=e.substr(NV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=rc.createDecipheriv(ON,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(yV,"decrypt");function IV(e,t){let r=RV.get(gV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=AN.get(r);return s||(s=rc.createHash("md5").update(r).digest("hex"),AN.set(r,s)),s}a(IV,"createNatsTableStreamName")});var Ti=T((Iie,IN)=>{"use strict";var yie=qr(),Yl=F(),yN=xl(),wV=an(),Kl=$(),{handleHDBError:Wl,hdb_errors:CV}=j(),{HDB_ERROR_MSGS:Ql,HTTP_STATUS_CODES:Bh}=CV,LV=X();LV.initSync();var{getDatabases:Hh}=(fe(),Z(Ce));IN.exports={describeAll:DV,describeTable:zl,describeSchema:UV};async function DV(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=Hh(),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 zl({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 zl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Yl.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 Yl.error("Got an error in describeAll"),Yl.error(t),Wl(new Error,Ql.DESCRIBE_ALL_ERR)}}a(DV,"describeAll");async function zl(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=Hh()[r];if(!c)throw Wl(new Error,Ql.SCHEMA_NOT_FOUND(e.schema),Bh.NOT_FOUND);let u=c[s];if(!u)throw Wl(new Error,Ql.TABLE_NOT_FOUND(e.schema,e.table),Bh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=wV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Yl.warn(`unable to stat table dbi due to ${f}`)}return d}a(zl,"descTable");async function UV(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=Hh()[s];if(!i)throw Wl(new Error,Ql.SCHEMA_NOT_FOUND(e.schema),Bh.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 zl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(UV,"describeSchema")});var cn=T((Die,UN)=>{var MV=pi(),{callbackify:CN,promisify:PV}=require("util"),{getDatabases:LN}=(fe(),Z(Ce));UN.exports={setSchemaDataToGlobal:wN,getTableSchema:vV,getSystemSchema:BV,setSchemaDataToGlobalAsync:PV(wN)};var DN=Ti(),Cie=CN(DN.describeAll),Lie=CN(DN.describeTable);function wN(e){global.hdb_schema=LN(),e&&e()}a(wN,"setSchemaDataToGlobal");function vV(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(vV,"getTableSchema");function BV(){return MV}a(BV,"getSystemSchema")});var Gr=T((Mie,BN)=>{"use strict";var Xl=Ch(),bt=$(),HV=require("util"),jl=_s(),FV=cn(),MN=F(),{handleHDBError:Ri,hdb_errors:qV}=j(),{HTTP_STATUS_CODES:gi}=qV,GV=HV.promisify(FV.getTableSchema),xV="updated",PN="inserted",vN="upserted";BN.exports={insert:VV,update:$V,upsert:YV,validation:kV,flush:KV};async function kV(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await GV(e.schema,e.table),r=Xl(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(kV,"validation");async function VV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Xl(e);if(t)throw Ri(new Error,t.message,gi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,gi.BAD_REQUEST);let s=await jl.createRecords(e);return Jl(PN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(VV,"insertData");async function $V(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Xl(e);if(t)throw Ri(new Error,t.message,gi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,gi.BAD_REQUEST);let s=await jl.updateRecords(e);return bt.isEmpty(s.existing_rows)?Jl(xV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Jl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a($V,"updateData");async function YV(e){if(e.operation!=="upsert")throw Ri(new Error,"invalid operation, must be upsert",gi.INTERNAL_SERVER_ERROR);let t=Xl(e);if(t)throw Ri(new Error,t.message,gi.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Ri(new Error,r,gi.BAD_REQUEST);let s=await jl.upsertRecords(e);return Jl(vN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(YV,"upsertData");function Jl(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(Jl,"returnObject");function KV(e){return bt.transformReq(e),jl.flush(e.schema,e.table)}a(KV,"flush")});var qh=T((vie,qN)=>{var WV=qe(),Fh=require("joi"),{hdb_table:QV,hdb_database:HN}=Us(),FN={schema:HN,database:HN,table:QV},zV={date:Fh.date().iso().required()},JV={timestamp:Fh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qN.exports=function(e,t){let r=t==="timestamp"?{...FN,...JV}:{...FN,...zV},s=Fh.object(r);return WV.validateBySchema(e,s)}});var kN=T((Bie,xN)=>{var XV=qe(),Gh=require("joi"),{hdb_table:jV,hdb_database:GN}=Us(),ZV=Gh.object({schema:GN,database:GN,table:jV,hash_values:Gh.array().required(),ids:Gh.array()});xN.exports=function(e){return XV.validateBySchema(e,ZV)}});var $N=T((Hie,VN)=>{"use strict";var xh=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}},kh=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}},Vh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:xh,NoSQLSeachObject:kh,DeleteResponseObject:Vh}});var Ni=T((qie,zN)=>{"use strict";var KN=qh(),e$=kN(),Ai=$(),YN=require("moment"),WN=F(),{promisify:t$,callbackify:r$}=require("util"),Oi=b(),s$=cn(),$h=t$(s$.getTableSchema),Yh=_s(),{DeleteResponseObject:n$}=$N(),{handleHDBError:Hn,hdb_errors:i$}=j(),{HDB_ERROR_MSGS:Zl,HTTP_STATUS_CODES:Fn}=i$,o$="records successfully deleted",a$=r$(QN);zN.exports={delete:a$,deleteRecord:QN,deleteFilesBefore:c$,deleteAuditLogsBefore:u$};async function c$(e){let t=KN(e,"date");if(t)throw Hn(t,t.message,Fn.BAD_REQUEST,void 0,void 0,!0);if(Ai.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw Hn(new Error,Zl.INVALID_DATE,Fn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Zl.INVALID_DATE,!0);let s=Ai.checkSchemaTableExist(e.schema,e.table);if(s)throw Hn(new Error,s,Fn.NOT_FOUND,Oi.LOG_LEVELS.ERROR,s,!0);let n=await Yh.deleteRecordsBefore(e);if(await $h(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(c$,"deleteFilesBefore");async function u$(e){let t=KN(e,"timestamp");if(t)throw Hn(t,t.message,Fn.BAD_REQUEST,void 0,void 0,!0);if(Ai.transformReq(e),isNaN(e.timestamp))throw Hn(new Error,Zl.INVALID_VALUE("Timestamp"),Fn.BAD_REQUEST,Oi.LOG_LEVELS.ERROR,Zl.INVALID_VALUE("Timestamp"),!0);let r=Ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Hn(new Error,r,Fn.NOT_FOUND,Oi.LOG_LEVELS.ERROR,r,!0);let s=await Yh.deleteAuditLogsBefore(e);return await $h(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(u$,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=e$(e);if(t)throw Hn(t,t.message,Fn.BAD_REQUEST,void 0,void 0,!0);Ai.transformReq(e);let r=Ai.checkSchemaTableExist(e.schema,e.table);if(r)throw Hn(new Error,r,Fn.NOT_FOUND,Oi.LOG_LEVELS.ERROR,r,!0);try{await $h(e.schema,e.table);let s=await Yh.deleteRecords(e);return Ai.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${o$}`),s}catch(s){if(s.message===Oi.SEARCH_NOT_FOUND_MESSAGE){let n=new n$;return n.message=Oi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QN,"deleteRecord")});var e_=T((xie,jN)=>{var l$=require("crypto"),JN=9;function _$(e){let t=f$(JN),r=XN(e+t);return t+r}a(_$,"createHash");function d$(e,t){let r=e.substr(0,JN),s=r+XN(t+r);return e===s}a(d$,"validateHash");function f$(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(f$,"generateSalt");function XN(e){return l$.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:_$,validate:d$}});var eb=T((Vie,ZN)=>{var Kh=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 E$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Kh.validateObject(e,Bt)}a(E$,"addUserValidation");function h$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Kh.validateObject(e,Bt)}a(h$,"alterUserValidation");function m$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Kh.validateObject(e,Bt)}a(m$,"dropUserValidation");ZN.exports={addUserValidation:E$,alterUserValidation:h$,dropUserValidation:m$}});var ke=T((Kie,rb)=>{"use strict";var{platform:Yie}=require("os"),p$="nats-server.zip",Wh="nats-server",S$=process.platform==="win32"?`${Wh}.exe`:Wh,Qh="HDB",T$=/^[^\s.,*>]+$/,tb="__request__",R$=a(e=>`${e}.${tb}`,"REQUEST_SUBJECT"),g$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},A$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},O$={HUB:"hub.pid",LEAF:"leaf.pid"},N$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},b$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Qh,deliver_subject:"__HDB__.WORKQUEUE"},y$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Qh,deliver_subject:"HDB.SCHEMAQUEUE"},I$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Qh,deliver_subject:"HDB.USERQUEUE"},w$={SUCCESS:"success",ERROR:"error"},C$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},L$={TXN:"txn",MSGID:"msgid"},Eo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},D$={[Eo.ERR]:1,[Eo.WRN]:2,[Eo.INF]:3,[Eo.DBG]:4,[Eo.TRC]:5},U$={debug:"-D",trace:"-DVV"};rb.exports={NATS_SERVER_ZIP:p$,NATS_SERVER_NAME:Wh,NATS_BINARY_NAME:S$,PID_FILES:O$,NATS_CONFIG_FILES:A$,SERVER_SUFFIX:N$,WORK_QUEUE_CONSUMER_NAMES:b$,SCHEMA_QUEUE_CONSUMER_NAMES:y$,USER_QUEUE_CONSUMER_NAMES:I$,NATS_TERM_CONSTRAINTS_RX:T$,REQUEST_SUFFIX:tb,UPDATE_REMOTE_RESPONSE_STATUSES:w$,CLUSTER_STATUS_STATUSES:C$,REQUEST_SUBJECT:R$,SUBJECT_PREFIXES:L$,MSG_HEADERS:g$,LOG_LEVELS:Eo,LOG_LEVEL_FLAGS:U$,LOG_LEVEL_HIERARCHY:D$}});var nb=T((Qie,sb)=>{"use strict";var t_=b(),r_=class{static{a(this,"BaseLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},zh=class extends r_{static{a(this,"ExtendedLicense")}constructor(t=0,r=t_.RAM_ALLOCATION_ENUM.DEFAULT,s=t_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};sb.exports={BaseLicense:r_,ExtendedLicense:zh}});var sc=T((Jie,lb)=>{"use strict";var mo=require("fs-extra"),ib=e_(),ob=require("crypto"),M$=require("moment"),P$=require("uuid").v4,Ht=F(),Xh=require("path"),v$=$(),qn=b(),B$=nb().ExtendedLicense,ho="invalid license key format",H$="061183",F$="mofi25",q$="aes-256-cbc",G$=16,x$=32,ab=X();ab.initSync();var Jh;lb.exports={validateLicense:cb,generateFingerPrint:V$,licenseSearch:ub,getLicense:K$};function jh(){return Xh.join(ab.getHdbBasePath(),qn.LICENSE_KEY_DIR_NAME,qn.LICENSE_FILE_NAME)}a(jh,"getLicenseDirPath");function k$(){let e=jh();return Xh.join(e,qn.LICENSE_FILE_NAME)}a(k$,"getLicenseFilePath");function Zh(){let e=jh();return Xh.join(e,qn.REG_KEY_FILE_NAME)}a(Zh,"getFingerPrintFilePath");async function V$(){let e=Zh();try{return await mo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await $$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(V$,"generateFingerPrint");async function $$(){let e=P$(),t=ib.hash(e),r=Zh();try{await mo.mkdirp(jh()),await mo.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($$,"writeFingerprint");function cb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qn.RAM_ALLOCATION_ENUM.DEFAULT,version:qn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=Zh(),n=!1;try{n=mo.statSync(s)}catch(i){Ht.error(i)}if(n){let i;try{i=mo.readFileSync(s,"utf8")}catch{Ht.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(F$),c=o[1];c=Buffer.concat([Buffer.from(c)],G$);let u=Buffer.concat([Buffer.from(i)],x$),_=ob.createDecipheriv(q$,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=Y$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ho),Ht.error(ho),new Error(ho)}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(ho),Ht.error(ho),new Error(ho)}else r.exp_date=l;r.exp_date<M$().valueOf()&&(r.valid_date=!1),ib.validate(o[1],`${H$}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ht.error("Invalid licence"),r}a(cb,"validateLicense");function Y$(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(Y$,"checkOldLicense");function ub(){let e=new B$,t=[];try{t=mo.readFileSync(k$(),"utf-8").split(qn.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(v$.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=qn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Jh=e,e}a(ub,"licenseSearch");async function K$(){return Jh||await ub(),Jh}a(K$,"getLicense")});var xr=T((toe,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:tY,alterUser:rY,dropUser:nY,getSuperUser:cY,userInfo:iY,listUsers:n_,listUsersExternal:oY,setUsersToGlobal:So,findAndValidateUser:Nb,getClusterUser:uY,USERNAME_REQUIRED:Eb,ALTERUSER_NOTHING_TO_UPDATE:hb,EMPTY_PASSWORD:mb,EMPTY_ROLE:pb,ACTIVE_BOOLEAN:Sb};var Tb=Gr(),W$=Ni(),rm=e_(),Rb=eb(),gb=qr(),sm=un(),Rr=$(),Ab=require("validate.js"),de=F(),{promisify:Q$}=require("util"),nm=an(),_b=b(),db=ke(),z$=hr(),jie=X(),Zie=sc(),J$=pi(),{table:eoe}=(fe(),Z(Ce)),{handleHDBError:Ps,hdb_errors:X$}=j(),{HTTP_STATUS_CODES:vs,AUTHENTICATION_ERROR_MSGS:em,HDB_ERROR_MSGS:po}=X$,{UserEventMsg:im}=ds(),tm=require("lodash"),{server:om}=(Mr(),Z(ro)),j$=F();om.getUser=Nb;var Ob={username:!0,active:!0,role:!0,password:!0},fb=new Map,s_=gb.searchByValue,Z$=gb.searchByHash,eY=Q$(W$.delete);async function tY(e){let t=Ab.cleanAttributes(e,Ob),r=Rb.addUserValidation(t);if(r)throw Ps(new Error,r.message,vs.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await s_(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 Ps(new Error,po.ROLE_NAME_NOT_FOUND(t.role),vs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ps(new Error,po.DUP_ROLES_FOUND(t.role),vs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=nm.encrypt(t.password)),t.password=rm.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 de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await So()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Ps(new Error,po.USER_ALREADY_EXISTS(t.username),vs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],sm.signalUserChange(new im(process.pid)),`${c.username} successfully added`}a(tY,"addUser");async function rY(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=sY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=nm.encrypt(t.password)),t.password=rm.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 s_(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=po.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Ps(new Error,c,vs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=po.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Ps(new Error,c,vs.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Tb.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await So()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return sm.signalUserChange(new im(process.pid)),n}a(rY,"alterUser");function sY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(sY,"isClusterUser");async function nY(e){try{let t=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 Ps(new Error,po.USER_NOT_EXIST(e.username),vs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await eY(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await So()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return sm.signalUserChange(new im(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(nY,"dropUser");async function iY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=tm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await Z$(r)}catch(n){throw 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(iY,"userInfo");async function oY(){let e;try{e=await n_()}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(oY,"listUsersExternal");async function n_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await s_(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]=tm.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 s_(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=tm.cloneDeep(o),o.role=r[o.role],aY(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(n_,"listUsers");function aY(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(J$)){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(aY,"appendSystemTablesToRole");async function So(){try{let e=await n_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(So,"setUsersToGlobal");async function Nb(e,t,r=!0){global.hdb_users||await So();let s=global.hdb_users.get(e);if(!s)throw Ps(new Error,em.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ps(new Error,em.USER_INACTIVE,vs.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(fb.get(t)===s.password)return n;if(rm.validate(s.password,t))fb.set(t,s.password);else throw Ps(new Error,em.GENERIC_AUTH_FAIL,vs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Nb,"findAndValidateUser");async function cY(){global.hdb_users||await So();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(cY,"getSuperUser");async function uY(){let e=await n_(),t=z$.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=nm.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(uY,"getClusterUser");var bb=[];om.invalidateUser=function(e){for(let t of bb)try{t(e)}catch(r){j$.error("Error invalidating user",r)}};om.onInvalidatedUser=function(e){bb.push(e)}});var ic=T((ioe,Lb)=>{"use strict";var bi=F(),gr=b(),lY=gN(),soe=cn(),noe=Ti(),_Y=xr(),{validateEvent:Ib}=ds(),nc=_s(),dY=require("process"),{resetDatabases:fY}=(fe(),Z(Ce)),EY={[gr.ITC_EVENT_TYPES.SCHEMA]:hY,[gr.ITC_EVENT_TYPES.USER]:Cb};async function hY(e){let t=Ib(e);if(t){bi.error(t);return}bi.trace("ITC schemaHandler received schema event:",e),await lY(e.message),await mY(e.message)}a(hY,"schemaHandler");async function mY(e){try{nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=fY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){bi.error(t)}}a(mY,"syncSchemaMetadata");var wb=[];async function Cb(e){try{try{nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){bi.warn(r)}let t=Ib(e);if(t){bi.error(t);return}bi.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${dY.pid} received user event:`,e),await _Y.setUsersToGlobal();for(let r of wb)r()}catch(t){bi.error(t)}}a(Cb,"userHandler");Cb.addListener=function(e){wb.push(e)};Lb.exports=EY});var ds=T((_oe,Ub)=>{"use strict";var aoe=F(),am=$(),pY=b(),{ITC_ERRORS:oc}=dr(),{parentPort:coe,threadId:SY,isMainThread:TY,workerData:uoe}=require("worker_threads"),{onMessageFromWorkers:RY,broadcast:loe,broadcastWithAcknowledgement:gY}=Ze();Ub.exports={sendItcEvent:AY,validateEvent:Db,SchemaEventMsg:OY,UserEventMsg:NY};var i_;RY(async(e,t)=>{i_=i_||ic(),Db(e),i_[e.type]&&await i_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function AY(e){return!TY&&e.message&&(e.message.originator=SY),gY(e)}a(AY,"sendItcEvent");function Db(e){if(typeof e!="object")return oc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||am.isEmpty(e.type))return oc.MISSING_TYPE;if(!e.hasOwnProperty("message")||am.isEmpty(e.message))return oc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||am.isEmpty(e.message.originator))return oc.MISSING_ORIGIN;if(pY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return oc.INVALID_EVENT(e.type)}a(Db,"validateEvent");function OY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(OY,"SchemaEventMsg");function NY(e){this.originator=e}a(NY,"UserEventMsg")});var un=T((Eoe,Bb)=>{"use strict";var Mb=b(),foe=$(),o_=F(),Pb=SN(),To,{sendItcEvent:vb}=ds();function bY(e){try{o_.trace("signalSchemaChange called with message:",e),To=To||ic();let t=new Pb(Mb.ITC_EVENT_TYPES.SCHEMA,e);return To.schema(t),vb(t)}catch(t){o_.error(t)}}a(bY,"signalSchemaChange");function yY(e){try{o_.trace("signalUserChange called with message:",e),To=To||ic();let t=new Pb(Mb.ITC_EVENT_TYPES.USER,e);return To.user(t),vb(t)}catch(t){o_.error(t)}}a(yY,"signalUserChange");Bb.exports={signalSchemaChange:bY,signalUserChange:yY}});var a_=T((moe,Fb)=>{"use strict";var Hb=$(),IY=b(),wY=F(),CY=Vl(),LY=kl(),DY=un(),{SchemaEventMsg:UY}=ds(),MY="already exists in";Fb.exports=PY;async function PY(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 vY(e,t.schema,t.name,i)})),n}a(PY,"lmdbCheckForNewAttributes");async function vY(e,t,r,s){let n=new LY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await BY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(MY))wY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(vY,"createNewAttribute");async function BY(e){let t;return t=await CY(e),DY.signalSchemaChange(new UY(process.pid,IY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(BY,"createAttribute")});var Ro=T((Soe,qb)=>{"use strict";var cm=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=cm});var xb=T((Roe,Gb)=>{"use strict";var HY=Ro(),FY=b().OPERATIONS_ENUM,um=class extends HY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(FY.INSERT,r,s,n,i),this.records=t}};Gb.exports=um});var Vb=T((Aoe,kb)=>{"use strict";var qY=Ro(),GY=b().OPERATIONS_ENUM,lm=class extends qY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(GY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};kb.exports=lm});var Yb=T((Noe,$b)=>{"use strict";var xY=Ro(),kY=b().OPERATIONS_ENUM,_m=class extends xY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(kY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$b.exports=_m});var Wb=T((yoe,Kb)=>{"use strict";var VY=Ro(),$Y=b().OPERATIONS_ENUM,dm=class extends VY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super($Y.DELETE,s,n,t,i),this.original_records=r}};Kb.exports=dm});var ac=T((Coe,Xb)=>{"use strict";var woe=require("path"),Qb=Ue(),YY=xb(),KY=Vb(),WY=Yb(),QY=Wb(),go=ze(),zb=$(),{CONFIG_PARAMS:zY}=b(),Jb=X();Jb.initSync();var c_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:JY}=ve();Xb.exports=XY;async function XY(e,t){if(Jb.get(zY.LOGGING_AUDITLOG)===!1)return;let r=JY(e.schema,e.table),s=await Qb.openEnvironment(r,e.table,!0),n=jY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Qb.initializeDBIs(s,go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,go.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),zb.isEmpty(n.user_name)||s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[go.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(XY,"writeTransaction");function jY(e,t){let r=zb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===c_.INSERT)return new YY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPDATE)return new KY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.UPSERT)return new WY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===c_.DELETE)return new QY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(jY,"createTransactionObject")});var fm=T((Uoe,jb)=>{"use strict";var ZY=Ja(),Doe=Xa(),cc=b(),e1=tc(),t1=_o().insertRecords,r1=Ue(),s1=F(),n1=a_(),{getSchemaPath:i1}=ve(),o1=ac();jb.exports=a1;async function a1(e){try{let{schema_table:t,attributes:r}=ZY(e);e1(e,r,t.hash_attribute),e.schema!==cc.SYSTEM_SCHEMA_NAME&&(r.includes(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await n1(e.hdb_auth_header,t,r),n=i1(e.schema,e.table),i=await r1.openEnvironment(n,e.table),o=await t1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await o1(e,o)}catch(c){s1.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(a1,"lmdbCreateRecords")});var ty=T((Poe,ey)=>{"use strict";var Zb=b(),c1=fm(),u1=Xa(),l1=require("fs-extra"),{getSchemaPath:_1}=ve();ey.exports=d1;async function d1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new u1(Zb.SYSTEM_SCHEMA_NAME,Zb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await c1(r),await l1.mkdirp(_1(e.schema))}a(d1,"lmdbCreateSchema")});var sy=T((Boe,ry)=>{"use strict";var Em=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=Em});var ay=T((xoe,oy)=>{"use strict";var ny=Ue(),hm=mr(),mm=dr().LMDB_ERRORS_ENUM,f1=ze(),iy=F(),Foe=$(),E1=require("lmdb"),h1=sy(),m1=b(),{OVERFLOW_MARKER:qoe,MAX_SEARCH_KEY_LENGTH:Goe}=f1,p1=m1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function S1(e,t,r,s){if(hm.validateEnv(e),t===void 0)throw new Error(mm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(mm.IDS_REQUIRED):new Error(mm.IDS_MUST_BE_ITERABLE);try{let n=ny.listDBIs(e);ny.initializeDBIs(e,t,n);let i=new h1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[p1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,E1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=hm.getIndexedValues(N);if(Y)for(let Q=0,G=Y.length;Q<G;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=hm.getNextMonotonicTime(),i}catch(n){throw n}}a(S1,"deleteRecords");oy.exports={deleteRecords:S1}});var uc=T((Voe,uy)=>{"use strict";var Ao=$(),T1=ay(),R1=Ue(),{getSchemaPath:g1}=ve(),A1=ac(),O1=F();uy.exports=N1;async function N1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ao.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ao.isEmptyOrZeroLength(e.hash_values)&&!Ao.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ao.isEmpty(u)||e.hash_values.push(u)}}if(Ao.isEmptyOrZeroLength(e.hash_values))return cy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ao.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=g1(e.schema,e.table),i=await R1.openEnvironment(n,e.table),o=await T1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await A1(e,o)}catch(c){O1.error(`unable to write transaction due to ${c.message}`)}return cy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(N1,"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 Sm=T((Koe,ly)=>{"use strict";var b1=b(),Yoe=mr();function pm(e,t){let r=Object.create(null);if(t.length===1&&b1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(pm,"parseRow");function y1(e,t,r,s){let n=pm(r,e);s.push(n)}a(y1,"searchAll");function I1(e,t,r,s){let n=pm(r,e);s[t]=n}a(I1,"searchAllToMap");function w1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(w1,"iterateDBI");function yi(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(yi,"pushResults");function C1(e,t,r,s,n,i){t.toString().endsWith(e)&&yi(t,r,s,n,i)}a(C1,"endsWith");function L1(e,t,r,s,n,i){t.toString().includes(e)&&yi(t,r,s,n,i)}a(L1,"contains");function D1(e,t,r,s,n,i){t>e&&yi(t,r,s,n,i)}a(D1,"greaterThanCompare");function U1(e,t,r,s,n,i){t>=e&&yi(t,r,s,n,i)}a(U1,"greaterThanEqualCompare");function M1(e,t,r,s,n,i){t<e&&yi(t,r,s,n,i)}a(M1,"lessThanCompare");function P1(e,t,r,s,n,i){t<=e&&yi(t,r,s,n,i)}a(P1,"lessThanEqualCompare");ly.exports={parseRow:pm,searchAll:y1,searchAllToMap:I1,iterateDBI:w1,endsWith:C1,contains:L1,greaterThanCompare:D1,greaterThanEqualCompare:U1,lessThanCompare:M1,lessThanEqualCompare:P1,pushResults:yi}});var Oo=T((Xoe,py)=>{"use strict";var Gn=Ue(),Qoe=F(),Ar=mr(),u_=ze(),Je=dr().LMDB_ERRORS_ENUM,zoe=$(),v1=b(),l_=Sm(),{parseRow:B1}=l_,Joe=require("lmdb"),{OVERFLOW_MARKER:_y,MAX_SEARCH_KEY_LENGTH:H1}=u_;function dy(e,t,r,s=!1,n=void 0,i=void 0){return Ii(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 lc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Ii(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(lc,"iterateRangeBetween");function Ii(e,t,r,s){let n=e.database||e,i=Gn.openDBI(n,r);i[u_.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(Ii,"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=Gn.openDBI(e,r);else{let u=Gn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Gn.openDBI(e,u[_]),!n[u_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(fy,"getOverflowCheck");function F1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Ii(e,t,t,(o,c,u)=>(__(r),r=_c(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>B1(_.value,r))))}a(F1,"searchAll");function q1(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);__(r),r=_c(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,l_.parseRow(u,r));return o}a(q1,"searchAllToMap");function G1(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(G1,"iterateDBI");function x1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Gn.statDBI(e,t).entryCount}a(x1,"countAll");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){return xn(e,r,s),Ii(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(k1,"equals");function V1(e,t,r){return xn(e,t,r),Gn.openDBI(e,t).getValuesCount(r)}a(V1,"count");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){return xn(e,r,s),Ii(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($1,"startsWith");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){return Ey(e,t,r,s,n,i,o,!0)}a(Y1,"endsWith");function Ey(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return xn(e,r,s),Ii(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))?_[u_.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 K1(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!0,!1)}a(K1,"greaterThan");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!1,!1)}a(W1,"greaterThanEqual");function Q1(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!0)}a(Q1,"lessThan");function z1(e,t,r,s,n=!1,i=void 0,o=void 0){xn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),lc(e,t,r,u,s,n,i,o,!1,!1)}a(z1,"lessThanEqual");function J1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(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 lc(e,t,r,s,n,i,o,c)}a(J1,"between");function X1(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(__(r),r=_c(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=l_.parseRow(c,r)),o}a(X1,"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 Z1(e,t,r,s,n=[]){return my(e,t,r,s,n),hy(e,t,r,s,n).map(i=>i[1])}a(Z1,"batchSearchByHash");function eK(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(eK,"batchSearchByHashToMap");function hy(e,t,r,s,n=[]){return Ii(e,t,t,(i,o,c)=>{r=_c(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,l_.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(__(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 __(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(__,"validateFetchAttributes");function xn(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>H1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(xn,"validateComparisonFunctions");function _c(e,t){return t.length===1&&v1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Gn.listDBIs(e)),t}a(_c,"setGetWholeRowAttributes");py.exports={searchAll:F1,searchAllToMap:q1,count:V1,countAll:x1,equals:k1,startsWith:$1,endsWith:Y1,contains:Ey,searchByHash:X1,setGetWholeRowAttributes:_c,batchSearchByHash:Z1,batchSearchByHashToMap:eK,checkHashExists:j1,iterateDBI:G1,greaterThan:K1,greaterThanEqual:W1,lessThan:Q1,lessThanEqual:z1,between:J1}});var No=T((Zoe,Ay)=>{var Sy=require("lodash"),Ty=qe(),Be=require("joi"),tK=$(),{hdb_schema_table:d_,checkValidTable:Ry,hdb_table:gy,hdb_database:f_}=Us(),{handleHDBError:rK,hdb_errors:sK}=j(),{getDatabases:nK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:iK}=sK,oK=Be.object({database:f_,schema:f_,table:gy,search_attribute:d_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(d_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),aK=Be.object({database:f_,schema:f_,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(d_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:d_,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,oK);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,aK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=tK.checkGlobalSchemaTable(e.schema,e.table);if(n)return rK(new Error,n,iK.NOT_FOUND);let o=nK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=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 Tm=T((tae,Oy)=>{"use strict";var cK=Ue(),uK=No(),{getSchemaPath:lK}=ve();Oy.exports=_K;function _K(e){let t=uK(e,"hashes");if(t)throw t;let r=lK(e.schema,e.table);return cK.openEnvironment(r,e.table)}a(_K,"initialize")});var Rm=T((sae,Ny)=>{"use strict";var dK=Oo(),fK=Tm();Ny.exports=EK;async function EK(e){let t=await fK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return dK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(EK,"lmdbGetDataByHash")});var bo=T((iae,by)=>{"use strict";var gm=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=gm});var Iy=T((cae,yy)=>{"use strict";var aae=bo(),hK=Oo(),mK=Tm();yy.exports=pK;async function pK(e){let t=await mK(e),r=global.hdb_schema[e.schema][e.table];return hK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(pK,"lmdbSearchByHash")});var Bs=T((lae,wy)=>{"use strict";var Am=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=Am});var E_=T((dae,Py)=>{"use strict";var Ft=Oo(),SK=Ue(),TK=$(),oe=ze(),wi=b(),RK=pi(),Cy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:gK}=ve(),ln=wi.SEARCH_WILDCARDS;async function AK(e,t,r){let s;e.schema===wi.SYSTEM_SCHEMA_NAME?s=RK[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(AK,"prepSearch");async function Dy(e,t,r,s){let n=gK(e.schema,e.table),i=await SK.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(OK(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 OK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(OK,"checkToFetchMore");function My(e,t,r,s){if(TK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ln.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ln[0])<0&&n.indexOf(ln[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(ln.indexOf(i)>=0&&ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(ln.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(ln.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(ln[0])||n.includes(ln[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Cy.UNKNOWN_SEARCH_TYPE)}else switch(s){case wi.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case wi.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case wi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case wi.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case wi.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:AK,searchByType:Uy}});var By=T((hae,vy)=>{"use strict";var Eae=Bs(),NK=No(),bK=$(),yK=b(),IK=E_();vy.exports=wK;function wK(e,t){if(!bK.isEmpty(t)&&yK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=NK(e,"value");if(s)throw s;let n=!0;return IK.prepSearch(e,t,n)}a(wK,"lmdbGetDataByValue")});var dc=T((Sae,Hy)=>{"use strict";var pae=Bs(),CK=No(),LK=$(),DK=b(),UK=E_();Hy.exports=MK;async function MK(e,t){if(!LK.isEmpty(t)&&DK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=CK(e,"value");if(s)throw s;return UK.prepSearch(e,t,!1)}a(MK,"lmdbSearchByValue")});var qy=T((gae,Fy)=>{"use strict";var Rae=ze(),Om=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}},Nm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},bm=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Om,SearchCondition:Nm,SortAttribute:bm}});var $y=T((bae,Vy)=>{"use strict";var Oae=qy().SearchByConditionsObject,PK=Bs(),vK=No(),ym=Oo(),h_=ze(),{Resource:Nae}=(as(),Z(UE)),ky=E_(),BK=Sm(),HK=require("lodash"),{getSchemaPath:FK}=ve(),Gy=Ue(),{handleHDBError:qK,hdb_errors:GK}=j(),{HTTP_STATUS_CODES:xK}=GK,kK=1e8;Vy.exports=VK;async function VK(e){let t=vK(e,"conditions");if(t)throw qK(t,t.message,xK.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=FK(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=HK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===h_.SEARCH_TYPES.EQUALS?_.estimated_count=ym.count(s,_.search_attribute,_.search_value):l===h_.SEARCH_TYPES.CONTAINS||l===h_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=kK}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=ym.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>BK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await 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=ym.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(VK,"lmdbSearchByConditions");async function xy(e,t,r,s){let n=new PK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===h_.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 fc=T((Iae,Yy)=>{"use strict";var $K=b().OPERATIONS_ENUM,Im=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=$K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Yy.exports=Im});var wm=T((Cae,Zy)=>{"use strict";var zy=Bs(),Jy=fc(),Xy=dc(),jy=uc(),zt=b(),Ky=$(),Wy=Ue(),{getTransactionAuditStorePath:YK,getSchemaPath:KK}=ve(),Qy=F();Zy.exports=WK;async function WK(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 QK(e),await zK(e);let t=KK(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=YK(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(WK,"lmdbDropTable");async function QK(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(QK,"deleteAttributesFromSystem");async function zK(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(zK,"dropTableFromSystem")});var tI=T((Dae,eI)=>{"use strict";var JK=require("fs-extra"),XK=Bs(),jK=bo(),ZK=fc(),eW=wm(),tW=uc(),rW=Rm(),sW=dc(),_n=b(),{getSchemaPath:nW}=ve(),{handleHDBError:iW,hdb_errors:oW}=j(),{HDB_ERROR_MSGS:aW,HTTP_STATUS_CODES:cW}=oW;eI.exports=uW;async function uW(e){let t;try{t=await lW(e.schema);let r=new XK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await sW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await eW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new ZK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await tW(n);let i=nW(t);await JK.remove(i)}catch(r){throw r}}a(uW,"lmdbDropSchema");async function lW(e){let t=new jK(_n.SYSTEM_SCHEMA_NAME,_n.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[_n.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await rW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw iW(new Error,aW.SCHEMA_NOT_FOUND(e),cW.NOT_FOUND,void 0,void 0,!0);return s}a(lW,"validateDropSchema")});var Lm=T((Mae,rI)=>{"use strict";var Cm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};rI.exports=Cm});var nI=T((Bae,sI)=>{"use strict";var _W=require("fs-extra"),m_=Ue(),{getTransactionAuditStorePath:dW}=ve(),Dm=ze(),vae=Lm();sI.exports=fW;async function fW(e){let t;try{let r=dW(e.schema,e.table);await _W.mkdirp(r),t=await m_.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{m_.createDBI(t,Dm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),m_.createDBI(t,Dm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),m_.createDBI(t,Dm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(fW,"createTransactionsAuditEnvironment")});var cI=T((Fae,aI)=>{"use strict";var Um=b(),iI=Ue(),EW=_o(),{getSystemSchemaPath:hW,getSchemaPath:mW}=ve(),pW=pi(),SW=Vl(),Mm=kl(),TW=F(),RW=nI(),vm=pW.hdb_table,oI=[];for(let e=0;e<vm.attributes.length;e++)oI.push(vm.attributes[e].attribute);aI.exports=gW;async function gW(e,t){let r=mW(t.schema,t.table),s=new Mm(t.schema,t.table,Um.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Mm(t.schema,t.table,Um.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Mm(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(hW(),Um.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await EW.insertRecords(o,vm.hash_attribute,oI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Pm(s),await Pm(n),await Pm(i)}await RW(t)}catch(o){throw o}}a(gW,"lmdbCreateTable");async function Pm(e){try{await SW(e)}catch(t){TW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Pm,"createAttribute")});var lI=T((Gae,uI)=>{"use strict";var AW=Ja(),OW=tc(),NW=a_(),Ec=b(),bW=_o().updateRecords,yW=Ue(),{getSchemaPath:IW}=ve(),wW=ac(),CW=F();uI.exports=LW;async function LW(e){try{let{schema_table:t,attributes:r}=AW(e);OW(e,r,t.hash_attribute),e.schema!==Ec.SYSTEM_SCHEMA_NAME&&(r.includes(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ec.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ec.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await NW(e.hdb_auth_header,t,r),n=IW(e.schema,e.table),i=await yW.openEnvironment(n,e.table),o=await bW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await wW(e,o)}catch(c){CW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(LW,"lmdbUpdateRecords")});var dI=T((kae,_I)=>{"use strict";var DW=b().OPERATIONS_ENUM,Bm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=DW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_I.exports=Bm});var EI=T((Yae,fI)=>{"use strict";var $ae=dI(),UW=Ja(),MW=tc(),PW=a_(),hc=b(),vW=_o().upsertRecords,BW=Ue(),{getSchemaPath:HW}=ve(),FW=ac(),qW=F(),{handleHDBError:GW,hdb_errors:xW}=j();fI.exports=kW;async function kW(e){let t;try{t=UW(e)}catch(u){throw GW(u,u.message,xW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;MW(e,s,r.hash_attribute),e.schema!==hc.SYSTEM_SCHEMA_NAME&&(s.includes(hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(hc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(hc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await PW(e.hdb_auth_header,r,s),i=HW(e.schema,e.table),o=await BW.openEnvironment(i,e.table),c=await vW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await FW(e,c)}catch(u){qW.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(kW,"lmdbUpsertRecords")});var mI=T((Wae,hI)=>{"use strict";var Hm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};hI.exports=Hm});var SI=T((zae,pI)=>{"use strict";var Fm=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=Fm});var gI=T((jae,RI)=>{"use strict";var qm=Ue(),{getTransactionAuditStorePath:VW}=ve(),Xae=mI(),mc=ze(),$W=$(),TI=SI(),YW=require("util").promisify,KW=YW(setTimeout),WW=1e4,QW=100;RI.exports=zW;async function zW(e){let t=VW(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new TI;do n=await JW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await KW(QW);while(n.transactions_deleted>0);return i}a(zW,"deleteAuditLogsBefore");async function JW(e,t){let r=new TI;try{let s=e.dbis[mc.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[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];$W.isEmpty(c)||(n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[mc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>WW)break}return await n,r}catch(s){throw s}}a(JW,"deleteTransactions")});var OI=T((ece,AI)=>{"use strict";var Gm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};AI.exports=Gm});var bI=T((sce,NI)=>{"use strict";var XW=Bs(),jW=fc(),rce=OI(),Hs=b(),ZW=$(),xm=Ue(),eQ=pi(),tQ=dc(),rQ=uc(),{getSchemaPath:sQ}=ve();NI.exports=nQ;async function nQ(e,t=!0){let r;e.schema===Hs.SYSTEM_SCHEMA_NAME?r=eQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await oQ(e),n=sQ(e.schema,e.table),i=await xm.openEnvironment(n,e.table);return t===!0&&await iQ(e,i,r.hash_attribute),xm.dropDBI(i,e.attribute),s}a(nQ,"lmdbDropAttribute");async function iQ(e,t,r){let s=xm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(iQ,"removeAttributeFromAllObjects");async function oQ(e){let t=new XW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await tQ(t)).filter(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(ZW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Hs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new jW(Hs.SYSTEM_SCHEMA_NAME,Hs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return rQ(i)}a(oQ,"dropAttributeFromSystem")});var DI=T((oce,LI)=>{"use strict";var km=Ue(),yo=ze(),ice=mr(),Vm=b(),yI=$(),{getTransactionAuditStorePath:aQ}=ve(),cQ=Oo(),p_=Ro(),uQ=F();LI.exports=lQ;async function lQ(e){let t=aQ(e.schema,e.table),r=await km.openEnvironment(t,e.table,!0),s=km.listDBIs(r);km.initializeDBIs(r,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return II(r,e.search_values);case Vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,dQ(r,e.search_values,n);case Vm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return _Q(r,e.search_values);default:return II(r)}}a(lQ,"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[yo.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 p_,n))}a(II,"searchTransactionsByTimestamp");function _Q(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[yo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,CI(e,i))}return Object.fromEntries(r)}a(_Q,"searchTransactionsByUsername");function dQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=cQ.equals(e,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,yo.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(dQ,"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 p_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new p_(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[yo.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 p_,i);r.push(o)}}catch(i){uQ.warn(i)}return r}catch(s){throw s}}a(CI,"batchSearchTransactions")});var MI=T((lce,UI)=>{"use strict";var{getSchemaPath:cce}=ve(),uce=Ue(),{database:fQ}=(fe(),Z(Ce));UI.exports={writeTransaction:EQ};async function EQ(e,t,r){return fQ({database:e,table:t}).transaction(r)}a(EQ,"writeTransaction")});var HI=T((dce,BI)=>{"use strict";var{getSchemaPath:PI}=ve(),vI=Ue();BI.exports={flush:hQ,resetReadTxn:mQ};async function hQ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(hQ,"flush");async function mQ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(mQ,"resetReadTxn")});var xI=T((Ece,GI)=>{"use strict";var{Readable:pQ}=require("stream"),{getDatabases:SQ}=(fe(),Z(Ce)),{readSync:TQ,openSync:RQ,createReadStream:FI}=require("fs"),{open:gQ}=require("lmdb"),qI=Ul(),AQ=Pl(),{AUDIT_STORE_OPTIONS:OQ}=(ao(),Z(AO)),{INTERNAL_DBIS_NAME:NQ,AUDIT_STORE_NAME:bQ}=ze();GI.exports=IQ;var $m=32768,yQ=100;async function IQ(e){let t=e.database||e.schema||"data",r=SQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=gQ({noSync:!0,maxDbs:AQ.MAX_DBS}),f,E=d.openDB(NQ,new 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:G,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(G,K,w),p++%yQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,G=new qI(!Q,Q);await S(I,G)}e.include_audit&&await S(bQ,Object.assign({},OQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=RQ(o.path);return o.transaction(()=>{let _=Buffer.alloc($m);TQ(c,_,0,$m),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:$m}),f=new pQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(IQ,"getBackup")});var $I=T((mce,VI)=>{"use strict";var wQ=F(),{handleHDBError:CQ}=j(),LQ=cO(),DQ=Vl(),UQ=fm(),MQ=ty(),PQ=uc(),vQ=Rm(),BQ=Iy(),HQ=By(),FQ=dc(),qQ=$y(),GQ=tI(),xQ=cI(),kQ=lI(),VQ=EI(),$Q=gI(),YQ=wm(),KQ=bI(),WQ=DI(),QQ=MI(),kI=HI(),zQ=xI(),Ym=class extends LQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return qQ(t)}async getDataByHash(t){return await vQ(t)}async searchByHash(t){return await BQ(t)}async getDataByValue(t,r){return await HQ(t,r)}async searchByValue(t){return await FQ(t)}async createSchema(t){return await MQ(t)}async dropSchema(t){return await GQ(t)}async createTable(t,r){return await xQ(t,r)}async dropTable(t){return await YQ(t)}async createAttribute(t){return await DQ(t)}async createRecords(t){return await UQ(t)}async updateRecords(t){return await kQ(t)}async upsertRecords(t){try{return await VQ(t)}catch(r){throw CQ(r,null,null,wQ.ERR,r)}}async deleteRecords(t){return await PQ(t)}async dropAttribute(t){return await KQ(t)}async deleteAuditLogsBefore(t){return await $Q(t)}async readAuditLog(t){return await WQ(t)}writeTransaction(t,r,s){return QQ.writeTransaction(t,r,s)}flush(t,r){return kI.flush(t,r)}resetReadTxn(t,r){return kI.resetReadTxn(t,r)}getBackup(t){return zQ(t)}};VI.exports=Ym});var ZI={};Qe(ZI,{ResourceBridge:()=>Qm});function zm({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=Fs(e),s=zm(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&&ml(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 Fs(e){let t=e.database||e.schema||XQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,JQ.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,S_,Es,JI,XI,ms,Km,Wm,jI,JQ,XQ,jQ,ZQ,YI,Qm,ew=Te(()=>{"use strict";zI=D($I()),S_=D(No()),Es=D(j());fe();JI=D(Ja()),XI=D(tc()),ms=D(b()),Km=D(un()),Wm=D(ds()),jI=D($());Ei();pl();({HDB_ERROR_MSGS:JQ}=Es.hdb_errors),XQ="data",jQ=1e4,ZQ=10,Qm=class extends zI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YI=this}async searchByConditions(t){let r=(0,S_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Fs(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:zm(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 Fs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Fs(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){Fs(t).dropTable()}createSchema(t){return pc({database:t.schema,table:null}),Km.signalSchemaChange(new Wm.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Jm(t.schema),Km.signalSchemaChange(new Wm.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=ml(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)(ZQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%jQ===0&&await _();return u.length>0&&await _(),n?WI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,S_.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,S_.default)(t,"value");if(s)throw s;let n=Fs(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:zm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Fs(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){Fs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Fs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Fs(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(zm,"getSelect");a(KI,"getRecords");a(Fs,"getTable");a(WI,"createDeleteResponse");a(QI,"groupRecordsInHistory")});var _s=T((Ace,tw)=>{"use strict";var{ResourceBridge:ez}=(ew(),Z(ZI)),tz=X();tz.initSync();var T_;function rz(){return T_||(T_=new ez,T_)}a(rz,"getBridge");tw.exports=rz()});var iw=T((Nce,nw)=>{"use strict";var rw=require("lodash"),Sc=require("mathjs"),sz=require("jsonata"),sw=$();nw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?rw.uniqWith(e,rw.isEqual):e,searchJSON:nz,mad:Tc.bind(null,Sc.mad),mean:Tc.bind(null,Sc.mean),mode:Tc.bind(null,Sc.mode),prod:Tc.bind(null,Sc.prod),median:Tc.bind(null,Sc.median)};function Tc(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(Tc,"aggregateFunction");function nz(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(sw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sw.isEmpty(this.__ala__.res[r])){let s=sz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(nz,"searchJSON")});var aw=T((yce,ow)=>{"use strict";var rt=require("moment"),Xm="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(Xm),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(Xm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Xm)}});var _w=T((Ice,lw)=>{"use strict";var iz=require("@turf/area"),oz=require("@turf/length"),az=require("@turf/circle"),cz=require("@turf/difference"),uz=require("@turf/distance"),lz=require("@turf/boolean-contains"),_z=require("@turf/boolean-equal"),dz=require("@turf/boolean-disjoint"),fz=require("@turf/helpers"),cw=b(),ue=$(),dn=F();lw.exports={geoArea:Ez,geoLength:hz,geoCircle:mz,geoDifference:pz,geoDistance:uw,geoNear:Sz,geoContains:Tz,geoEqual:Rz,geoCrosses:gz,geoConvert:Az};function Ez(e){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return iz.default(e)}catch(t){return dn.trace(t,e),NaN}}a(Ez,"geoArea");function hz(e,t){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return oz.default(e,{units:t||"kilometers"})}catch(r){return dn.trace(r,e),NaN}}a(hz,"geoLength");function mz(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return az.default(e,t,{units:r||"kilometers"})}catch(s){return dn.trace(s,e,t),NaN}}a(mz,"geoCircle");function pz(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 cz(e,t)}catch(r){return dn.trace(r,e,t),NaN}}a(pz,"geoDifference");function uw(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 uz.default(e,t,{units:r||"kilometers"})}catch(s){return dn.trace(s,e,t),NaN}}a(uw,"geoDistance");function Sz(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 uw(e,t,s)<=r}catch(n){return dn.trace(n,e,t),!1}}a(Sz,"geoNear");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 dn.trace(r,e,t),!1}}a(Tz,"geoContains");function Rz(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 _z.default(e,t)}catch(r){return dn.trace(r,e,t),!1}}a(Rz,"geoEqual");function gz(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!dz.default(e,t)}catch(r){return dn.trace(r,e,t),!1}}a(gz,"geoCrosses");function Az(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(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 typeof e=="string"&&(e=ue.autoCastJSON(e)),fz[t](e,r)}a(Az,"geoConvert")});var R_=T((Cce,dw)=>{var Ci=iw(),Or=aw(),qs=_w();dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ci.mad,e.aggr.mean=e.aggr.MEAN=Ci.mean,e.aggr.mode=e.aggr.MODE=Ci.mode,e.aggr.prod=e.aggr.PROD=Ci.prod,e.aggr.median=e.aggr.MEDIAN=Ci.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ci.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ci.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=qs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=qs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=qs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=qs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=qs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=qs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=qs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=qs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=qs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=qs.geoNear}});var mw=T((Lce,hw)=>{"use strict";var Rc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var Oz=R_(),fw=require("clone"),g_=require("recursive-iterator"),re=F(),le=$(),Io=_s(),Nz=b(),{hdb_errors:bz}=j(),{getDatabases:Ew}=(fe(),Z(Ce)),yz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Oz(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 g_(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=Rc.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(le.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new g_(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 g_(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(Nz.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&&Rc.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(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(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(yz)>-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=Rc.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 Io.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 Io.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 Io.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 Io.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=Rc.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 g_(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=Rc.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 Io.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(bz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Io.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=jm});var qr=T((Uce,pw)=>{"use strict";var Iz=oO();pw.exports={searchByConditions:Cz,searchByHash:Lz,searchByValue:Dz,search:Uz};var Zm=_s(),{transformReq:ep}=$(),wz=mw();async function Cz(e){return ep(e),Zm.searchByConditions(e)}a(Cz,"searchByConditions");async function Lz(e){ep(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Zm.searchByHash(e))r&&t.push(r);return t}a(Lz,"searchByHash");async function Dz(e){ep(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Zm.searchByValue(e))t.push(r);return t}a(Dz,"searchByValue");function Uz(e,t){try{let r=new Iz(e);r.validate(),new wz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Uz,"search")});var A_=T((Pce,Sw)=>{"use strict";var Mz=_s();Sw.exports={writeTransaction:Pz};function Pz(e,t,r){return Mz.writeTransaction(e,t,r)}a(Pz,"writeTransaction")});var Aw=T((Hce,gw)=>{"use strict";var vz=qr(),Bz=cn(),Tw=F(),Hz=Gr(),Bce=A_(),Fz=require("clone"),rp=require("alasql"),qz=R_(),Rw=require("util"),Gz=Rw.promisify(Bz.getTableSchema),xz=Rw.promisify(vz.search),kz=b(),tp=$();qz(rp);gw.exports={update:$z};var Vz="There was a problem performing this update. Please check the logs and try again.";async function $z({statement:e,hdb_user:t}){let r=await Gz(e.table.databaseid,e.table.tableid),s=Yz(e.columns);tp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Fz(n),c=tp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=rp.parse(u).statements[0],l=await xz(_),d=Kz(s,l);return Wz(o,d,t)}a($z,"update");function Yz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=rp.compile(`SELECT ${r.expression.toString()} AS [${kz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Tw.error(t),new Error(Vz)}}a(Yz,"createUpdateRecord");function Kz(e,t){return tp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Kz,"buildUpdateRecords");async function Wz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Hz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Tw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Wz,"updateRecords")});var Nw=T((xce,Ow)=>{var Qz=require("alasql"),zz=qr(),Jz=F(),Xz=_s(),np=require("util"),sp=$(),jz=b(),Zz=cn(),qce=A_(),Gce=Gr(),eJ="record",tJ="successfully deleted",rJ=np.callbackify(oJ),sJ=np.promisify(zz.search),nJ=np.promisify(Zz.getTableSchema);Ow.exports={convertDelete:rJ};function iJ(e){return`${e.deleted_hashes.length} ${eJ}${e.deleted_hashes.length===1?"":"s"} ${tJ}`}a(iJ,"generateReturnMessage");async function oJ({statement:e,hdb_user:t}){let r=await nJ(e.table.databaseid,e.table.tableid);sp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=sp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Qz.parse(o).statements[0],u={operation:jz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await sJ(c);let _=await Xz.deleteRecords(u);return sp.isEmptyOrZeroLength(_.message)&&(_.message=iJ(_)),delete _.txn_time,_}catch(_){throw Jz.error(_),_.hdb_code?_.message:_}}a(oJ,"convertDelete")});var Cw=T((Vce,ww)=>{"use strict";var aJ=Ti(),{hdb_errors:bw}=j(),{getDatabases:yw}=(fe(),Z(Ce));ww.exports={checkSchemaExists:Iw,checkSchemaTableExists:cJ,schema_describe:aJ};async function Iw(e){if(!yw()[e])return bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Iw,"checkSchemaExists");async function cJ(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(cJ,"checkSchemaTableExists")});var gc=T((Yce,uJ)=>{uJ.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 y_={};Qe(y_,{addAnalyticsListener:()=>Nc,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>lJ});function lJ(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=b_.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},b_.set(i,o)}O_||_J()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Nc(e){kw.push(e)}function _J(){O_=performance.now(),setTimeout(async()=>{let e=performance.now()-O_;O_=0;let t=[],r={time:Date.now(),period:e,threadId:Li.threadId,metrics:t};for(let[n,i]of b_){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:Li.threadId,byThread:!0,...s});for(let n of kw)n(t);b_=new Map,Li.parentPort?Li.parentPort.postMessage({type:xw,report:r}):Ww({report:r})},Gw).unref()}async function dJ(e,t=6e4){let r=ap(),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: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 $w()}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 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[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,N_.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,N_.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 ap(){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 hJ(){Kw=!0;let e=(0,Oc.get)(op.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await dJ(Gw,e),await Uw(ap(),fJ),await Uw(Yw(),EJ)},Math.min(e/2,2147483647)).unref()}function Ww(e,t){let r=e.report;r.threadId=t?.threadId||Li.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,N_.getNextMonotonicTime)(),ap().primaryStore.put(r.id,r),Kw||hJ(),mJ&&(Qw=SJ(r))}async function SJ(e){if(await Qw,!kn){let r=(0,Ac.dirname)((0,Fw.getLogFilePath)());try{kn=await(0,ip.open)((0,Ac.join)(r,"analytics.log"),"r+")}catch{kn=await(0,ip.open)((0,Ac.join)(r,"analytics.log"),"w+")}}let t=(await kn.stat()).size;if(t>pJ){let r=Buffer.alloc(t);await kn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await kn.write(r,{position:0}),await kn.truncate(r.length),t=r.length}await kn.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var Li,Hw,Fw,Ac,ip,N_,Oc,op,b_,qw,O_,Gw,xw,kw,Vw,Lw,Dw,$w,fJ,EJ,Mw,Pw,Kw,vw,Bw,mJ,Qw,kn,pJ,Vn=Te(()=>{Li=require("worker_threads"),Hw=D(Ze());fe();Fw=D(F()),Ac=require("path"),ip=require("fs/promises"),N_=D(mr()),Oc=D(X()),op=D(b());Mr();(0,Oc.initSync)();b_=new Map,qw=(0,Oc.get)(op.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(lJ,"setAnalyticsEnabled");a(Nr,"recordAction");ut.recordAnalytics=Nr;a(kr,"recordActionBinary");O_=0,Gw=1e3,xw="analytics-report",kw=[];a(Nc,"addAnalyticsListener");Vw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(_J,"sendAnalytics");a(dJ,"aggregation");Lw=0,Dw=0,$w=a(()=>new Promise(setImmediate),"rest");a(Uw,"cleanup");fJ=36e5,EJ=31536e6;a(ap,"getRawAnalyticsTable");a(Yw,"getAnalyticsTable");(0,Hw.setChildListenerByType)(xw,Ww);a(hJ,"startScheduledTasks");vw=0,Bw=new Map,mJ=!1;a(Ww,"recordAnalytics");pJ=1e6;a(SJ,"logAnalytics")});var dt=T((iue,fC)=>{"use strict";var yt=X();yt.initSync();var TJ=require("fs-extra"),RJ=require("semver"),Ic=require("path"),{monotonicFactory:gJ}=require("ulidx"),Jw=gJ(),AJ=require("util"),Xw=require("child_process"),OJ=AJ.promisify(Xw.exec),NJ=Xw.spawn,ge=ke(),Oe=b(),_p=$(),Vr=F(),I_=an(),bJ=A_(),bc=hr(),{onMessageByType:yJ}=Ze(),{isMainThread:IJ}=require("worker_threads"),{Encoder:wJ,decode:dp}=require("msgpackr"),jw=new wJ,{isEmpty:Di}=_p,Zw=xr(),CJ=48*36e11,LJ=5e9;IJ&&yJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Lo=void 0});var{connect:DJ,StorageType:eC,RetentionPolicy:tC,AckPolicy:w_,DeliverPolicy:C_,DiscardPolicy:UJ,NatsConnection:tue,JetStreamManager:rue,JetStreamClient:sue,StringCodec:nue,JSONCodec:MJ,createInbox:fp,headers:PJ,ErrorCode:zw}=require("nats"),{PACKAGE_ROOT:vJ}=b(),BJ=gc(),{recordAction:HJ}=(Vn(),Z(y_)),rC=MJ(),FJ="clustering",qJ=BJ.engines[ge.NATS_SERVER_NAME],GJ=Ic.join(vJ,"dependencies"),lp=Ic.join(GJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),cp,up,yc,wo,Co;fC.exports={runCommand:sC,checkNATSServerInstalled:xJ,createConnection:Ep,getConnection:L_,getJetStreamManager:wc,getJetStream:nC,getNATSReferences:Xt,getServerList:VJ,createLocalStream:hp,listStreams:iC,deleteLocalStream:$J,getServerConfig:Cc,listRemoteStreams:YJ,viewStream:KJ,viewStreamIterator:WJ,publishToStream:QJ,createWorkQueueStream:zJ,addSourceToWorkStream:aC,request:XJ,removeSourceFromWorkStream:uC,reloadNATS:mp,reloadNATSHub:jJ,reloadNATSLeaf:ZJ,extractServerName:cC,requestErrorHandler:e4,updateWorkStream:t4,createLocalTableStream:_C,createTableStreams:r4,purgeTableStream:dC,purgeSchemaTableStreams:s4,getStreamInfo:n4,updateLocalStreams:o4,closeConnection:kJ,getJsmServerName:Lc,addNatsMsgHeader:oC,updateIngestStreamConsumer:JJ};async function sC(e,t=void 0){let{stdout:r,stderr:s}=await OJ(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(nC,"runCommand");async function kJ(){try{await RJ.access(_p)}catch{return!1}let e=await nC(`${_p} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return gJ.eq(t,GJ)}a(kJ,"checkNATSServerInstalled");async function hp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await eC.getClusterUser();if(Li(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await UJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile: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(hp,"createConnection");async function VJ(){Ss&&(await Ss.drain(),Ss=void 0,Io=void 0,wo=void 0,Co=void 0)}a(VJ,"closeConnection");var Ss,Co;async function C_(){return Co||(Co=hp(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Co),Ss||Co}a(C_,"getConnection");async function Ic(){if(Io)return Io;Li(Ss)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=await Ss.jetstreamManager({domain:e,timeout:6e4}),Io}a(Ic,"getJetStreamManager");async function iC(){if(wo)return wo;Li(Ss)&&await C_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=Ss.jetstream({domain:e,timeout:6e4}),wo}a(iC,"getJetStream");async function Xt(){let e=Ss||await C_(),t=Io||await Ic(),r=wo||await iC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function $J(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await eC.getClusterUser(),n=await hp(t,r,s),i=Ep(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=sC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await dp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a($J,"getServerList");async function mp(e,t){let{jsm:r}=await Xt(),s=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:tC.File,retention:rC.Limits,subjects:t,discard:MJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(mp,"createLocalStream");async function oC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(oC,"listStreams");async function YJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(YJ,"deleteLocalStream");async function KJ(e){let{connection:t}=await Xt(),r=[],s=Ep(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(sC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(KJ,"listRemoteStreams");async function WJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=fp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(WJ,"viewStream");async function*QJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Xw(),o={durable_name:i,ack_policy:I_.Explicit};t&&(o.deliver_policy=w_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=fp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(QJ,"viewStreamIterator");async function zJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=aC(s,r);let{js:n}=await Xt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Zw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),qJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return _C(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await mp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(zJ,"publishToStream");function aC(e,t){t===void 0&&(t=vJ());let r=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(aC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),FJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Li(lp)&&(lp={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:yc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),lp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Li(up)&&(up={port:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Nc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:yc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),up;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function JJ(e){let{jsm:t}=await Xt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:tC.File,retention:rC.Limits,max_age:LJ,max_bytes:DJ,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:I_.Explicit,durable_name:e.durable_name,deliver_policy:w_.All,max_ack_pending:1e4});else throw s}}a(JJ,"createWorkQueueStream");async function XJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:I_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:w_.All,max_ack_pending:1e4}))}a(XJ,"updateIngestStreamConsumer");async function cC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=uC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=y_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(cC,"addSourceToWorkStream");function uC(e){return e.split(".")[1]}a(uC,"extractServerName");async function lC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=y_.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(lC,"removeSourceFromWorkStream");async function jJ(e,t,r=6e4,s=Ep()){if(!dp.isObject(t))throw new Error("data param must be an object");let n=Zw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return fp(c.data)}a(jJ,"request");function pp(e){return new Promise(async(t,r)=>{let s=bJ(_p,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(pp,"reloadNATS");async function ZJ(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await pp(e)}a(ZJ,"reloadNATSHub");async function e2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await pp(e)}a(e2,"reloadNATSLeaf");function t2(e,t,r){let s;switch(e.code){case Jw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Jw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(t2,"requestErrorHandler");async function r2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await _C(async()=>{e.subscribe===!0?await cC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await lC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(r2,"updateWorkStream");function _C(e){return yJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(_C,"exclusiveLock");async function dC(e,t){let r=y_.createNatsTableStreamName(e,t),s=await Cc(),n=o2(e,t,s);await mp(r,[n])}a(dC,"createLocalTableStream");async function s2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await dC(s,n)}}a(s2,"createTableStreams");async function fC(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=y_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(fC,"purgeTableStream");async function n2(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await fC(e,t[r])}a(n2,"purgeSchemaTableStreams");async function i2(e){return(await Ic()).streams.info(e)}a(i2,"getStreamInfo");function o2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(o2,"createSubjectName");async function Cc(){if(bc)return bc;if(bc=(await Ic())?.nc?.info?.server_name,bc===void 0)throw new Error("Unable to get jetstream manager server name");return bc}a(Cc,"getJsmServerName");async function a2(){let e=await Ic(),t=await Cc(),r=await oC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=c2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(a2,"updateLocalStreams");function c2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=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(c2,"updateStreamLimits")});var M_=T((uue,SC)=>{"use strict";var Lo=Gl(),Do=Lw(),u2=G(),l2=require("uuid").v4,cue=require("clone"),D_=un(),Uo=b(),_2=require("util"),Vn=_s(),{handleHDBError:jt,hdb_errors:d2}=j(),{HDB_ERROR_MSGS:L_,HTTP_STATUS_CODES:Zt}=d2,{SchemaEventMsg:U_}=ds(),hC=dt(),{getDatabases:f2}=(fe(),Z(Ce)),{transformReq:Mo}=$();SC.exports={createSchema:E2,createSchemaStructure:mC,createTable:h2,createTableStructure:pC,createAttribute:R2,dropSchema:m2,dropTable:p2,dropAttribute:S2,getBackup:g2};async function E2(e){let t=await mC(e);return D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),t}a(E2,"createSchema");async function mC(e){let t=Lo.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Mo(e),!await Do.checkSchemaExists(e.schema))throw jt(new Error,L_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Vn.createSchema(e),`database '${e.schema}' successfully created`}a(mC,"createSchemaStructure");async function h2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await pC(e)}a(h2,"createTable");async function pC(e){let t=Lo.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo.validateTableResidence(e.residence),!await Do.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,L_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,L_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:l2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Vn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await Vn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(pC,"createTableStructure");async function m2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Lo.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let n=await Do.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,n,!0);let i=await Do.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Vn.dropSchema(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),await hC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(m2,"dropSchema");async function p2(e){let t=Lo.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);return await Vn.dropTable(e),await hC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(p2,"dropTable");async function S2(e){let t=Lo.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let r=await Do.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await Vn.dropAttribute(e),T2(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw u2.error(`Got an error deleting attribute ${_2.inspect(e)}.`),s}}a(S2,"dropAttribute");function T2(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(T2,"dropAttributeFromGlobal");async function R2(e){Mo(e);let t=f2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await Vn.createAttribute(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(R2,"createAttribute");function g2(e){return Vn.getBackup(e)}a(g2,"getBackup")});var RC=T((_ue,TC)=>{"use strict";var{OPERATIONS_ENUM:A2}=b(),Sp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=A2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};TC.exports=Sp});var Tp=T((Eue,bC)=>{"use strict";var O2=_s(),fue=RC(),P_=$(),v_=b(),N2=X(),{handleHDBError:gC,hdb_errors:b2}=j(),{HDB_ERROR_MSGS:AC,HTTP_STATUS_CODES:OC}=b2,y2=Object.values(v_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),NC="To use this operation audit log must be enabled in harperdb-config.yaml";bC.exports=I2;async function I2(e){if(P_.isEmpty(e.schema))throw new Error(AC.SCHEMA_REQUIRED_ERR);if(P_.isEmpty(e.table))throw new Error(AC.TABLE_REQUIRED_ERR);if(!N2.get(v_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw gC(new Error,NC,OC.BAD_REQUEST,v_.LOG_LEVELS.ERROR,NC,!0);let t=P_.checkSchemaTableExist(e.schema,e.table);if(t)throw gC(new Error,t,OC.NOT_FOUND,v_.LOG_LEVELS.ERROR,t,!0);if(!P_.isEmpty(e.search_type)&&y2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await O2.readAuditLog(e)}a(I2,"readAuditLog")});var IC=T((mue,yC)=>{"use strict";var{OPERATIONS_ENUM:w2}=b(),Rp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=w2.GET_BACKUP,this.schema=t,this.table=r}};yC.exports=Rp});var LC=T((Rue,CC)=>{"use strict";var C2=_s(),Sue=IC(),gp=$(),L2=b(),Tue=X(),{handleHDBError:D2,hdb_errors:U2}=j(),{HDB_ERROR_MSGS:wC,HTTP_STATUS_CODES:M2}=U2;CC.exports=P2;async function P2(e){if(gp.isEmpty(e.schema))throw new Error(wC.SCHEMA_REQUIRED_ERR);if(gp.isEmpty(e.table))throw new Error(wC.TABLE_REQUIRED_ERR);let t=gp.checkSchemaTableExist(e.schema,e.table);if(t)throw D2(new Error,t,M2.NOT_FOUND,L2.LOG_LEVELS.ERROR,t,!0);return await C2.getBackup(read_audit_log_object)}a(P2,"getBackup")});var BC=T((Aue,vC)=>{var $n=require("validate.js"),UC=Fe(),Po=b(),{handleHDBError:v2,hdb_errors:B2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:H2}=B2,Ap=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),q2={STRUCTURE_USER:"structure_user"},DC=Object.values(Po.ROLE_TYPES_ENUM),F2="attribute_permissions",G2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,x2=[F2,...Object.values(vo)],MC=[vo.READ,vo.INSERT,vo.UPDATE],k2=[G2,...MC];function V2(e){let t=Ap();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,PC(e,t)}a(V2,"addRoleValidation");function $2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,PC(e,t)}a($2,"alterRoleValidation");function Y2(e){let t=Ap();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,UC.validateObject(e,t)}a(Y2,"dropRoleValidation");var K2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function PC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)K2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=UC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=W2(e);o&&st(o,r),DC.forEach(c=>{e.permission[c]&&!$n.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(DC.indexOf(o)<0){if(o===q2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{x2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{$n.isDefined(_[l])?$n.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),$n.isDefined(_.attribute_permissions)){if(!$n.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!k2.includes(p)&&p!==vo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!$n.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}MC.forEach(p=>{$n.isDefined(E[p])?$n.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Q2(r)}a(PC,"customValidate");vC.exports={addRoleValidation:V2,alterRoleValidation:$2,dropRoleValidation:Y2};function W2(e){let{operation:t,permission:r}=e;if(t===Po.OPERATIONS_ENUM.ADD_ROLE||t===Po.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Po.ROLE_TYPES_ENUM.SUPER_USER:Po.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(W2,"validateNoSUPerms");function Q2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return v2(new Error,s,H2.BAD_REQUEST)}else return null}a(Q2,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var wp=T((Nue,GC)=>{"use strict";var HC=Gr(),qC=Fr(),z2=Oi(),Np=BC(),bp=un(),J2=require("uuid").v4,X2=require("util"),B_=b(),j2=$(),yp=qC.searchByValue,Z2=qC.searchByHash,e4=X2.promisify(z2.delete),t4=Bs(),r4=No(),{hdb_errors:s4,handleHDBError:Bo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:H_}=s4,{UserEventMsg:Ip}=ds();GC.exports={addRole:n4,alterRole:i4,dropRole:o4,listRoles:a4};function Op(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(Op,"scrubRoleDetails");async function n4(e){let t=Np.addRoleValidation(e);if(t)throw t;e=Op(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await yp(r)||[])}catch(i){throw Bo(i)}if(s&&s.length>0)throw Bo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),H_.CONFLICT,void 0,void 0,!0);e.id||(e.id=J2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await HC.insert(n),bp.signalUserChange(new Ip(process.pid)),e=Op(e),e}a(n4,"addRole");async function i4(e){let t=Np.alterRoleValidation(e);if(t)throw t;e=Op(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await HC.update(r)}catch(n){throw Bo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Bo(new Error,"Invalid role id",H_.BAD_REQUEST,void 0,void 0,!0);return await bp.signalUserChange(new Ip(process.pid)),e}a(i4,"alterRole");async function o4(e){let t=Np.dropRoleValidation(e);if(t)throw Bo(new Error,t,H_.BAD_REQUEST,void 0,void 0,!0);let r=new r4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await Z2(r));if(s.length===0)throw Bo(new Error,FC.ROLE_NOT_FOUND,H_.NOT_FOUND,void 0,void 0,!0);let n=new t4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await yp(n)),o=!1;if(j2.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await e4(c),bp.signalUserChange(new Ip(process.pid)),`${s[0].role} successfully deleted`}a(o4,"dropRole");async function a4(){return yp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(a4,"listRoles")});var $C=T((yue,VC)=>{"use strict";var c4=X(),Yn=require("joi"),u4=Fe(),xC=require("moment"),l4=require("fs-extra"),Cp=require("path"),_4=require("lodash"),Lc=b(),{LOG_LEVELS:Di}=b(),d4="YYYY-MM-DD hh:mm:ss",f4=Cp.resolve(__dirname,"../logs");VC.exports=function(e){return u4.validateBySchema(e,E4)};var E4=Yn.object({from:Yn.custom(kC),until:Yn.custom(kC),level:Yn.valid(Di.NOTIFY,Di.FATAL,Di.ERROR,Di.WARN,Di.INFO,Di.DEBUG,Di.TRACE),order:Yn.valid("asc","desc"),limit:Yn.number().min(1),start:Yn.number().min(0),log_name:Yn.custom(h4)});function kC(e,t){if(xC(e,xC.ISO_8601).format(d4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(kC,"validateDatetime");function h4(e,t){if(_4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=c4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Cp.join(f4,Lc.LOG_NAMES.INSTALL):Cp.join(s,n);return l4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(h4,"validateReadLogPath")});var Dp=T((wue,KC)=>{"use strict";var q_=b(),m4=G(),p4=X(),S4=$C(),Lp=require("path"),YC=require("fs-extra"),{once:T4}=require("events"),{handleHDBError:R4,hdb_errors:g4}=j(),{PACKAGE_ROOT:A4}=b(),O4=Lp.join(A4,"logs"),N4=1e3,b4=200;KC.exports=y4;async function y4(e){let t=S4(e);if(t)throw R4(t,t.message,g4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=p4.get(q_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?q_.LOG_NAMES.HDB:e.log_name,n=s===q_.LOG_NAMES.INSTALL?Lp.join(O4,q_.LOG_NAMES.INSTALL):Lp.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?N4:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(YC.statSync(n).size-(h+5)*b4,0));let S=YC.createReadStream(n,{start:p});S.on("error",F=>{m4.error(F)});let A=0,I=[],N="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),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=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Kn(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Kn(F,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await T4(S,"close"),I}a(y4,"readLog");function Kn(e,t,r){t==="desc"?I4(e,r):t==="asc"?w4(e,r):r.push(e)}a(Kn,"pushLineToResult");function I4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(I4,"insertDescending");function w4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(w4,"insertAscending")});var G_=T((Mue,JC)=>{"use strict";var Up=require("joi"),{string:F_,boolean:WC,date:C4}=Up.types(),L4=Fe(),{validateSchemaExists:Lue,validateTableExists:Due,validateSchemaName:Uue}=Us(),D4=b(),U4=ke(),QC=X();QC.initSync();var M4=F_.invalid(QC.get(D4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(U4.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),zC={operation:F_.valid("add_node","update_node"),node_name:M4,subscriptions:Up.array().items({table:F_.optional(),schema:F_.required(),subscribe:WC.required(),publish:WC.required().custom(v4),start_time:C4.iso()}).min(1).required()};function P4(e){return L4.validateBySchema(e,Up.object(zC))}a(P4,"addUpdateNodeValidator");function v4(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(v4,"checkForFalsy");JC.exports={addUpdateNodeValidator:P4,validation_schema:zC}});var jC=T((vue,XC)=>{var B4=Fe(),H4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};XC.exports=function(e){return B4.validateObject(e,H4)}});var Pp=T((Bue,ZC)=>{"use strict";var q4=b().OPERATIONS_ENUM,Mp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=q4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ZC.exports=Mp});var tL=T((que,eL)=>{"use strict";var F4={OPERATION:"operation",REFRESH:"refresh"},vp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Bp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};eL.exports={JWTTokens:vp,TOKEN_TYPE_ENUM:F4,JWTRSAKeys:Bp}});var Mc=T((Gue,iL)=>{"use strict";var Uc=require("jsonwebtoken"),Hp=require("fs-extra"),qp=$(),$r=b(),{handleHDBError:er,hdb_errors:G4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=G4,Dc=G(),rL=Zl(),xp=xr(),x4=Gr().update,k4=Pp(),V4=un(),{UserEventMsg:$4}=ds(),Wn=X();Wn.initSync();var Fp=require("path"),{JWTTokens:Y4,JWTRSAKeys:K4,TOKEN_TYPE_ENUM:x_}=tL(),W4=Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Q4=Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",k_="RS256",Gp;iL.exports={createTokens:z4,validateOperationToken:X4,refreshOperationToken:J4,validateRefreshToken:nL};async function z4(e){if(qp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(qp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await xp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Dc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await V_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await sL(i,r.private_key,r.passphrase),c=await Uc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Q4,algorithm:k_,subject:x_.REFRESH}),u=rL.hash(c),_=new k4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await x4(_)}catch(f){Dc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return V4.signalUserChange(new $4(process.pid)),new Y4(o,c)}a(z4,"createTokens");async function sL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:W4,algorithm:k_,subject:x_.OPERATION})}a(sL,"signOperationToken");async function V_(){if(Gp===void 0)try{let e=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Fp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Hp.readFile(e)).toString(),n=(await Hp.readFile(t)).toString(),i=(await Hp.readFile(r)).toString();Gp=new K4(i,n,s)}catch(e){throw Dc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Gp}a(V_,"getJWTRSAKeys");async function J4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await nL(e.refresh_token);let t=await V_(),r=await Uc.decode(e.refresh_token);return{operation_token:await sL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(J4,"refreshOperationToken");async function X4(e){try{let t=await V_(),r=await Uc.verify(e,t.public_key,{algorithms:k_,subject:x_.OPERATION});return await xp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Dc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(X4,"validateOperationToken");async function nL(e){let t;try{let r=await V_(),s=await Uc.verify(e,r.public_key,{algorithms:k_,subject:x_.REFRESH});t=await xp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Dc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!rL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(nL,"validateRefreshToken")});var kp=T((Vue,cL)=>{"use strict";var j4=jC(),Ho=require("passport"),Z4=require("passport-local").Strategy,e3=require("passport-http").BasicStrategy,t3=require("util"),r3=xr(),aL=t3.callbackify(r3.findAndValidateUser),kue=dr(),s3=b(),oL=Mc();Ho.use(new Z4(function(e,t,r){aL(e,t,r)}));Ho.use(new e3(function(e,t,r){aL(e,t,r)}));Ho.serializeUser(function(e,t){t(null,e)});Ho.deserializeUser(function(e,t){t(null,e)});function n3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Ho.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===s3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?oL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):oL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Ho.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(n3,"authorize");function i3(e,t){let r=j4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(i3,"checkPermissions");cL.exports={authorize:n3,checkPermissions:i3}});var qo=T((Yue,uL)=>{"use strict";var Vp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},$p=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};uL.exports={Node:Vp,NodeSubscription:$p}});var _L=T((Wue,lL)=>{"use strict";var o3=b().OPERATIONS_ENUM,Yp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=o3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};lL.exports=Yp});var Pc=T((zue,dL)=>{"use strict";var Kp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Wp=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};dL.exports={RemotePayloadObject:Kp,RemotePayloadSubscription:Wp}});var EL=T((Xue,fL)=>{"use strict";var Qp=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};fL.exports=Qp});var pL=T((rle,mL)=>{"use strict";var a3=EL(),Zue=ze(),hL=Ue(),c3=G(),{getSchemaPath:ele,getTransactionAuditStorePath:tle}=ve(),{getDatabases:u3}=(fe(),Z(Ce));mL.exports=l3;async function l3(e){let t=new a3;try{let r=u3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await hL.environmentDataSize(schema_path,e.name),o=await hL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){c3.warn(`unable to stat table dbi due to ${r}`)}return t}a(l3,"lmdbGetTableSize")});var TL=T((nle,SL)=>{"use strict";var zp=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};SL.exports=zp});var Fo=T((cle,OL)=>{"use strict";var _3=require("fs-extra"),d3=require("path"),Ft=require("systeminformation"),Qn=G(),f3=dt(),Jp=ke(),Y_=b(),E3=pL(),AL=Si(),{getThreadInfo:RL}=Ze(),oS=X();oS.initSync();var h3=TL(),{openEnvironment:ole}=Ue(),{getSchemaPath:ale}=ve(),{database:m3}=(fe(),Z(Ce)),$_;OL.exports={getHDBProcessInfo:eS,getNetworkInfo:rS,getDiskInfo:tS,getMemoryInfo:Zp,getCPUInfo:jp,getTimeInfo:Xp,getSystemInformation:sS,systemInformation:p3,getTableSize:nS,getMetrics:iS};function Xp(){return Ft.time()}a(Xp,"getTimeInfo");async function jp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Ft.cpu();l.cpu_speed=await Ft.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 Ft.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Qn.error(`error in getCPUInfo: ${e}`),{}}}a(jp,"getCPUInfo");async function Zp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ft.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Qn.error(`error in getMemoryInfo: ${e}`),{}}}a(Zp,"getMemoryInfo");async function eS(){let e={core:[],clustering:[]};try{let t=await Ft.processes(),r;try{r=Number.parseInt(await _3.readFile(d3.join(oS.get(Y_.CONFIG_PARAMS.ROOTPATH),Y_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Y_.NODE_ERROR_CODES.ENOENT)Qn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Qn.error(`error in getHDBProcessInfo: ${t}`),e}}a(eS,"getHDBProcessInfo");async function tS(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ft.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Ft.fsStats();return e.read_write=_,e.size=await Ft.fsSize(),e}catch(t){return Qn.error(`error in getDiskInfo: ${t}`),e}}a(tS,"getDiskInfo");async function rS(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ft.networkInterfaceDefault(),e.latency=await Ft.inetChecksite("google.com"),(await Ft.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 Ft.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Qn.error(`error in getNetworkInfo: ${t}`),e}}a(rS,"getNetworkInfo");async function sS(){if($_!==void 0)return $_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ft.osInfo();e=c;let u=await Ft.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,$_=e,$_}catch(t){return Qn.error(`error in getSystemInformation: ${t}`),e}}a(sS,"getSystemInformation");async function nS(){let e=[],t=await AL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await E3(s));return e}a(nS,"getTableSize");async function iS(){let e=await AL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=m3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Qn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(iS,"getMetrics");async function gL(){if(oS.get(Y_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await f3.getNATSReferences(),r=await t.streams.info(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Jp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Jp.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(gL,"getNatsStreamInfo");async function p3(e){let t=new h3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await sS(),t.time=Xp(),t.cpu=await jp(),t.memory=await Zp(),t.disk=await tS(),t.network=await rS(),t.harperdb_processes=await eS(),t.table_size=await nS(),t.metrics=await iS(),t.threads=await RL(),t.replication=await gL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await sS();break;case"time":t.time=Xp();break;case"cpu":t.cpu=await jp();break;case"memory":t.memory=await Zp();break;case"disk":t.disk=await tS();break;case"network":t.network=await rS();break;case"harperdb_processes":t.harperdb_processes=await eS();break;case"table_size":t.table_size=await nS();break;case"database_metrics":case"metrics":t.metrics=await iS();break;case"threads":t.threads=await RL();break;case"replication":t.replication=await gL();break;default:break}return t}a(p3,"systemInformation")});var aS=T((lle,NL)=>{"use strict";NL.exports={version:S3,printVersion:T3};var K_=Rc();function S3(){if(K_)return K_.version}a(S3,"version");function T3(){K_&&console.log(`HarperDB Version ${K_.version}`)}a(T3,"printVersion")});var Gs=T((Ele,wL)=>{"use strict";var R3=Gr(),cS=$(),g3=require("util"),Ui=b(),bL=X();bL.initSync();var A3=kp(),yL=Fr(),{Node:dle,NodeSubscription:fle}=qo(),O3=No(),N3=_L(),{RemotePayloadObject:b3,RemotePayloadSubscription:y3}=Pc(),{handleHDBError:I3,hdb_errors:w3}=j(),{HTTP_STATUS_CODES:C3,HDB_ERROR_MSGS:L3}=w3,D3=Bs(),U3=Fo(),M3=aS(),{getDatabases:P3}=(fe(),Z(Ce)),v3=g3.promisify(A3.authorize),B3=yL.searchByHash,H3=yL.searchByValue;wL.exports={authHeaderToUser:q3,isEmpty:F3,getNodeRecord:G3,upsertNodeRecord:x3,buildNodePayloads:k3,checkClusteringEnabled:V3,getAllNodeRecords:$3,getSystemInfo:Y3,reverseSubscription:IL};async function q3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await v3(t,null),e}a(q3,"authHeaderToUser");function F3(e){return e==null}a(F3,"isEmpty");async function G3(e){let t=new O3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return B3(t)}a(G3,"getNodeRecord");async function x3(e){let t=new N3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return R3.upsert(t)}a(x3,"upsertNodeRecord");function IL(e){if(cS.isEmpty(e.subscribe)||cS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(IL,"reverseSubscription");function k3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=cS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=IL(c),E=P3()[u]?.[_],h=new y3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new b3(r,t,n,s)}a(k3,"buildNodePayloads");function V3(){if(!bL.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw I3(new Error,L3.CLUSTERING_NOT_ENABLED,C3.BAD_REQUEST,void 0,void 0,!0)}a(V3,"checkClusteringEnabled");async function $3(){let e=new D3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await H3(e))}a($3,"getAllNodeRecords");async function Y3(){let e=await U3.getSystemInformation();return{hdb_version:M3.version(),node_version:e.node_version,platform:e.platform}}a(Y3,"getSystemInfo")});var uS=T((mle,BL)=>{"use strict";var W_=dt(),CL=$(),LL=ke(),DL=b(),Q_=G(),UL=M_(),K3=Cm(),{RemotePayloadObject:W3}=Pc(),{handleHDBError:ML,hdb_errors:Q3}=j(),{HTTP_STATUS_CODES:PL}=Q3,{NodeSubscription:vL}=qo();BL.exports=z3;async function z3(e,t){let r;try{r=await W_.request(`${t}.${LL.REQUEST_SUFFIX}`,new W3(DL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Q_.trace("Response from remote describe all request:",r)}catch(o){Q_.error(`addNode received error from describe all request to remote node: ${o}`);let c=W_.requestErrorHandler(o,"add_node",t);throw ML(new Error,c,PL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===LL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw ML(new Error,o,PL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===DL.SYSTEM_SCHEMA_NAME){await W_.createLocalTableStream(c,u);let h=new vL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=CL.doesSchemaExist(c),l=s[c]!==void 0,d=u?CL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Q_.trace(`addNode creating schema: ${c}`),await UL.createSchema({operation:"create_schema",schema:c})),!d&&f){Q_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new K3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await UL.createTable(h)}await W_.createLocalTableStream(c,u);let E=new vL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(z3,"reviewSubscriptions")});var Hc=T((Sle,FL)=>{"use strict";var{handleHDBError:z_,hdb_errors:J3}=j(),{HTTP_STATUS_CODES:J_}=J3,{addUpdateNodeValidator:X3}=G_(),vc=G(),qL=b(),HL=ke(),j3=$(),lS=dt(),Bc=Gs(),Z3=X(),eX=uS(),{Node:tX,NodeSubscription:rX}=qo(),{broadcast:sX}=Ze(),nX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",iX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",oX=Z3.get(qL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=aX;async function aX(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=X3(e);if(r)throw z_(r,r.message,J_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Bc.getNodeRecord(s);if(!j3.isEmptyOrZeroLength(d))throw z_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,J_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await eX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=nX,o;let c=Bc.buildNodePayloads(n,oX,qL.OPERATIONS_ENUM.ADD_NODE,await Bc.getSystemInfo());vc.trace("addNode sending remote payload:",c);let u;try{u=await lS.request(`${s}.${HL.REQUEST_SUFFIX}`,c)}catch(d){vc.error(`addNode received error from request: ${d}`);let f=lS.requestErrorHandler(d,"add_node",s);throw z_(new Error,f,J_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===HL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw z_(new Error,d,J_.INTERNAL_SERVER_ERROR,"error",d)}vc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];vc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await lS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new rX(E.schema,E.table,E.publish,E.subscribe))}let l=new tX(s,_,u.system_info);return await Bc.upsertNodeRecord(l),sX({type:"nats_update"}),i.length>0?o.message=iX:o.message=`Successfully added '${s}' to manifest`,o}a(aX,"addNode")});var dS=T((Rle,kL)=>{"use strict";var{handleHDBError:X_,hdb_errors:cX}=j(),{HTTP_STATUS_CODES:j_}=cX,{addUpdateNodeValidator:uX}=G_(),qc=G(),xL=b(),GL=ke(),lX=$(),_S=dt(),Fc=Gs(),_X=X(),{cloneDeep:dX}=require("lodash"),fX=uS(),{NodeSubscription:EX}=qo(),{broadcast:hX}=Ze(),mX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",pX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",SX=_X.get(xL.CONFIG_PARAMS.CLUSTERING_NODENAME);kL.exports=TX;async function TX(e){qc.trace("updateNode called with:",e),Fc.checkClusteringEnabled();let t=uX(e);if(t)throw X_(t,t.message,j_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=dX(await Fc.getNodeRecord(r));if(lX.isEmptyOrZeroLength(s))throw X_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,j_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await fX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=mX,o;let c=Fc.buildNodePayloads(n,SX,xL.OPERATIONS_ENUM.UPDATE_NODE,await Fc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await _S.request(`${r}.${GL.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=_S.requestErrorHandler(_,"update_node",r);throw X_(new Error,l,j_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===GL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw X_(new Error,_,j_.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await _S.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await RX(s[0],n,u.system_info),i.length>0?o.message=pX:o.message=`Successfully updated '${r}'`,o}a(TX,"updateNode");async function RX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new EX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Fc.upsertNodeRecord(s),hX({type:"nats_update"})}a(RX,"updateNodeTable")});var WL=T((Ale,KL)=>{"use strict";var YL=require("joi"),{string:VL}=YL.types(),gX=Fe(),$L=b(),AX=X(),OX=ke();KL.exports=NX;function NX(e){let t=VL.invalid(AX.get($L.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(OX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=YL.object({operation:VL.valid($L.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return gX.validateBySchema(e,r)}a(NX,"removeNodeValidator")});var xc=T((Nle,ZL)=>{"use strict";var{handleHDBError:QL,hdb_errors:bX}=j(),{HTTP_STATUS_CODES:zL}=bX,yX=WL(),Gc=G(),JL=Gs(),IX=$(),Z_=b(),XL=ke(),jL=dt(),wX=X(),{RemotePayloadObject:CX}=Pc(),{NodeSubscription:LX}=qo(),DX=dc(),UX=Oi(),{broadcast:MX}=Ze(),PX=wX.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);ZL.exports=vX;async function vX(e){Gc.trace("removeNode called with:",e),JL.checkClusteringEnabled();let t=yX(e);if(t)throw QL(t,t.message,zL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await JL.getNodeRecord(r);if(IX.isEmptyOrZeroLength(s))throw QL(new Error,`Node '${r}' was not found.`,zL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new CX(Z_.OPERATIONS_ENUM.REMOVE_NODE,PX,[]),i,o=!1;try{i=await jL.request(`${r}.${XL.REQUEST_SUFFIX}`,n),Gc.trace("Remove node reply from remote node:",r,i)}catch(u){Gc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Gc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new LX(l.schema,l.table,!1,!1);await jL.updateWorkStream(d,r)}let c=new DX(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await UX.deleteRecord(c),MX({type:"nats_update"}),i?.status===XL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Gc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(vX,"removeNode")});var rD=T((yle,tD)=>{"use strict";var eD=require("joi"),{string:BX,array:HX}=eD.types(),qX=Fe(),FX=G_();tD.exports=GX;function GX(e){let t=eD.object({operation:BX.valid("configure_cluster").required(),connections:HX.items(FX.validation_schema).required()});return qX.validateBySchema(e,t)}a(GX,"configureClusterValidator")});var fS=T((wle,aD)=>{"use strict";var xX=b(),ed=G(),kX=$(),VX=xc(),$X=Hc(),sD=Gs(),YX=rD(),{handleHDBError:nD,hdb_errors:KX}=j(),{HTTP_STATUS_CODES:iD}=KX,WX="Configure cluster complete.",QX="Failed to configure the cluster. Check the logs for more details.",zX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";aD.exports=JX;async function JX(e){ed.trace("configure cluster called with:",e),sD.checkClusteringEnabled();let t=YX(e);if(t)throw nD(t,t.message,iD.BAD_REQUEST,void 0,void 0,!0);let r=await sD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(oD(VX,{operation:xX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);ed.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(oD($X,E,E.node_name))}let c=await Promise.allSettled(i);ed.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(ed.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(kX.isEmptyOrZeroLength(u))return{message:WX,connections:_};if(l)return{message:zX,failed_nodes:u,connections:_};throw nD(new Error,QX,iD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(JX,"configureCluster");async function oD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(oD,"functionWrapper")});var uD=T((Lle,cD)=>{"use strict";var td=require("joi"),XX=Fe(),{validateSchemaExists:jX,validateTableExists:ZX,validateSchemaName:ej}=Us(),tj=td.object({operation:td.string().valid("purge_stream"),schema:td.string().custom(jX).custom(ej).required(),table:td.string().custom(ZX).required()});function rj(e){return XX.validateBySchema(e,tj)}a(rj,"purgeStreamValidator");cD.exports=rj});var ES=T((Ule,lD)=>{"use strict";var{handleHDBError:sj,hdb_errors:nj}=j(),{HTTP_STATUS_CODES:ij}=nj,oj=uD(),aj=dt(),cj=Gs();lD.exports=uj;async function uj(e){let t=oj(e);if(t)throw sj(t,t.message,ij.BAD_REQUEST,void 0,void 0,!0);cj.checkClusteringEnabled();let{schema:r,table:s}=e;return await aj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(uj,"purgeStream")});var sd=T((Ple,mD)=>{"use strict";var mS=Gs(),lj=dt(),fD=X(),rd=b(),Mi=ke(),_j=$(),hS=G(),{RemotePayloadObject:dj}=Pc(),{ErrorCode:_D}=require("nats"),dD=fD.get(rd.CONFIG_PARAMS.CLUSTERING_ENABLED),ED=fD.get(rd.CONFIG_PARAMS.CLUSTERING_NODENAME);mD.exports={clusterStatus:fj,buildNodeStatus:hD};async function fj(){let e={node_name:ED,is_enabled:dD,connections:[]};if(!dD)return e;let t=await mS.getAllNodeRecords();if(_j.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(hD(t[s],e.connections));return await Promise.allSettled(r),e}a(fj,"clusterStatus");async function hD(e,t){let r=e.name,s=new dj(rd.OPERATIONS_ENUM.CLUSTER_STATUS,ED,void 0,await mS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await lj.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,hS.error(`Error getting node status from ${r} `,n))}catch(u){hS.warn(`Error getting node status from ${r}`,u),u.code===_D.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===_D.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Ej(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==rd.PRE_4_0_0_VERSION&&await mS.upsertNodeRecord(u)}catch(u){hS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(hD,"buildNodeStatus");function Ej(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Ej,"NodeStatusObject")});var SS=T((Ble,pD)=>{"use strict";var{handleHDBError:hj,hdb_errors:mj}=j(),{HTTP_STATUS_CODES:pj}=mj,Sj=dt(),Tj=Gs(),pS=$(),nd=require("joi"),Rj=Fe(),gj=2e3,Aj=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});pD.exports=Oj;async function Oj(e){Tj.checkClusteringEnabled();let t=Rj.validateBySchema(e,Aj);if(t)throw hj(t,t.message,pj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||pS.autoCastBoolean(s),o=n===void 0||pS.autoCastBoolean(n),c={nodes:[]},u=await Sj.getServerList(r??gj),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:pS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Oj,"clusterNetwork")});var gD=T((qle,RD)=>{"use strict";var TS=require("joi"),SD=Fe(),{route_constraints:TD}=mE();RD.exports={setRoutesValidator:Nj,deleteRoutesValidator:bj};function Nj(e){let t=TS.object({server:TS.valid("hub","leaf").required(),routes:TD.required()});return SD.validateBySchema(e,t)}a(Nj,"setRoutesValidator");function bj(e){let t=TS.object({routes:TD.required()});return SD.validateBySchema(e,t)}a(bj,"deleteRoutesValidator")});var gS=T((Gle,bD)=>{"use strict";var Pi=hr(),RS=$(),id=b(),AD=gD(),{handleHDBError:OD,hdb_errors:yj}=j(),{HTTP_STATUS_CODES:ND}=yj,Ij="cluster routes successfully set",wj="cluster routes successfully deleted";bD.exports={setRoutes:Cj,getRoutes:Lj,deleteRoutes:Dj};function Cj(e){let t=AD.setRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=RS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Ij,set:o,skipped:i}}a(Cj,"setRoutes");function Lj(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Lj,"getRoutes");function Dj(e){let t=AD.deleteRoutesValidator(e);if(t)throw OD(t,t.message,ND.BAD_REQUEST,void 0,void 0,!0);let r=Pi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=RS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=RS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:wj,deleted:i,skipped:o}}a(Dj,"deleteRoutes")});var ID=T((kle,yD)=>{"use strict";var kc=require("alasql"),vi=require("recursive-iterator"),Ts=G(),Uj=$(),Vc=b(),AS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Pj(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Vc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Vc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Vc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Mj(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Vc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new kc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Mj(e){return e.filter(t=>t[Vc.PERMS_CRUD_ENUM.READ])}a(Mj,"filterReadRestrictedAttrs");function Pj(e,t,r,s,n){vj(e,t,r,s,n)}a(Pj,"interpretAST");function $c(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a($c,"addSchemaTableToMap");function vj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof kc.yy.Insert?Fj(e,t,r):e instanceof kc.yy.Select?Bj(e,t,r,s,n):e instanceof kc.yy.Update?Hj(e,t,r):e instanceof kc.yy.Delete?qj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(vj,"getRecordAttributesAST");function Bj(e,t,r,s,n){if(!e){Ts.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Uj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{$c(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),$c(c.table,t,r,s,n)});let o=new vi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ts.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new vi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new vi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new vi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Bj,"getSelectAttributes");function Hj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(Hj,"getUpdateAttributes");function qj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new vi(e.where),n=e.table.databaseid;$c(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(qj,"getDeleteAttributes");function Fj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;$c(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.into.tableid,n,i.columnid,t,r)}a(Fj,"getInsertAttributes");function OS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(OS,"pushAttribute");yD.exports=AS});var yS=T(($le,DD)=>{var od=rc(),wD=require("chalk"),br=G(),CD=require("prompt"),{promisify:Gj}=require("util"),NS=b(),xj=require("fs-extra"),kj=require("path"),Vj=$(),$j=aS(),LD=X();LD.initSync();var Yj=require("moment"),Kj=Gj(CD.get),Wj=kj.join(LD.getHdbBasePath(),NS.LICENSE_KEY_DIR_NAME,NS.LICENSE_FILE_NAME,NS.LICENSE_FILE_NAME);DD.exports={getFingerprint:zj,setLicense:Qj,parseLicense:bS,register:Jj,getRegistrationInfo:jj};async function Qj(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await bS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw br.error(r),br.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Qj,"setLicense");async function zj(){let e={};try{e=await od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(zj,"getFingerprint");async function bS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=od.validateLicense(e,t);if(br.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(br.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(br.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{br.info("writing license to disk"),await xj.writeFile(Wj,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(bS,"parseLicense");async function Jj(){let e=await Xj();return bS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Jj,"register");async function Xj(){let e=await od.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:wD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:wD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{CD.start()}catch(s){br.error(s)}let r;try{r=await Kj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Xj,"promptForRegistration");async function jj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await od.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Vj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=$j.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Yj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(jj,"getRegistrationInfo")});var MD=T((Kle,UD)=>{"use strict";var Zj=ke(),IS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Zj.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};UD.exports=IS});var BD=T((Qle,vD)=>{"use strict";var PD=ke(),wS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+PD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+PD.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};vD.exports=wS});var qD=T((Jle,HD)=>{"use strict";var CS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};HD.exports=CS});var GD=T((jle,FD)=>{"use strict";var eZ=ke(),LS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+eZ.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=LS});var MS=T((e_e,VD)=>{"use strict";var Go=require("path"),ud=require("fs-extra"),tZ=MD(),rZ=BD(),sZ=qD(),nZ=GD(),DS=xr(),ko=$(),sr=hr(),cd=b(),Yc=ke(),{CONFIG_PARAMS:je}=cd,Kc=G(),Wc=X(),xD=an(),US=dt(),xo="clustering",iZ=1e4,kD=5;VD.exports={generateNatsConfig:aZ,removeNatsConfig:cZ,getHubConfigPath:oZ};function oZ(){let e=Wc.get(je.ROOTPATH);return Go.join(e,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER)}a(oZ,"getHubConfigPath");async function aZ(e=!1,t=void 0){Wc.initSync();let r=Wc.get(je.ROOTPATH),s=Go.join(r,xo,Yc.PID_FILES.HUB),n=Go.join(r,xo,Yc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Go.join(r,xo,Yc.NATS_CONFIG_FILES.HUB_SERVER),c=Go.join(r,xo,Yc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await US.checkNATSServerInstalled()||ld("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await DS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await DS.getClusterUser();(ko.isEmpty(A)||A.active!==!0)&&ld(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ad(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ad(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await ad(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===cd.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new nZ(te.username,xD.decrypt(te.hash))),N.push(new sZ(te.username,xD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!ko.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let F=new tZ(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=ko.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ud.writeJson(o,F),Kc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new rZ(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===cd.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ud.writeJson(c,B),Kc.trace(`Leaf server config written to ${c}`))}a(aZ,"generateNatsConfig");async function ad(e){let t=Wc.get(e);return ko.isEmpty(t)&&ld(`port undefined for '${e}'`),await ko.isPortTaken(t)&&ld(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(ad,"isPortAvailable");function ld(e){let t=`Error generating clustering config: ${e}`;Kc.error(t),console.error(t),process.exit(1)}a(ld,"generateNatsConfigError");async function cZ(e){let{port:t,config_file:r}=US.getServerConfig(e),{username:s,decrypt_hash:n}=await DS.getClusterUser(),i=0,o=2e3;for(;i<kD;){try{let _=await US.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Kc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=kD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await ko.async_set_timeout(o*(i*2))}let c="0".repeat(iZ),u=Go.join(Wc.get(je.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),Kc.notify(e,"started.")}a(cZ,"removeNatsConfig")});var zD=T((r_e,QD)=>{"use strict";var yr=X(),uZ=rc(),ae=b(),Qc=ke(),dn=require("path"),{PACKAGE_ROOT:dd}=b(),$D=X(),_d=$(),Vo="/dev/null",lZ=dn.join(dd,"launchServiceScripts"),YD=dn.join(dd,"utility/scripts"),_Z=dn.join(YD,ae.HDB_RESTART_SCRIPT),KD=dn.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Qc.NATS_BINARY_NAME);function WD(){let t=uZ.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 _d.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:dd}}a(WD,"generateMainServerConfig");var dZ=9930;function fZ(){yr.initSync(!0);let e=yr.get(ae.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.HUB_SERVER),r=dn.join(yr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=$D.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[yr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==dZ?"-"+s:""),script:KD,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 yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(fZ,"generateNatsHubServerConfig");var EZ=9940;function hZ(){yr.initSync(!0);let e=yr.get(ae.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Qc.NATS_CONFIG_FILES.LEAF_SERVER),r=dn.join(yr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=$D.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Qc.LOG_LEVEL_FLAGS[yr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==EZ?"-"+s:""),script:KD,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 yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(hZ,"generateNatsLeafServerConfig");function mZ(){yr.initSync();let e=dn.join(yr.get(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:lZ,autorestart:!1};return yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(mZ,"generateClusteringUpgradeV4ServiceConfig");function pZ(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return _d.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:YD},script:_Z}}a(pZ,"generateRestart");function SZ(){return{apps:[WD()]}}a(SZ,"generateAllServiceConfigs");QD.exports={generateAllServiceConfigs:SZ,generateMainServerConfig:WD,generateRestart:pZ,generateNatsHubServerConfig:fZ,generateNatsLeafServerConfig:hZ,generateClusteringUpgradeV4ServiceConfig:mZ}});var HS=T((i_e,cU)=>{"use strict";var Ae=b(),TZ=$(),fn=MS(),zc=dt(),xs=ke(),zn=zD(),fd=X(),Jn=G(),RZ=Gs(),{startWorker:JD,onMessageFromWorkers:gZ}=Ze(),AZ=Fo(),n_e=require("util"),OZ=require("child_process"),NZ=require("fs"),{execFile:bZ}=OZ,pe;cU.exports={enterPM2Mode:yZ,start:Xn,stop:PS,reload:jD,restart:ZD,list:vS,describe:tU,connect:En,kill:DZ,startAllServices:UZ,startService:BS,getUniqueServicesList:rU,restartAllServices:MZ,isServiceRegistered:sU,reloadStopStart:nU,restartHdb:eU,deleteProcess:CZ,startClusteringProcesses:oU,startClusteringThreads:aU,isHdbRestartRunning:LZ,isClusteringRunning:vZ,stopClustering:PZ,reloadClustering:BZ};var Jc=!1;gZ(e=>{e.type==="restart"&&fd.initSync(!0)});function yZ(){Jc=!0}a(yZ,"enterPM2Mode");function En(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Jn.setupConsoleLogging(),r&&t(r),e(s)})})}a(En,"connect");var nr,IZ=10,XD;function Xn(e,t=!1){if(Jc)return wZ(e);let r=bZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!XD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<IZ&&(NZ.existsSync(fn.getHubConfigPath())?Xn(e):(await fn.generateNatsConfig(!0),Xn(e),await new Promise(c=>setTimeout(c,3e3)),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=fd.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=xs.LOG_LEVELS[f]}if(xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Jn.OUTPUTS.STDERR:Jn.OUTPUTS.STDOUT;Jn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{XD=!0,nr&&(nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}nr.push(r)}a(Xn,"start");function wZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(wZ,"startWithPM2");function PS(e){if(!Jc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(PS,"stop");function jD(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(jD,"reload");function ZD(e){if(!Jc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(ZD,"restart");function CZ(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(CZ,"deleteProcess");async function eU(){await Xn(zn.generateRestart())}a(eU,"restartHdb");async function LZ(){let e=await vS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(LZ,"isHdbRestartRunning");function vS(){return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(vS,"list");function tU(e){return new Promise(async(t,r)=>{try{await En()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(tU,"describe");function DZ(){if(!Jc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await En()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(DZ,"kill");async function UZ(){try{await oU(),await aU(),await Xn(zn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(UZ,"startAllServices");async function BS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=zn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=zn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=zn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=zn.generateNatsHubServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=zn.generateNatsLeafServerConfig(),await Xn(r,t),await fn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=zn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Xn(r)}catch(r){throw pe?.disconnect(),r}}a(BS,"startService");async function rU(){try{let e=await vS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(rU,"getUniqueServicesList");async function MZ(e=[]){try{let t=!1,r=await rU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await ZD(o))}t&&await nU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(MZ,"restartAllServices");async function sU(e){if(nr?.find(r=>r.name===e))return!0;let t=await AZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(sU,"isServiceRegistered");async function nU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?fd.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):fd.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await tU(e),s=TZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await PS(e),await BS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await eU():await jD(e)}a(nU,"reloadStopStart");var iU;async function oU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await BS(r,e)}}a(oU,"startClusteringProcesses");async function aU(){iU=JD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await zc.createWorkQueueStream(xs.WORK_QUEUE_CONSUMER_NAMES),await zc.updateIngestStreamConsumer(),await zc.updateLocalStreams();let e=await RZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Jn.info("Starting clustering upgrade 4.0.0 process"),JD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(aU,"startClusteringThreads");async function PZ(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await iU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await PS(t)}}a(PZ,"stopClustering");async function vZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await sU(t)===!1)return!1}return!0}a(vZ,"isClusteringRunning");async function BZ(){await fn.generateNatsConfig(!0),await zc.reloadNATSHub(),await zc.reloadNATSLeaf(),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(BZ,"reloadClustering")});var pd=T((a_e,hU)=>{"use strict";var HZ=require("minimist"),{isMainThread:GS,parentPort:_U}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Xc}=Ve,ks=G(),xS=$(),Ed=MS(),$o=dt(),qS=ke(),dU=hr(),Vs=HS(),uU=Fo(),qZ=iE(),{restartWorkers:hd,onMessageByType:FZ}=Ze(),{handleHDBError:GZ,hdb_errors:xZ}=j(),{HTTP_STATUS_CODES:kZ}=xZ,md=X();md.initSync();var jc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,VZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",lU="Clustering is not enabled so cannot be restarted",$Z="Invalid service",Yo,Yr;hU.exports={restart:fU,restartService:kS};GS&&FZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?kS({service:e.workerType}):fU({operation:"restart"})});async function fU(e){Yr=Object.keys(e).length===0,Yo=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=HZ(process.argv);if(t.service){await kS(t);return}if(Yr&&!Yo){console.error(VZ);return}if(Yr&&console.log(jc),Yo){Vs.enterPM2Mode(),ks.notify(jc);let r=qZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return xS.isEmptyOrZeroLength(Object.keys(r))||dU.updateConfigValue(void 0,void 0,r,!0,!0),KZ(),jc}return GS?(ks.notify(jc),setTimeout(()=>{hd()},50)):_U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),jc}a(fU,"restart");async function kS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw GZ(new Error,$Z,kZ.BAD_REQUEST,void 0,void 0,!0);if(Yo=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!GS)return _U.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Xc.clustering:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}Yr&&console.log("Restarting clustering"),ks.notify("Restarting clustering"),await EU();break;case Xc.clustering_config:case Xc["clustering config"]:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=lU;break}Yr&&console.log("Restarting clustering_config"),ks.notify("Restarting clustering_config"),await Vs.reloadClustering();break;case"custom_functions":case"custom functions":case Xc.harperdb:case Xc.http_workers:if(Yr&&!Yo){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),ks.notify("Restarting http_workers"),Yr?await Vs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ks.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(kS,"restartService");async function YZ(){await $o.publishToStream(`${qS.SUBJECT_PREFIXES.TXN}.${qS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,qS.WORK_QUEUE_CONSUMER_NAMES.stream_name,$o.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(YZ,"postDummyNatsMsg");async function KZ(){await EU(),await Vs.restart(Ve.HDB_PROC_DESCRIPTOR),await xS.async_set_timeout(2e3),md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await FS(),Yr&&(await $o.closeConnection(),process.exit(0))}a(KZ,"restartPM2Mode");async function EU(){if(!dU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await uU.getHDBProcessInfo()).clustering.length===0)ks.trace("Clustering not running, restart will start clustering services"),await Ed.generateNatsConfig(!0),await Vs.startClusteringProcesses(),await Vs.startClusteringThreads(),await FS(),Yr&&await $o.closeConnection();else{await YZ(),await Ed.generateNatsConfig(!0),Yo?(ks.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await uU.getHDBProcessInfo()).clustering.forEach(n=>{ks.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await xS.async_set_timeout(3e3),await FS(),await $o.updateLocalStreams(),Yr&&await $o.closeConnection(),ks.trace("Restart clustering restarting ingest and reply service threads");let t=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=hd(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(EU,"restartClustering");async function FS(){await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(FS,"removeNatsConfig")});var yU=T((l_e,bU)=>{"use strict";var u_e=require("lodash"),ir=b(),{handleHDBError:mU,hdb_errors:WZ}=j(),{HDB_ERROR_MSGS:QZ,HTTP_STATUS_CODES:zZ}=WZ,VS=G();bU.exports={getRolePermissions:XZ};var Bi=Object.create(null),JZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),RU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),gU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),$S=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...gU(t,r,s,n)}),"table_perms_template"),pU=a((e,t=gU())=>({attribute_name:e,describe:NU(t),[Zc]:t[Zc],[YS]:t[YS],[KS]:t[KS]}),"attr_perms_template"),SU=a((e,t=!1)=>({attribute_name:e,describe:t,[Zc]:t}),"timestamp_attr_perms_template"),{READ:Zc,INSERT:YS,UPDATE:KS}=ir.PERMS_CRUD_ENUM,AU=Object.values(ir.PERMS_CRUD_ENUM),OU=[Zc,YS,KS];function XZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=jZ(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=JZ(s),Bi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw VS.error(s),VS.debug(r),mU(new Error,QZ.OUTDATED_PERMS_TRANSLATION_ERROR,zZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw VS.error(s),mU(new Error)}}}a(XZ,"getRolePermissions");function jZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=ZZ(t[i]);return}r[i]=RU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=e5(c,u);r[i].describe||AU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=$S()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=$S()})}),r}a(jZ,"translateRolePermissions");function ZZ(e){let t=RU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=$S(!0,!0,!0,!0,!0)}),t}a(ZZ,"createStructureUserPermissions");function e5(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ir.TIME_STAMP_NAMES.includes(d)&&(f=SU(d,l[Zc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=pU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=NU(l),n.attribute_permissions.push(l),c||t5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=SU(_):l=pU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=TU(n),n}else return e.describe=TU(e),e}a(e5,"getTableAttrPerms");function TU(e){return AU.filter(t=>e[t]).length>0}a(TU,"getSchemaTableDescribePerm");function NU(e){return OU.filter(t=>e[t]).length>0}a(NU,"getAttributeDescribePerm");function t5(e,t){OU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(t5,"checkForHashPerms")});var IU={};Qe(IU,{Resources:()=>Sd,keyArrayToString:()=>Ko,resetResources:()=>r5,resources:()=>jn});function r5(){return jn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,jn,eu=Te(()=>{fi();Sd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(r5,"resetResources");a(Ko,"keyArrayToString")});var Hi,WS=Te(()=>{Hi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var tu={};Qe(tu,{authentication:()=>vU,bypassAuth:()=>u5,login:()=>_5,logout:()=>d5,start:()=>l5});function u5(){PU=!0}async function vU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?o5?i5:[]:n5?s5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Hi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Td&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Td&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Td){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await CU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new gd.AuthAuditLog(E,h,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?wU.notify(S):wU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,Rd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,Rd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return c5&&(qi.get(h)||(qi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Zn({error:A.message},e)})}qi.set(s,d),a5&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):PU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,DU.getSuperUser)());Td&&(e.session.update=function(E){if(!u){u=(0,UU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.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")&&jn.loginPath?(f.status=302,f.headers.set("Location",jn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Hi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function l5({server:e,port:t}){e.request(vU,{port:t||"all"}),LU||(LU=!0,setInterval(()=>{qi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),MU.user.addListener(()=>{qi=new Map}))}async function _5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function d5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var DU,Rd,UU,Kr,It,gd,MU,wU,s5,n5,i5,o5,CU,Td,PU,a5,c5,qi,LU,Ad=Te(()=>{DU=D(xr());Mr();eu();Rd=D(Mc());fe();UU=require("uuid"),Kr=D(X()),It=D(b()),gd=D(G()),MU=D(nc());WS();Wo();wU=(0,gd.loggerWithTag)("auth-event");Kr.initSync();s5=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),n5=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),i5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),o5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),CU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,PU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,a5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,c5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;ut.onInvalidatedUser(()=>{qi=new Map});a(u5,"bypassAuth");a(vU,"authentication");a(l5,"start");a(_5,"login");a(d5,"logout")});var kU=T((A_e,xU)=>{"use strict";var Se=require("joi"),BU=require("fs-extra"),HU=require("path"),mn=Fe(),qU=X(),FU=b(),GU=G(),{hdb_errors:f5}=j(),{HDB_ERROR_MSGS:Gt}=f5,hn=/^[a-zA-Z0-9-_]+$/;xU.exports={getDropCustomFunctionValidator:h5,setCustomFunctionValidator:m5,addComponentValidator:R5,dropCustomFunctionProjectValidator:g5,packageComponentValidator:A5,deployComponentValidator:O5,setComponentFileValidator:p5,getComponentFileValidator:T5,dropComponentFileValidator:S5};function Od(e,t,r){try{let s=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),n=HU.join(s,t);return BU.existsSync(n)?e?t:r.message(Gt.PROJECT_EXISTS):e?r.message(Gt.NO_PROJECT):t}catch(s){return GU.error(s),r.message(Gt.VALIDATION_ERR)}}a(Od,"checkProjectExists");function ru(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ru,"checkFilePath");function E5(e,t,r,s){try{let n=qU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=HU.join(n,e,t,r+".js");return BU.existsSync(i)?r:s.message(Gt.NO_FILE)}catch(n){return GU.error(n),s.message(Gt.VALIDATION_ERR)}}a(E5,"checkFileExists");function h5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(hn).custom(E5.bind(null,e.project,e.type)).custom(ru).required().messages({"string.pattern.base":Gt.BAD_FILE_NAME})});return mn.validateBySchema(e,t)}a(h5,"getDropCustomFunctionValidator");function m5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(ru).required(),function_content:Se.string().required()});return mn.validateBySchema(e,t)}a(m5,"setCustomFunctionValidator");function p5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(p5,"setComponentFileValidator");function S5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(ru).optional()});return mn.validateBySchema(e,t)}a(S5,"dropComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(ru).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(T5,"getComponentFileValidator");function R5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!1)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(R5,"addComponentValidator");function g5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(g5,"dropCustomFunctionProjectValidator");function A5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return mn.validateBySchema(e,t)}a(A5,"packageComponentValidator");function O5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":Gt.BAD_PACKAGE}),package:Se.string().optional()});return mn.validateBySchema(e,t)}a(O5,"deployComponentValidator")});var Id=T((N_e,zU)=>{"use strict";var Nd=require("joi"),bd=require("path"),VU=require("fs-extra"),{exec:N5}=require("child_process"),b5=require("util"),$U=b5.promisify(N5),su=b(),{handleHDBError:Qo,hdb_errors:y5}=j(),{HTTP_STATUS_CODES:zo}=y5,nu=X(),I5=Fe(),Jo=G();nu.initSync();var QS=nu.get(su.CONFIG_PARAMS.COMPONENTSROOT),YU="npm install --omit=dev --json",w5=`${YU} --dry-run`;zU.exports={installModules:U5,auditModules:M5,installAllRootModules:C5,uninstallRootModule:L5,linkHarperdb:D5};async function C5(e=!1){await yd(),await iu(e?"npm install --ignore-scripts":"npm install",nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(C5,"installAllRootModules");async function L5(e){await iu(`npm uninstall ${e}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(L5,"uninstallRootModule");async function D5(){await yd(),await iu(`npm link ${su.PACKAGE_ROOT}`,nu.get(su.CONFIG_PARAMS.ROOTPATH))}a(D5,"linkHarperdb");async function iu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await $U(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
13
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(sC,"runCommand");async function xJ(){try{await TJ.access(lp)}catch{return!1}let e=await sC(`${lp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return RJ.eq(t,qJ)}a(xJ,"checkNATSServerInstalled");async function Ep(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Zw.getClusterUser();if(Di(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 DJ({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(Ep,"createConnection");async function kJ(){Ss&&(await Ss.drain(),Ss=void 0,wo=void 0,Co=void 0,Lo=void 0)}a(kJ,"closeConnection");var Ss,Lo;async function L_(){return Lo||(Lo=Ep(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Lo),Ss||Lo}a(L_,"getConnection");async function wc(){if(wo)return wo;Di(Ss)&&await L_();let{domain:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=await Ss.jetstreamManager({domain:e,timeout:6e4}),wo}a(wc,"getJetStreamManager");async function nC(){if(Co)return Co;Di(Ss)&&await L_();let{domain:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Di(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Co=Ss.jetstream({domain:e,timeout:6e4}),Co}a(nC,"getJetStream");async function Xt(){let e=Ss||await L_(),t=wo||await wc(),r=Co||await nC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function VJ(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Zw.getClusterUser(),n=await Ep(t,r,s),i=fp(),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 _p.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(VJ,"getServerList");async function hp(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:UJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(hp,"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 $J(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a($J,"deleteLocalStream");async function YJ(e){let{connection:t}=await Xt(),r=[],s=fp(),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(YJ,"listRemoteStreams");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:w_.Explicit};t&&(o.deliver_policy=C_.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=dp(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(KJ,"viewStream");async function*WJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:w_.Explicit};t&&(o.deliver_policy=C_.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=dp(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(WJ,"viewStreamIterator");async function QJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=oC(s,r);let{js:n}=await Xt(),i=await Lc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:jw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),HJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return 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 hp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(QJ,"publishToStream");function oC(e,t){t===void 0&&(t=PJ());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 Cc(e){e=e.toLowerCase();let t=Ic.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),FJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Di(up)&&(up={port:bc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:bc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ic.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),up;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Di(cp)&&(cp={port:bc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:bc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:bc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:Ic.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),cp;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cc,"getServerConfig");async function zJ(e){let{jsm:t}=await Xt(),r=await Lc();try{await t.streams.add({name:e.stream_name,storage:eC.File,retention:tC.Limits,max_age:CJ,max_bytes:LJ,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:w_.Explicit,durable_name:e.durable_name,deliver_policy:C_.All,max_ack_pending:1e4});else throw s}}a(zJ,"createWorkQueueStream");async function JJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(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:w_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:C_.All,max_ack_pending:1e4}))}a(JJ,"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,_=I_.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=I_.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 XJ(e,t,r=6e4,s=fp()){if(!_p.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 dp(c.data)}a(XJ,"request");function mp(e){return new Promise(async(t,r)=>{let s=NJ(lp,["--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(mp,"reloadNATS");async function jJ(){let{pid_file_path:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await mp(e)}a(jJ,"reloadNATSHub");async function ZJ(){let{pid_file_path:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await mp(e)}a(ZJ,"reloadNATSLeaf");function e4(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(e4,"requestErrorHandler");async function t4(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(t4,"updateWorkStream");function lC(e){return bJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lC,"exclusiveLock");async function _C(e,t){let r=I_.createNatsTableStreamName(e,t),s=await Lc(),n=i4(e,t,s);await hp(r,[n])}a(_C,"createLocalTableStream");async function r4(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(r4,"createTableStreams");async function dC(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=I_.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 s4(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(s4,"purgeSchemaTableStreams");async function n4(e){return(await wc()).streams.info(e)}a(n4,"getStreamInfo");function i4(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(i4,"createSubjectName");async function Lc(){if(yc)return yc;if(yc=(await wc())?.nc?.info?.server_name,yc===void 0)throw new Error("Unable to get jetstream manager server name");return yc}a(Lc,"getJsmServerName");async function o4(){let e=await wc(),t=await Lc(),r=await iC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=a4(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(o4,"updateLocalStreams");function a4(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(a4,"updateStreamLimits")});var P_=T((cue,pC)=>{"use strict";var Do=xl(),Uo=Cw(),c4=F(),u4=require("uuid").v4,aue=require("clone"),U_=un(),Mo=b(),l4=require("util"),$n=_s(),{handleHDBError:jt,hdb_errors:_4}=j(),{HDB_ERROR_MSGS:D_,HTTP_STATUS_CODES:Zt}=_4,{SchemaEventMsg:M_}=ds(),EC=dt(),{getDatabases:d4}=(fe(),Z(Ce)),{transformReq:Po}=$();pC.exports={createSchema:f4,createSchemaStructure:hC,createTable:E4,createTableStructure:mC,createAttribute:T4,dropSchema:h4,dropTable:m4,dropAttribute:p4,getBackup:R4};async function f4(e){let t=await hC(e);return U_.signalSchemaChange(new M_(process.pid,e.operation,e.schema)),t}a(f4,"createSchema");async function hC(e){let t=Do.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Po(e),!await Uo.checkSchemaExists(e.schema))throw jt(new Error,D_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,D_.SCHEMA_EXISTS_ERR(e.schema),!0);return await $n.createSchema(e),`database '${e.schema}' successfully created`}a(hC,"createSchemaStructure");async function E4(e){return Po(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mC(e)}a(E4,"createTable");async function mC(e){let t=Do.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Do.validateTableResidence(e.residence),!await Uo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,D_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,D_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:u4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await $n.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 $n.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(mC,"createTableStructure");async function h4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Do.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Po(e);let n=await Uo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Mo.LOG_LEVELS.ERROR,n,!0);let i=await Uo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await $n.dropSchema(e),U_.signalSchemaChange(new M_(process.pid,e.operation,e.schema)),await EC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(h4,"dropSchema");async function m4(e){let t=Do.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Po(e);let r=await Uo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);return await $n.dropTable(e),await EC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(m4,"dropTable");async function p4(e){let t=Do.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Po(e);let r=await Uo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Mo.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(Mo.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 $n.dropAttribute(e),S4(e),U_.signalSchemaChange(new M_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw c4.error(`Got an error deleting attribute ${l4.inspect(e)}.`),s}}a(p4,"dropAttribute");function S4(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(S4,"dropAttributeFromGlobal");async function T4(e){Po(e);let t=d4()[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 $n.createAttribute(e),U_.signalSchemaChange(new M_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(T4,"createAttribute");function R4(e){return $n.getBackup(e)}a(R4,"getBackup")});var TC=T((lue,SC)=>{"use strict";var{OPERATIONS_ENUM:g4}=b(),pp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=g4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};SC.exports=pp});var Sp=T((fue,NC)=>{"use strict";var A4=_s(),due=TC(),v_=$(),B_=b(),O4=X(),{handleHDBError:RC,hdb_errors:N4}=j(),{HDB_ERROR_MSGS:gC,HTTP_STATUS_CODES:AC}=N4,b4=Object.values(B_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OC="To use this operation audit log must be enabled in harperdb-config.yaml";NC.exports=y4;async function y4(e){if(v_.isEmpty(e.schema))throw new Error(gC.SCHEMA_REQUIRED_ERR);if(v_.isEmpty(e.table))throw new Error(gC.TABLE_REQUIRED_ERR);if(!O4.get(B_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw RC(new Error,OC,AC.BAD_REQUEST,B_.LOG_LEVELS.ERROR,OC,!0);let t=v_.checkSchemaTableExist(e.schema,e.table);if(t)throw RC(new Error,t,AC.NOT_FOUND,B_.LOG_LEVELS.ERROR,t,!0);if(!v_.isEmpty(e.search_type)&&b4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await A4.readAuditLog(e)}a(y4,"readAuditLog")});var yC=T((hue,bC)=>{"use strict";var{OPERATIONS_ENUM:I4}=b(),Tp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=I4.GET_BACKUP,this.schema=t,this.table=r}};bC.exports=Tp});var CC=T((Tue,wC)=>{"use strict";var w4=_s(),pue=yC(),Rp=$(),C4=b(),Sue=X(),{handleHDBError:L4,hdb_errors:D4}=j(),{HDB_ERROR_MSGS:IC,HTTP_STATUS_CODES:U4}=D4;wC.exports=M4;async function M4(e){if(Rp.isEmpty(e.schema))throw new Error(IC.SCHEMA_REQUIRED_ERR);if(Rp.isEmpty(e.table))throw new Error(IC.TABLE_REQUIRED_ERR);let t=Rp.checkSchemaTableExist(e.schema,e.table);if(t)throw L4(new Error,t,U4.NOT_FOUND,C4.LOG_LEVELS.ERROR,t,!0);return await w4.getBackup(read_audit_log_object)}a(M4,"getBackup")});var vC=T((gue,PC)=>{var Yn=require("validate.js"),DC=qe(),vo=b(),{handleHDBError:P4,hdb_errors:v4}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:B4}=v4,gp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),H4={STRUCTURE_USER:"structure_user"},LC=Object.values(vo.ROLE_TYPES_ENUM),F4="attribute_permissions",q4="attribute_name",{PERMS_CRUD_ENUM:Bo}=vo,G4=[F4,...Object.values(Bo)],UC=[Bo.READ,Bo.INSERT,Bo.UPDATE],x4=[q4,...UC];function k4(e){let t=gp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MC(e,t)}a(k4,"addRoleValidation");function V4(e){let t=gp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MC(e,t)}a(V4,"alterRoleValidation");function $4(e){let t=gp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DC.validateObject(e,t)}a($4,"dropRoleValidation");var Y4=["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++)Y4.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=K4(e);o&&st(o,r),LC.forEach(c=>{e.permission[c]&&!Yn.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===H4.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=>{G4.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Bo).forEach(l=>{Yn.isDefined(_[l])?Yn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Yn.isDefined(_.attribute_permissions)){if(!Yn.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=>{!x4.includes(p)&&p!==Bo.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Yn.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=>{Yn.isDefined(E[p])?Yn.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 W4(r)}a(MC,"customValidate");PC.exports={addRoleValidation:k4,alterRoleValidation:V4,dropRoleValidation:$4};function K4(e){let{operation:t,permission:r}=e;if(t===vo.OPERATIONS_ENUM.ADD_ROLE||t===vo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?vo.ROLE_TYPES_ENUM.SUPER_USER:vo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(K4,"validateNoSUPerms");function W4(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 P4(new Error,s,B4.BAD_REQUEST)}else return null}a(W4,"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 Ip=T((Oue,qC)=>{"use strict";var BC=Gr(),HC=qr(),Q4=Ni(),Op=vC(),Np=un(),z4=require("uuid").v4,J4=require("util"),H_=b(),X4=$(),bp=HC.searchByValue,j4=HC.searchByHash,Z4=J4.promisify(Q4.delete),e2=Bs(),t2=bo(),{hdb_errors:r2,handleHDBError:Ho}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:F_}=r2,{UserEventMsg:yp}=ds();qC.exports={addRole:s2,alterRole:n2,dropRole:i2,listRoles:o2};function Ap(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(Ap,"scrubRoleDetails");async function s2(e){let t=Op.addRoleValidation(e);if(t)throw t;e=Ap(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 bp(r)||[])}catch(i){throw Ho(i)}if(s&&s.length>0)throw Ho(new Error,FC.ROLE_ALREADY_EXISTS(e.role),F_.CONFLICT,void 0,void 0,!0);e.id||(e.id=z4());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BC.insert(n),Np.signalUserChange(new yp(process.pid)),e=Ap(e),e}a(s2,"addRole");async function n2(e){let t=Op.alterRoleValidation(e);if(t)throw t;e=Ap(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await BC.update(r)}catch(n){throw Ho(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ho(new Error,"Invalid role id",F_.BAD_REQUEST,void 0,void 0,!0);return await Np.signalUserChange(new yp(process.pid)),e}a(n2,"alterRole");async function i2(e){let t=Op.dropRoleValidation(e);if(t)throw Ho(new Error,t,F_.BAD_REQUEST,void 0,void 0,!0);let r=new t2(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await j4(r));if(s.length===0)throw Ho(new Error,FC.ROLE_NOT_FOUND,F_.NOT_FOUND,void 0,void 0,!0);let n=new e2(H_.SYSTEM_SCHEMA_NAME,H_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await bp(n)),o=!1;if(X4.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 Z4(c),Np.signalUserChange(new yp(process.pid)),`${s[0].role} successfully deleted`}a(i2,"dropRole");async function o2(){return bp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(o2,"listRoles")});var VC=T((bue,kC)=>{"use strict";var a2=X(),Kn=require("joi"),c2=qe(),GC=require("moment"),u2=require("fs-extra"),wp=require("path"),l2=require("lodash"),Dc=b(),{LOG_LEVELS:Ui}=b(),_2="YYYY-MM-DD hh:mm:ss",d2=wp.resolve(__dirname,"../logs");kC.exports=function(e){return c2.validateBySchema(e,f2)};var f2=Kn.object({from:Kn.custom(xC),until:Kn.custom(xC),level:Kn.valid(Ui.NOTIFY,Ui.FATAL,Ui.ERROR,Ui.WARN,Ui.INFO,Ui.DEBUG,Ui.TRACE),order:Kn.valid("asc","desc"),limit:Kn.number().min(1),start:Kn.number().min(0),log_name:Kn.custom(E2)});function xC(e,t){if(GC(e,GC.ISO_8601).format(_2)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xC,"validateDatetime");function E2(e,t){if(l2.invert(Dc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=a2.get(Dc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Dc.LOG_NAMES.HDB:e,i=n===Dc.LOG_NAMES.INSTALL?wp.join(d2,Dc.LOG_NAMES.INSTALL):wp.join(s,n);return u2.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(E2,"validateReadLogPath")});var Lp=T((Iue,YC)=>{"use strict";var q_=b(),h2=F(),m2=X(),p2=VC(),Cp=require("path"),$C=require("fs-extra"),{once:S2}=require("events"),{handleHDBError:T2,hdb_errors:R2}=j(),{PACKAGE_ROOT:g2}=b(),A2=Cp.join(g2,"logs"),O2=1e3,N2=200;YC.exports=b2;async function b2(e){let t=p2(e);if(t)throw T2(t,t.message,R2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=m2.get(q_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?q_.LOG_NAMES.HDB:e.log_name,n=s===q_.LOG_NAMES.INSTALL?Cp.join(A2,q_.LOG_NAMES.INSTALL):Cp.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?O2: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)*N2,0));let S=$C.createReadStream(n,{start:p});S.on("error",G=>{h2.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&&(Wn(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&&(Wn(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&&(Wn(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&&(Wn(G,f,I),A++,A===h&&S.destroy());break;case i:G.level===o&&A<E?A++:G.level===o&&(Wn(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&&(Wn(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&&(Wn(G,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Wn(G,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await S2(S,"close"),I}a(b2,"readLog");function Wn(e,t,r){t==="desc"?y2(e,r):t==="asc"?I2(e,r):r.push(e)}a(Wn,"pushLineToResult");function y2(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(y2,"insertDescending");function I2(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(I2,"insertAscending")});var x_=T((Uue,zC)=>{"use strict";var Dp=require("joi"),{string:G_,boolean:KC,date:w2}=Dp.types(),C2=qe(),{validateSchemaExists:Cue,validateTableExists:Lue,validateSchemaName:Due}=Us(),L2=b(),D2=ke(),WC=X();WC.initSync();var U2=G_.invalid(WC.get(L2.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(D2.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:G_.valid("add_node","update_node"),node_name:U2,subscriptions:Dp.array().items({table:G_.optional(),schema:G_.required(),subscribe:KC.required(),publish:KC.required().custom(P2),start_time:w2.iso()}).min(1).required()};function M2(e){return C2.validateBySchema(e,Dp.object(QC))}a(M2,"addUpdateNodeValidator");function P2(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(P2,"checkForFalsy");zC.exports={addUpdateNodeValidator:M2,validation_schema:QC}});var XC=T((Pue,JC)=>{var v2=qe(),B2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JC.exports=function(e){return v2.validateObject(e,B2)}});var Mp=T((vue,jC)=>{"use strict";var H2=b().OPERATIONS_ENUM,Up=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=H2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jC.exports=Up});var eL=T((Hue,ZC)=>{"use strict";var F2={OPERATION:"operation",REFRESH:"refresh"},Pp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},vp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};ZC.exports={JWTTokens:Pp,TOKEN_TYPE_ENUM:F2,JWTRSAKeys:vp}});var Pc=T((que,nL)=>{"use strict";var Mc=require("jsonwebtoken"),Bp=require("fs-extra"),Hp=$(),$r=b(),{handleHDBError:er,hdb_errors:q2}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=q2,Uc=F(),tL=e_(),Gp=xr(),G2=Gr().update,x2=Mp(),k2=un(),{UserEventMsg:V2}=ds(),Qn=X();Qn.initSync();var Fp=require("path"),{JWTTokens:$2,JWTRSAKeys:Y2,TOKEN_TYPE_ENUM:k_}=eL(),K2=Qn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Qn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",W2=Qn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Qn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",V_="RS256",qp;nL.exports={createTokens:Q2,validateOperationToken:J2,refreshOperationToken:z2,validateRefreshToken:sL};async function Q2(e){if(Hp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Hp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Hp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Gp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Uc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await $_(),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 Mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:W2,algorithm:V_,subject:k_.REFRESH}),u=tL.hash(c),_=new x2($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await G2(_)}catch(f){Uc.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 k2.signalUserChange(new V2(process.pid)),new $2(o,c)}a(Q2,"createTokens");async function rL(e,t,r){return await Mc.sign(e,{key:t,passphrase:r},{expiresIn:K2,algorithm:V_,subject:k_.OPERATION})}a(rL,"signOperationToken");async function $_(){if(qp===void 0)try{let e=Fp.join(Qn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Fp.join(Qn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Fp.join(Qn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bp.readFile(e)).toString(),n=(await Bp.readFile(t)).toString(),i=(await Bp.readFile(r)).toString();qp=new Y2(i,n,s)}catch(e){throw Uc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return qp}a($_,"getJWTRSAKeys");async function z2(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 $_(),r=await Mc.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(z2,"refreshOperationToken");async function J2(e){try{let t=await $_(),r=await Mc.verify(e,t.public_key,{algorithms:V_,subject:k_.OPERATION});return await Gp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Uc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(J2,"validateOperationToken");async function sL(e){let t;try{let r=await $_(),s=await Mc.verify(e,r.public_key,{algorithms:V_,subject:k_.REFRESH});t=await Gp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Uc.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 xp=T((kue,aL)=>{"use strict";var X2=XC(),Fo=require("passport"),j2=require("passport-local").Strategy,Z2=require("passport-http").BasicStrategy,e3=require("util"),t3=xr(),oL=e3.callbackify(t3.findAndValidateUser),xue=dr(),r3=b(),iL=Pc();Fo.use(new j2(function(e,t,r){oL(e,t,r)}));Fo.use(new Z2(function(e,t,r){oL(e,t,r)}));Fo.serializeUser(function(e,t){t(null,e)});Fo.deserializeUser(function(e,t){t(null,e)});function s3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Fo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===r3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?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:Fo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(s3,"authorize");function n3(e,t){let r=X2(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(n3,"checkPermissions");aL.exports={authorize:s3,checkPermissions:n3}});var qo=T(($ue,cL)=>{"use strict";var kp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Vp=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:kp,NodeSubscription:Vp}});var lL=T((Kue,uL)=>{"use strict";var i3=b().OPERATIONS_ENUM,$p=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=i3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uL.exports=$p});var vc=T((Que,_L)=>{"use strict";var Yp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Kp=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:Yp,RemotePayloadSubscription:Kp}});var fL=T((Jue,dL)=>{"use strict";var Wp=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=Wp});var mL=T((tle,hL)=>{"use strict";var o3=fL(),jue=ze(),EL=Ue(),a3=F(),{getSchemaPath:Zue,getTransactionAuditStorePath:ele}=ve(),{getDatabases:c3}=(fe(),Z(Ce));hL.exports=u3;async function u3(e){let t=new o3;try{let r=c3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await 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){a3.warn(`unable to stat table dbi due to ${r}`)}return t}a(u3,"lmdbGetTableSize")});var SL=T((sle,pL)=>{"use strict";var Qp=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=Qp});var Go=T((ale,AL)=>{"use strict";var l3=require("fs-extra"),_3=require("path"),qt=require("systeminformation"),zn=F(),d3=dt(),zp=ke(),K_=b(),f3=mL(),gL=Ti(),{getThreadInfo:TL}=Ze(),iS=X();iS.initSync();var E3=SL(),{openEnvironment:ile}=Ue(),{getSchemaPath:ole}=ve(),{database:h3}=(fe(),Z(Ce)),Y_;AL.exports={getHDBProcessInfo:Zp,getNetworkInfo:tS,getDiskInfo:eS,getMemoryInfo:jp,getCPUInfo:Xp,getTimeInfo:Jp,getSystemInformation:rS,systemInformation:m3,getTableSize:sS,getMetrics:nS};function Jp(){return qt.time()}a(Jp,"getTimeInfo");async function Xp(){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: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 zn.error(`error in getCPUInfo: ${e}`),{}}}a(Xp,"getCPUInfo");async function jp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return zn.error(`error in getMemoryInfo: ${e}`),{}}}a(jp,"getMemoryInfo");async function Zp(){let e={core:[],clustering:[]};try{let t=await qt.processes(),r;try{r=Number.parseInt(await l3.readFile(_3.join(iS.get(K_.CONFIG_PARAMS.ROOTPATH),K_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===K_.NODE_ERROR_CODES.ENOENT)zn.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 zn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Zp,"getHDBProcessInfo");async function eS(){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 zn.error(`error in getDiskInfo: ${t}`),e}}a(eS,"getDiskInfo");async function tS(){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 zn.error(`error in getNetworkInfo: ${t}`),e}}a(tS,"getNetworkInfo");async function rS(){if(Y_!==void 0)return Y_;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,Y_=e,Y_}catch(t){return zn.error(`error in getSystemInformation: ${t}`),e}}a(rS,"getSystemInformation");async function sS(){let e=[],t=await gL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await f3(s));return e}a(sS,"getTableSize");async function nS(){let e=await gL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=h3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){zn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(nS,"getMetrics");async function RL(){if(iS.get(K_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await d3.getNATSReferences(),r=await t.streams.info(zp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(zp.WORK_QUEUE_CONSUMER_NAMES.stream_name,zp.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 m3(e){let t=new E3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rS(),t.time=Jp(),t.cpu=await Xp(),t.memory=await jp(),t.disk=await eS(),t.network=await tS(),t.harperdb_processes=await Zp(),t.table_size=await sS(),t.metrics=await nS(),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 rS();break;case"time":t.time=Jp();break;case"cpu":t.cpu=await Xp();break;case"memory":t.memory=await jp();break;case"disk":t.disk=await eS();break;case"network":t.network=await tS();break;case"harperdb_processes":t.harperdb_processes=await Zp();break;case"table_size":t.table_size=await sS();break;case"database_metrics":case"metrics":t.metrics=await nS();break;case"threads":t.threads=await TL();break;case"replication":t.replication=await RL();break;default:break}return t}a(m3,"systemInformation")});var oS=T((ule,OL)=>{"use strict";OL.exports={version:p3,printVersion:S3};var W_=gc();function p3(){if(W_)return W_.version}a(p3,"version");function S3(){W_&&console.log(`HarperDB Version ${W_.version}`)}a(S3,"printVersion")});var Gs=T((fle,IL)=>{"use strict";var T3=Gr(),aS=$(),R3=require("util"),Mi=b(),NL=X();NL.initSync();var g3=xp(),bL=qr(),{Node:_le,NodeSubscription:dle}=qo(),A3=bo(),O3=lL(),{RemotePayloadObject:N3,RemotePayloadSubscription:b3}=vc(),{handleHDBError:y3,hdb_errors:I3}=j(),{HTTP_STATUS_CODES:w3,HDB_ERROR_MSGS:C3}=I3,L3=Bs(),D3=Go(),U3=oS(),{getDatabases:M3}=(fe(),Z(Ce)),P3=R3.promisify(g3.authorize),v3=bL.searchByHash,B3=bL.searchByValue;IL.exports={authHeaderToUser:H3,isEmpty:F3,getNodeRecord:q3,upsertNodeRecord:G3,buildNodePayloads:x3,checkClusteringEnabled:k3,getAllNodeRecords:V3,getSystemInfo:$3,reverseSubscription:yL};async function H3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await P3(t,null),e}a(H3,"authHeaderToUser");function F3(e){return e==null}a(F3,"isEmpty");async function q3(e){let t=new A3(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return v3(t)}a(q3,"getNodeRecord");async function G3(e){let t=new O3(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return T3.upsert(t)}a(G3,"upsertNodeRecord");function yL(e){if(aS.isEmpty(e.subscribe)||aS.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 x3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=aS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yL(c),E=M3()[u]?.[_],h=new b3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new N3(r,t,n,s)}a(x3,"buildNodePayloads");function k3(){if(!NL.get(Mi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw y3(new Error,C3.CLUSTERING_NOT_ENABLED,w3.BAD_REQUEST,void 0,void 0,!0)}a(k3,"checkClusteringEnabled");async function V3(){let e=new L3(Mi.SYSTEM_SCHEMA_NAME,Mi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await B3(e))}a(V3,"getAllNodeRecords");async function $3(){let e=await D3.getSystemInformation();return{hdb_version:U3.version(),node_version:e.node_version,platform:e.platform}}a($3,"getSystemInfo")});var cS=T((hle,vL)=>{"use strict";var Q_=dt(),wL=$(),CL=ke(),LL=b(),z_=F(),DL=P_(),Y3=Lm(),{RemotePayloadObject:K3}=vc(),{handleHDBError:UL,hdb_errors:W3}=j(),{HTTP_STATUS_CODES:ML}=W3,{NodeSubscription:PL}=qo();vL.exports=Q3;async function Q3(e,t){let r;try{r=await Q_.request(`${t}.${CL.REQUEST_SUFFIX}`,new K3(LL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),z_.trace("Response from remote describe all request:",r)}catch(o){z_.error(`addNode received error from describe all request to remote node: ${o}`);let c=Q_.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 Q_.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&&(z_.trace(`addNode creating schema: ${c}`),await DL.createSchema({operation:"create_schema",schema:c})),!d&&f){z_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Y3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await DL.createTable(h)}await Q_.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(Q3,"reviewSubscriptions")});var Fc=T((ple,FL)=>{"use strict";var{handleHDBError:J_,hdb_errors:z3}=j(),{HTTP_STATUS_CODES:X_}=z3,{addUpdateNodeValidator:J3}=x_(),Bc=F(),HL=b(),BL=ke(),X3=$(),uS=dt(),Hc=Gs(),j3=X(),Z3=cS(),{Node:eX,NodeSubscription:tX}=qo(),{broadcast:rX}=Ze(),sX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",nX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",iX=j3.get(HL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=oX;async function oX(e,t=!1){Bc.trace("addNode called with:",e),Hc.checkClusteringEnabled();let r=J3(e);if(r)throw J_(r,r.message,X_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Hc.getNodeRecord(s);if(!X3.isEmptyOrZeroLength(d))throw J_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await Z3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=sX,o;let c=Hc.buildNodePayloads(n,iX,HL.OPERATIONS_ENUM.ADD_NODE,await Hc.getSystemInfo());Bc.trace("addNode sending remote payload:",c);let u;try{u=await uS.request(`${s}.${BL.REQUEST_SUFFIX}`,c)}catch(d){Bc.error(`addNode received error from request: ${d}`);let f=uS.requestErrorHandler(d,"add_node",s);throw J_(new Error,f,X_.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 J_(new Error,d,X_.INTERNAL_SERVER_ERROR,"error",d)}Bc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Bc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await uS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new tX(E.schema,E.table,E.publish,E.subscribe))}let l=new eX(s,_,u.system_info);return await Hc.upsertNodeRecord(l),rX({type:"nats_update"}),i.length>0?o.message=nX:o.message=`Successfully added '${s}' to manifest`,o}a(oX,"addNode")});var _S=T((Tle,xL)=>{"use strict";var{handleHDBError:j_,hdb_errors:aX}=j(),{HTTP_STATUS_CODES:Z_}=aX,{addUpdateNodeValidator:cX}=x_(),qc=F(),GL=b(),qL=ke(),uX=$(),lS=dt(),Gc=Gs(),lX=X(),{cloneDeep:_X}=require("lodash"),dX=cS(),{NodeSubscription:fX}=qo(),{broadcast:EX}=Ze(),hX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",mX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",pX=lX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=SX;async function SX(e){qc.trace("updateNode called with:",e),Gc.checkClusteringEnabled();let t=cX(e);if(t)throw j_(t,t.message,Z_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=_X(await Gc.getNodeRecord(r));if(uX.isEmptyOrZeroLength(s))throw j_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Z_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await dX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=hX,o;let c=Gc.buildNodePayloads(n,pX,GL.OPERATIONS_ENUM.UPDATE_NODE,await Gc.getSystemInfo());qc.trace("updateNode sending remote payload:",c);let u;try{u=await lS.request(`${r}.${qL.REQUEST_SUFFIX}`,c)}catch(_){qc.error(`updateNode received error from request: ${_}`);let l=lS.requestErrorHandler(_,"update_node",r);throw j_(new Error,l,Z_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw j_(new Error,_,Z_.INTERNAL_SERVER_ERROR,"error",_)}qc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];qc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await lS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await TX(s[0],n,u.system_info),i.length>0?o.message=mX:o.message=`Successfully updated '${r}'`,o}a(SX,"updateNode");async function TX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new fX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Gc.upsertNodeRecord(s),EX({type:"nats_update"})}a(TX,"updateNodeTable")});var KL=T((gle,YL)=>{"use strict";var $L=require("joi"),{string:kL}=$L.types(),RX=qe(),VL=b(),gX=X(),AX=ke();YL.exports=OX;function OX(e){let t=kL.invalid(gX.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(AX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=$L.object({operation:kL.valid(VL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return RX.validateBySchema(e,r)}a(OX,"removeNodeValidator")});var kc=T((Ole,jL)=>{"use strict";var{handleHDBError:WL,hdb_errors:NX}=j(),{HTTP_STATUS_CODES:QL}=NX,bX=KL(),xc=F(),zL=Gs(),yX=$(),ed=b(),JL=ke(),XL=dt(),IX=X(),{RemotePayloadObject:wX}=vc(),{NodeSubscription:CX}=qo(),LX=fc(),DX=Ni(),{broadcast:UX}=Ze(),MX=IX.get(ed.CONFIG_PARAMS.CLUSTERING_NODENAME);jL.exports=PX;async function PX(e){xc.trace("removeNode called with:",e),zL.checkClusteringEnabled();let t=bX(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(yX.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 wX(ed.OPERATIONS_ENUM.REMOVE_NODE,MX,[]),i,o=!1;try{i=await XL.request(`${r}.${JL.REQUEST_SUFFIX}`,n),xc.trace("Remove node reply from remote node:",r,i)}catch(u){xc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];xc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new CX(l.schema,l.table,!1,!1);await XL.updateWorkStream(d,r)}let c=new LX(ed.SYSTEM_SCHEMA_NAME,ed.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await DX.deleteRecord(c),UX({type:"nats_update"}),i?.status===JL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(PX,"removeNode")});var tD=T((ble,eD)=>{"use strict";var ZL=require("joi"),{string:vX,array:BX}=ZL.types(),HX=qe(),FX=x_();eD.exports=qX;function qX(e){let t=ZL.object({operation:vX.valid("configure_cluster").required(),connections:BX.items(FX.validation_schema).required()});return HX.validateBySchema(e,t)}a(qX,"configureClusterValidator")});var dS=T((Ile,oD)=>{"use strict";var GX=b(),td=F(),xX=$(),kX=kc(),VX=Fc(),rD=Gs(),$X=tD(),{handleHDBError:sD,hdb_errors:YX}=j(),{HTTP_STATUS_CODES:nD}=YX,KX="Configure cluster complete.",WX="Failed to configure the cluster. Check the logs for more details.",QX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oD.exports=zX;async function zX(e){td.trace("configure cluster called with:",e),rD.checkClusteringEnabled();let t=$X(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(kX,{operation:GX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);td.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(VX,E,E.node_name))}let c=await Promise.allSettled(i);td.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"&&(td.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(xX.isEmptyOrZeroLength(u))return{message:KX,connections:_};if(l)return{message:QX,failed_nodes:u,connections:_};throw sD(new Error,WX,nD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(zX,"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((Cle,aD)=>{"use strict";var rd=require("joi"),JX=qe(),{validateSchemaExists:XX,validateTableExists:jX,validateSchemaName:ZX}=Us(),ej=rd.object({operation:rd.string().valid("purge_stream"),schema:rd.string().custom(XX).custom(ZX).required(),table:rd.string().custom(jX).required()});function tj(e){return JX.validateBySchema(e,ej)}a(tj,"purgeStreamValidator");aD.exports=tj});var fS=T((Dle,uD)=>{"use strict";var{handleHDBError:rj,hdb_errors:sj}=j(),{HTTP_STATUS_CODES:nj}=sj,ij=cD(),oj=dt(),aj=Gs();uD.exports=cj;async function cj(e){let t=ij(e);if(t)throw rj(t,t.message,nj.BAD_REQUEST,void 0,void 0,!0);aj.checkClusteringEnabled();let{schema:r,table:s}=e;return await oj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(cj,"purgeStream")});var nd=T((Mle,hD)=>{"use strict";var hS=Gs(),uj=dt(),dD=X(),sd=b(),Pi=ke(),lj=$(),ES=F(),{RemotePayloadObject:_j}=vc(),{ErrorCode:lD}=require("nats"),_D=dD.get(sd.CONFIG_PARAMS.CLUSTERING_ENABLED),fD=dD.get(sd.CONFIG_PARAMS.CLUSTERING_NODENAME);hD.exports={clusterStatus:dj,buildNodeStatus:ED};async function dj(){let e={node_name:fD,is_enabled:_D,connections:[]};if(!_D)return e;let t=await hS.getAllNodeRecords();if(lj.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(dj,"clusterStatus");async function ED(e,t){let r=e.name,s=new _j(sd.OPERATIONS_ENUM.CLUSTER_STATUS,fD,void 0,await hS.getSystemInfo()),n,i,o=Pi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await uj.request(Pi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Pi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Pi.CLUSTER_STATUS_STATUSES.CLOSED,ES.error(`Error getting node status from ${r} `,n))}catch(u){ES.warn(`Error getting node status from ${r}`,u),u.code===lD.NoResponders?o=Pi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lD.Timeout?o=Pi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Pi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new fj(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==sd.PRE_4_0_0_VERSION&&await hS.upsertNodeRecord(u)}catch(u){ES.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(ED,"buildNodeStatus");function fj(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(fj,"NodeStatusObject")});var pS=T((vle,mD)=>{"use strict";var{handleHDBError:Ej,hdb_errors:hj}=j(),{HTTP_STATUS_CODES:mj}=hj,pj=dt(),Sj=Gs(),mS=$(),id=require("joi"),Tj=qe(),Rj=2e3,gj=id.object({timeout:id.number().min(1),connected_nodes:id.boolean(),routes:id.boolean()});mD.exports=Aj;async function Aj(e){Sj.checkClusteringEnabled();let t=Tj.validateBySchema(e,gj);if(t)throw Ej(t,t.message,mj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||mS.autoCastBoolean(s),o=n===void 0||mS.autoCastBoolean(n),c={nodes:[]},u=await pj.getServerList(r??Rj),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:mS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Aj,"clusterNetwork")});var RD=T((Hle,TD)=>{"use strict";var SS=require("joi"),pD=qe(),{route_constraints:SD}=pE();TD.exports={setRoutesValidator:Oj,deleteRoutesValidator:Nj};function Oj(e){let t=SS.object({server:SS.valid("hub","leaf").required(),routes:SD.required()});return pD.validateBySchema(e,t)}a(Oj,"setRoutesValidator");function Nj(e){let t=SS.object({routes:SD.required()});return pD.validateBySchema(e,t)}a(Nj,"deleteRoutesValidator")});var RS=T((qle,ND)=>{"use strict";var vi=hr(),TS=$(),od=b(),gD=RD(),{handleHDBError:AD,hdb_errors:bj}=j(),{HTTP_STATUS_CODES:OD}=bj,yj="cluster routes successfully set",Ij="cluster routes successfully deleted";ND.exports={setRoutes:wj,getRoutes:Cj,deleteRoutes:Lj};function wj(e){let t=gD.setRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=vi.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"?vi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):vi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:yj,set:o,skipped:i}}a(wj,"setRoutes");function Cj(){let e=vi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Cj,"getRoutes");function Lj(e){let t=gD.deleteRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=vi.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,vi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=TS.isEmptyOrZeroLength(n)?null:n,vi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Ij,deleted:i,skipped:o}}a(Lj,"deleteRoutes")});var yD=T((xle,bD)=>{"use strict";var Vc=require("alasql"),Bi=require("recursive-iterator"),Ts=F(),Dj=$(),$c=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,Mj(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>$c.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=>!$c.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][$c.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Uj(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!$c.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Vc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Uj(e){return e.filter(t=>t[$c.PERMS_CRUD_ENUM.READ])}a(Uj,"filterReadRestrictedAttrs");function Mj(e,t,r,s,n){Pj(e,t,r,s,n)}a(Mj,"interpretAST");function Yc(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(Yc,"addSchemaTableToMap");function Pj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Vc.yy.Insert?Fj(e,t,r):e instanceof Vc.yy.Select?vj(e,t,r,s,n):e instanceof Vc.yy.Update?Bj(e,t,r):e instanceof Vc.yy.Delete?Hj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Pj,"getRecordAttributesAST");function vj(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(Dj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{Yc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Yc(c.table,t,r,s,n)});let o=new Bi(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 Bi(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 Bi(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 Bi(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(vj,"getSelectAttributes");function Bj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Bi(e.columns),n=e.table.databaseid;Yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(Bj,"getUpdateAttributes");function Hj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Bi(e.where),n=e.table.databaseid;Yc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(Hj,"getDeleteAttributes");function Fj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Bi(e.columns),n=e.into.databaseid;Yc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.into.tableid,n,i.columnid,t,r)}a(Fj,"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((Vle,LD)=>{var ad=sc(),ID=require("chalk"),br=F(),wD=require("prompt"),{promisify:qj}=require("util"),OS=b(),Gj=require("fs-extra"),xj=require("path"),kj=$(),Vj=oS(),CD=X();CD.initSync();var $j=require("moment"),Yj=qj(wD.get),Kj=xj.join(CD.getHdbBasePath(),OS.LICENSE_KEY_DIR_NAME,OS.LICENSE_FILE_NAME,OS.LICENSE_FILE_NAME);LD.exports={getFingerprint:Qj,setLicense:Wj,parseLicense:NS,register:zj,getRegistrationInfo:Xj};async function Wj(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(Wj,"setLicense");async function Qj(){let e={};try{e=await ad.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(Qj,"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=ad.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 Gj.writeFile(Kj,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 zj(){let e=await Jj();return NS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(zj,"register");async function Jj(){let e=await ad.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 Yj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Jj,"promptForRegistration");async function Xj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ad.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(kj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Vj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=$j.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Xj,"getRegistrationInfo")});var UD=T((Yle,DD)=>{"use strict";var jj=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+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"}};DD.exports=yS});var vD=T((Wle,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((zle,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((Xle,FD)=>{"use strict";var Zj=ke(),CS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Zj.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=CS});var US=T((Zle,kD)=>{"use strict";var xo=require("path"),ld=require("fs-extra"),eZ=UD(),tZ=vD(),rZ=HD(),sZ=qD(),LS=xr(),Vo=$(),sr=hr(),ud=b(),Kc=ke(),{CONFIG_PARAMS:je}=ud,Wc=F(),Qc=X(),GD=an(),DS=dt(),ko="clustering",nZ=1e4,xD=5;kD.exports={generateNatsConfig:oZ,removeNatsConfig:aZ,getHubConfigPath:iZ};function iZ(){let e=Qc.get(je.ROOTPATH);return xo.join(e,ko,Kc.NATS_CONFIG_FILES.HUB_SERVER)}a(iZ,"getHubConfigPath");async function oZ(e=!1,t=void 0){Qc.initSync();let r=Qc.get(je.ROOTPATH),s=xo.join(r,ko,Kc.PID_FILES.HUB),n=xo.join(r,ko,Kc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xo.join(r,ko,Kc.NATS_CONFIG_FILES.HUB_SERVER),c=xo.join(r,ko,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()||_d("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();(Vo.isEmpty(A)||A.active!==!0)&&_d(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await cd(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await cd(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await cd(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await cd(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===ud.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new sZ(te.username,GD.decrypt(te.hash))),N.push(new rZ(te.username,GD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!Vo.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 eZ(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete G.tls.ca_file,delete G.leafnodes.tls.ca_file),t=Vo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ud.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ld.writeJson(o,G),Wc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new tZ(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===ud.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ld.writeJson(c,B),Wc.trace(`Leaf server config written to ${c}`))}a(oZ,"generateNatsConfig");async function cd(e){let t=Qc.get(e);return Vo.isEmpty(t)&&_d(`port undefined for '${e}'`),await Vo.isPortTaken(t)&&_d(`'${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(cd,"isPortAvailable");function _d(e){let t=`Error generating clustering config: ${e}`;Wc.error(t),console.error(t),process.exit(1)}a(_d,"generateNatsConfigError");async function aZ(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(_){Wc.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 Vo.async_set_timeout(o*(i*2))}let c="0".repeat(nZ),u=xo.join(Qc.get(je.ROOTPATH),ko,r);await ld.writeFile(u,c),await ld.remove(u),Wc.notify(e,"started.")}a(aZ,"removeNatsConfig")});var QD=T((t_e,WD)=>{"use strict";var yr=X(),cZ=sc(),ae=b(),zc=ke(),fn=require("path"),{PACKAGE_ROOT:fd}=b(),VD=X(),dd=$(),$o="/dev/null",uZ=fn.join(fd,"launchServiceScripts"),$D=fn.join(fd,"utility/scripts"),lZ=fn.join($D,ae.HDB_RESTART_SCRIPT),YD=fn.resolve(fd,"dependencies",`${process.platform}-${process.arch}`,zc.NATS_BINARY_NAME);function KD(){let t=cZ.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 dd.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dd.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:fd}}a(KD,"generateMainServerConfig");var _Z=9930;function dZ(){yr.initSync(!0);let e=yr.get(ae.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",zc.NATS_CONFIG_FILES.HUB_SERVER),r=fn.join(yr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=VD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=zc.LOG_LEVEL_FLAGS[yr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==_Z?"-"+s:""),script:YD,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 yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(dZ,"generateNatsHubServerConfig");var fZ=9940;function EZ(){yr.initSync(!0);let e=yr.get(ae.CONFIG_PARAMS.ROOTPATH),t=fn.join(e,"clustering",zc.NATS_CONFIG_FILES.LEAF_SERVER),r=fn.join(yr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=VD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=zc.LOG_LEVEL_FLAGS[yr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==fZ?"-"+s:""),script:YD,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 yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(EZ,"generateNatsLeafServerConfig");function hZ(){yr.initSync();let e=fn.join(yr.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:uZ,autorestart:!1};return yr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$o,t.error_file=$o),t}a(hZ,"generateClusteringUpgradeV4ServiceConfig");function mZ(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return dd.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=dd.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:$D},script:lZ}}a(mZ,"generateRestart");function pZ(){return{apps:[KD()]}}a(pZ,"generateAllServiceConfigs");WD.exports={generateAllServiceConfigs:pZ,generateMainServerConfig:KD,generateRestart:mZ,generateNatsHubServerConfig:dZ,generateNatsLeafServerConfig:EZ,generateClusteringUpgradeV4ServiceConfig:hZ}});var BS=T((n_e,aU)=>{"use strict";var Ae=b(),SZ=$(),En=US(),Jc=dt(),xs=ke(),Jn=QD(),Ed=X(),Xn=F(),TZ=Gs(),{startWorker:zD,onMessageFromWorkers:RZ}=Ze(),gZ=Go(),s_e=require("util"),AZ=require("child_process"),OZ=require("fs"),{execFile:NZ}=AZ,pe;aU.exports={enterPM2Mode:bZ,start:jn,stop:MS,reload:XD,restart:jD,list:PS,describe:eU,connect:hn,kill:LZ,startAllServices:DZ,startService:vS,getUniqueServicesList:tU,restartAllServices:UZ,isServiceRegistered:rU,reloadStopStart:sU,restartHdb:ZD,deleteProcess:wZ,startClusteringProcesses:iU,startClusteringThreads:oU,isHdbRestartRunning:CZ,isClusteringRunning:PZ,stopClustering:MZ,reloadClustering:vZ};var Xc=!1;RZ(e=>{e.type==="restart"&&Ed.initSync(!0)});function bZ(){Xc=!0}a(bZ,"enterPM2Mode");function hn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Xn.setupConsoleLogging(),r&&t(r),e(s)})})}a(hn,"connect");var nr,yZ=10,JD;function jn(e,t=!1){if(Xc)return IZ(e);let r=NZ(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=nr.indexOf(r);o>-1&&nr.splice(o,1),!JD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<yZ&&(OZ.existsSync(En.getHubConfigPath())?jn(e):(await En.generateNatsConfig(!0),jn(e),await new Promise(c=>setTimeout(c,3e3)),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=Ed.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Xn.OUTPUTS.STDERR:Xn.OUTPUTS.STDOUT;Xn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=xs.LOG_LEVELS[f]}if(xs.LOG_LEVEL_HIERARCHY[o]>=xs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===xs.LOG_LEVELS.ERR||l===xs.LOG_LEVELS.WRN?Xn.OUTPUTS.STDERR:Xn.OUTPUTS.STDOUT;Xn.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),nr=[],!nr&&!t){let i=a(()=>{JD=!0,nr&&(nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}nr.push(r)}a(jn,"start");function IZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(IZ,"startWithPM2");function MS(e){if(!Xc){for(let t of nr||[])t.name===e&&(nr.splice(nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(MS,"stop");function XD(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(XD,"reload");function jD(e){if(!Xc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(jD,"restart");function wZ(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(wZ,"deleteProcess");async function ZD(){await jn(Jn.generateRestart())}a(ZD,"restartHdb");async function CZ(){let e=await PS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(CZ,"isHdbRestartRunning");function PS(){return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(PS,"list");function eU(e){return new Promise(async(t,r)=>{try{await hn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(eU,"describe");function LZ(){if(!Xc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await hn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(LZ,"kill");async function DZ(){try{await iU(),await oU(),await jn(Jn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(DZ,"startAllServices");async function vS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Jn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Jn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Jn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Jn.generateNatsHubServerConfig(),await jn(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Jn.generateNatsLeafServerConfig(),await jn(r,t),await En.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Jn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await jn(r)}catch(r){throw pe?.disconnect(),r}}a(vS,"startService");async function tU(){try{let e=await PS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw pe?.disconnect(),e}}a(tU,"getUniqueServicesList");async function UZ(e=[]){try{let t=!1,r=await tU();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 jD(o))}t&&await sU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(UZ,"restartAllServices");async function rU(e){if(nr?.find(r=>r.name===e))return!0;let t=await gZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(rU,"isServiceRegistered");async function sU(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?Ed.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Ed.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await eU(e),s=SZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await MS(e),await vS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await ZD():await XD(e)}a(sU,"reloadStopStart");var nU;async function iU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await vS(r,e)}}a(iU,"startClusteringProcesses");async function oU(){nU=zD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Jc.createWorkQueueStream(xs.WORK_QUEUE_CONSUMER_NAMES),await Jc.updateIngestStreamConsumer(),await Jc.updateLocalStreams();let e=await TZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){Xn.info("Starting clustering upgrade 4.0.0 process"),zD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(oU,"startClusteringThreads");async function MZ(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await nU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await MS(t)}}a(MZ,"stopClustering");async function PZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await rU(t)===!1)return!1}return!0}a(PZ,"isClusteringRunning");async function vZ(){await En.generateNatsConfig(!0),await Jc.reloadNATSHub(),await Jc.reloadNATSLeaf(),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await En.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(vZ,"reloadClustering")});var Sd=T((o_e,EU)=>{"use strict";var BZ=require("minimist"),{isMainThread:qS,parentPort:lU}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:jc}=Ve,ks=F(),GS=$(),hd=US(),Yo=dt(),HS=ke(),_U=hr(),Vs=BS(),cU=Go(),HZ=oE(),{restartWorkers:md,onMessageByType:FZ}=Ze(),{handleHDBError:qZ,hdb_errors:GZ}=j(),{HTTP_STATUS_CODES:xZ}=GZ,pd=X();pd.initSync();var Zc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,kZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",uU="Clustering is not enabled so cannot be restarted",VZ="Invalid service",Ko,Yr;EU.exports={restart:dU,restartService:xS};qS&&FZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?xS({service:e.workerType}):dU({operation:"restart"})});async function dU(e){Yr=Object.keys(e).length===0,Ko=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=BZ(process.argv);if(t.service){await xS(t);return}if(Yr&&!Ko){console.error(kZ);return}if(Yr&&console.log(Zc),Ko){Vs.enterPM2Mode(),ks.notify(Zc);let r=HZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return GS.isEmptyOrZeroLength(Object.keys(r))||_U.updateConfigValue(void 0,void 0,r,!0,!0),YZ(),Zc}return qS?(ks.notify(Zc),setTimeout(()=>{md()},50)):lU.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Zc}a(dU,"restart");async function xS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw qZ(new Error,VZ,xZ.BAD_REQUEST,void 0,void 0,!0);if(Ko=await Vs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!qS)return lU.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case jc.clustering:if(!pd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uU;break}Yr&&console.log("Restarting clustering"),ks.notify("Restarting clustering"),await fU();break;case jc.clustering_config:case jc["clustering config"]:if(!pd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=uU;break}Yr&&console.log("Restarting clustering_config"),ks.notify("Restarting clustering_config"),await Vs.reloadClustering();break;case"custom_functions":case"custom functions":case jc.harperdb:case jc.http_workers:if(Yr&&!Ko){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),ks.notify("Restarting http_workers"),Yr?await Vs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{md("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ks.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(xS,"restartService");async function $Z(){await Yo.publishToStream(`${HS.SUBJECT_PREFIXES.TXN}.${HS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a($Z,"postDummyNatsMsg");async function YZ(){await fU(),await Vs.restart(Ve.HDB_PROC_DESCRIPTOR),await GS.async_set_timeout(2e3),pd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await FS(),Yr&&(await Yo.closeConnection(),process.exit(0))}a(YZ,"restartPM2Mode");async function fU(){if(!_U.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await cU.getHDBProcessInfo()).clustering.length===0)ks.trace("Clustering not running, restart will start clustering services"),await hd.generateNatsConfig(!0),await Vs.startClusteringProcesses(),await Vs.startClusteringThreads(),await FS(),Yr&&await Yo.closeConnection();else{await $Z(),await hd.generateNatsConfig(!0),Ko?(ks.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Vs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await cU.getHDBProcessInfo()).clustering.forEach(n=>{ks.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await GS.async_set_timeout(3e3),await FS(),await Yo.updateLocalStreams(),Yr&&await Yo.closeConnection(),ks.trace("Restart clustering restarting ingest and reply service threads");let t=md(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=md(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(fU,"restartClustering");async function FS(){await hd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(FS,"removeNatsConfig")});var bU=T((u_e,NU)=>{"use strict";var c_e=require("lodash"),ir=b(),{handleHDBError:hU,hdb_errors:KZ}=j(),{HDB_ERROR_MSGS:WZ,HTTP_STATUS_CODES:QZ}=KZ,kS=F();NU.exports={getRolePermissions:JZ};var Hi=Object.create(null),zZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),TU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),RU=a((e=!1,t=!1,r=!1,s=!1)=>({[ir.PERMS_CRUD_ENUM.READ]:e,[ir.PERMS_CRUD_ENUM.INSERT]:t,[ir.PERMS_CRUD_ENUM.UPDATE]:r,[ir.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),VS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...RU(t,r,s,n)}),"table_perms_template"),mU=a((e,t=RU())=>({attribute_name:e,describe:OU(t),[eu]:t[eu],[$S]:t[$S],[YS]:t[YS]}),"attr_perms_template"),pU=a((e,t=!1)=>({attribute_name:e,describe:t,[eu]:t}),"timestamp_attr_perms_template"),{READ:eu,INSERT:$S,UPDATE:YS}=ir.PERMS_CRUD_ENUM,gU=Object.values(ir.PERMS_CRUD_ENUM),AU=[eu,$S,YS];function JZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Hi[t]&&Hi[t].key===s)return Hi[t].perms;let n=XZ(e,r);return Hi[t]?Hi[t].key=s:Hi[t]=zZ(s),Hi[t].perms=n,n}catch(r){if(!e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<ir.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw kS.error(s),kS.debug(r),hU(new Error,WZ.OUTDATED_PERMS_TRANSLATION_ERROR,QZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw kS.error(s),hU(new Error)}}}a(JZ,"getRolePermissions");function XZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[ir.SYSTEM_SCHEMA_NAME]=s[ir.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=jZ(t[i]);return}r[i]=TU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=ZZ(c,u);r[i].describe||gU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=VS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VS()})}),r}a(XZ,"translateRolePermissions");function jZ(e){let t=TU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VS(!0,!0,!0,!0,!0)}),t}a(jZ,"createStructureUserPermissions");function ZZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return ir.TIME_STAMP_NAMES.includes(d)&&(f=pU(d,l[eu])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=mU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=OU(l),n.attribute_permissions.push(l),c||e5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=pU(_):l=mU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=SU(n),n}else return e.describe=SU(e),e}a(ZZ,"getTableAttrPerms");function SU(e){return gU.filter(t=>e[t]).length>0}a(SU,"getSchemaTableDescribePerm");function OU(e){return AU.filter(t=>e[t]).length>0}a(OU,"getAttributeDescribePerm");function e5(e,t){AU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(e5,"checkForHashPerms")});var yU={};Qe(yU,{Resources:()=>Td,keyArrayToString:()=>Wo,resetResources:()=>t5,resources:()=>Zn});function t5(){return Zn=new Td}function Wo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Td,Zn,tu=Te(()=>{Ei();Td=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(t5,"resetResources");a(Wo,"keyArrayToString")});var Fi,KS=Te(()=>{Fi=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 ru={};Qe(ru,{authentication:()=>PU,bypassAuth:()=>c5,login:()=>l5,logout:()=>_5,start:()=>u5});function c5(){MU=!0}async function PU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?i5?n5:[]:s5?r5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Fi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Rd&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Rd&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Rd){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 wU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new Ad.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?IU.notify(S):IU.error(S)},"authAuditLog"),d;if(s){if(d=qi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,gd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,gd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return a5&&(qi.get(h)||(qi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:ei({error:A.message},e)})}qi.set(s,d),o5&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):MU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,LU.getSuperUser)());Rd&&(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,wU.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 Fi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function u5({server:e,port:t}){e.request(PU,{port:t||"all"}),CU||(CU=!0,setInterval(()=>{qi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),UU.user.addListener(()=>{qi=new Map}))}async function l5(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function _5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var LU,gd,DU,Kr,It,Ad,UU,IU,r5,s5,n5,i5,wU,Rd,MU,o5,a5,qi,CU,Od=Te(()=>{LU=D(xr());Mr();tu();gd=D(Pc());fe();DU=require("uuid"),Kr=D(X()),It=D(b()),Ad=D(F()),UU=D(ic());KS();Qo();IU=(0,Ad.loggerWithTag)("auth-event");Kr.initSync();r5=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),s5=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),n5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),i5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),wU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Rd=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,MU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,o5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,a5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,qi=new Map;ut.onInvalidatedUser(()=>{qi=new Map});a(c5,"bypassAuth");a(PU,"authentication");a(u5,"start");a(l5,"login");a(_5,"logout")});var xU=T((g_e,GU)=>{"use strict";var Se=require("joi"),vU=require("fs-extra"),BU=require("path"),pn=qe(),HU=X(),FU=b(),qU=F(),{hdb_errors:d5}=j(),{HDB_ERROR_MSGS:Gt}=d5,mn=/^[a-zA-Z0-9-_]+$/;GU.exports={getDropCustomFunctionValidator:E5,setCustomFunctionValidator:h5,addComponentValidator:T5,dropCustomFunctionProjectValidator:R5,packageComponentValidator:g5,deployComponentValidator:A5,setComponentFileValidator:m5,getComponentFileValidator:S5,dropComponentFileValidator:p5};function Nd(e,t,r){try{let s=HU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),n=BU.join(s,t);return vU.existsSync(n)?e?t:r.message(Gt.PROJECT_EXISTS):e?r.message(Gt.NO_PROJECT):t}catch(s){return qU.error(s),r.message(Gt.VALIDATION_ERR)}}a(Nd,"checkProjectExists");function su(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(su,"checkFilePath");function f5(e,t,r,s){try{let n=HU.get(FU.CONFIG_PARAMS.COMPONENTSROOT),i=BU.join(n,e,t,r+".js");return vU.existsSync(i)?r:s.message(Gt.NO_FILE)}catch(n){return qU.error(n),s.message(Gt.VALIDATION_ERR)}}a(f5,"checkFileExists");function E5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Nd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(mn).custom(f5.bind(null,e.project,e.type)).custom(su).required().messages({"string.pattern.base":Gt.BAD_FILE_NAME})});return pn.validateBySchema(e,t)}a(E5,"getDropCustomFunctionValidator");function h5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Nd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(su).required(),function_content:Se.string().required()});return pn.validateBySchema(e,t)}a(h5,"setCustomFunctionValidator");function m5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(su).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(m5,"setComponentFileValidator");function p5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(su).optional()});return pn.validateBySchema(e,t)}a(p5,"dropComponentFileValidator");function S5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(su).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return pn.validateBySchema(e,t)}a(S5,"getComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Nd.bind(null,!1)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(T5,"addComponentValidator");function R5(e){let t=Se.object({project:Se.string().pattern(mn).custom(Nd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return pn.validateBySchema(e,t)}a(R5,"dropCustomFunctionProjectValidator");function g5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return pn.validateBySchema(e,t)}a(g5,"packageComponentValidator");function A5(e){let t=Se.object({project:Se.string().pattern(mn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":Gt.BAD_PACKAGE}),package:Se.string().optional()});return pn.validateBySchema(e,t)}a(A5,"deployComponentValidator")});var wd=T((O_e,QU)=>{"use strict";var bd=require("joi"),yd=require("path"),kU=require("fs-extra"),{exec:O5}=require("child_process"),N5=require("util"),VU=N5.promisify(O5),nu=b(),{handleHDBError:zo,hdb_errors:b5}=j(),{HTTP_STATUS_CODES:Jo}=b5,iu=X(),y5=qe(),Xo=F();iu.initSync();var WS=iu.get(nu.CONFIG_PARAMS.COMPONENTSROOT),$U="npm install --omit=dev --json",I5=`${$U} --dry-run`;QU.exports={installModules:D5,auditModules:U5,installAllRootModules:w5,uninstallRootModule:C5,linkHarperdb:L5};async function w5(e=!1){await Id(),await ou(e?"npm install --ignore-scripts":"npm install",iu.get(nu.CONFIG_PARAMS.ROOTPATH))}a(w5,"installAllRootModules");async function C5(e){await ou(`npm uninstall ${e}`,iu.get(nu.CONFIG_PARAMS.ROOTPATH))}a(C5,"uninstallRootModule");async function L5(){await Id(),await ou(`npm link ${nu.PACKAGE_ROOT}`,iu.get(nu.CONFIG_PARAMS.ROOTPATH))}a(L5,"linkHarperdb");async function ou(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await VU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
+
`,""))}return s&&!s.includes("Debugger listening")&&Xo.error("Error running NPM command:",e,s),Xo.trace(r,s),r.replace(`
|
|
13
|
+
`,"")}a(ou,"runCommand");async function D5(e){Xo.info(`starting installModules for request: ${e}`);let t=WU(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?I5:$U;await Id(),await KU(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 _=yd.join(WS,u),l,d=null;try{let{stdout:f,stderr:E}=await VU(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(KU,"parseNPMStdErr");async function M5(e){Jo.info(`starting auditModules for request: ${e}`);let t=QU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r}=e;await yd(),await WU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=bd.join(QS,o);s[o]={npm_output:null,npm_error:null};try{let u=await iu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KU(u.stderr)}}return Jo.info(`finished auditModules with response ${s}`),s}a(M5,"auditModules");async function yd(){try{return await iu("npm -v"),!0}catch{throw Qo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",zo.BAD_REQUEST,void 0,void 0,!0)}}a(yd,"checkNPMInstalled");async function WU(e){if(!Array.isArray(e)||e.length===0)throw Qo(new Error,"projects argument must be an array with at least 1 element",zo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=bd.join(QS,i.toString());if(!await VU.pathExists(o)){t.push(i);continue}let u=bd.join(o,"package.json");await VU.pathExists(u)||r.push(i)}if(t.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,zo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Qo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,zo.BAD_REQUEST,void 0,void 0,!0)}a(WU,"checkProjectPaths");function QU(e){let t=Nd.object({projects:Nd.array().min(1).items(Nd.string()).required(),dry_run:Nd.boolean().default(!1)});return I5.validateBySchema(e,t)}a(QU,"modulesValidator")});var JS=T((y_e,eM)=>{"use strict";var Xo=require("fs-extra"),zS=require("path"),wd=G(),JU=$(),Cd=b(),ZU=X(),P5=hr();eM.exports=v5;async function v5(){let e=B5(),t=ZU.get(Cd.CONFIG_PARAMS.ROOTPATH),r=zS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.PACKAGE_ROOT}},n=zS.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(JU.isEmptyOrZeroLength(e))return;if(u.code!==Cd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!JU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await XU(_);s.dependencies[u]=l+_}if(!o){wd.notify("Installing components"),await jU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await XU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(wd.notify("Removing component",u),c=!0);c&&(wd.notify("Updating components."),await jU(r,s,i))}a(v5,"installComponents");function B5(){let e=P5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(B5,"getComponentsConfig");async function XU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":zS.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(XU,"getPkgPrefix");async function jU(e,t,r){wd.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(ZU.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Xo.writeFile(e,JSON.stringify(r,null," ")):await Xo.unlink(e),s}}a(jU,"installPackages")});var ZS=T((C_e,nM)=>{"use strict";var Le=require("fs-extra"),XS=require("fast-glob"),le=require("path"),rM=require("tar-fs"),w_e=require("uuid").v4,jS=require("normalize-path"),$s=kU(),St=G(),Me=b(),nt=X(),ou=hr(),H5=$(),{PACKAGE_ROOT:q5}=b(),{handleHDBError:Tt,hdb_errors:F5}=j(),{basename:G5}=require("path"),x5=JS(),sM=X(),k5=b(),{Readable:V5}=require("stream"),{isMainThread:$5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Rt}=F5,Y5=le.join(q5,"application-template"),tM=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function K5(){St.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Fi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(K5,"customFunctionsStatus");function W5(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{XS.sync(jS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:XS.sync(jS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:XS.sync(jS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Fi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(W5,"getCustomFunctions");function Q5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Fi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(Q5,"getCustomFunction");function z5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Fi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(z5,"setCustomFunction");function J5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=$s.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Fi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(J5,"dropCustomFunction");function X5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(Y5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Fi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(X5,"addComponent");function j5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!H5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return ou.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Fi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(j5,"dropCustomFunctionProject");async function Z5(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(tM);let i=le.join(tM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),rM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(Z5,"packageComponent");async function e8(e){e.project&&(e.project=le.parse(e.project).name);let t=$s.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=V5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(rM.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await ou.addConfig(s,{package:i}),!n){await x5();let f=sM.get(k5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if($5)return;let c=new Map;c.isWorker=!0;let u=(Dd(),Z(Ld)),_;u.setErrorReporter(f=>_=f);let l=G5(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(e8,"deployComponent");async function t8(){let e=ou.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(Dd(),Z(Ld)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(t8,"getComponents");async function r8(e){let t=$s.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=ou.getConfigObj()[e.project]||e.project==="harperdb"?le.join(sM.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(r8,"getComponentFile");async function s8(e){let t=$s.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(s8,"setComponentFile");async function n8(e){let t=$s.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),ou.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(n8,"dropComponent");nM.exports={customFunctionsStatus:K5,getCustomFunctions:W5,getCustomFunction:Q5,setCustomFunction:z5,dropCustomFunction:J5,addComponent:X5,dropCustomFunctionProject:j5,packageComponent:Z5,deployComponent:e8,getComponents:t8,getComponentFile:r8,setComponentFile:s8,dropComponent:n8}});var eT=T((D_e,oM)=>{"use strict";var Ys=require("joi"),iM=Fe();oM.exports={readTransactionLogValidator:i8,deleteTransactionLogsBeforeValidator:o8};function i8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),from:Ys.date().timestamp(),to:Ys.date().timestamp(),limit:Ys.number().min(1)});return iM.validateBySchema(e,t)}a(i8,"readTransactionLogValidator");function o8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),timestamp:Ys.date().timestamp().required()});return iM.validateBySchema(e,t)}a(o8,"deleteTransactionLogsBeforeValidator")});var Md=T((M_e,_M)=>{"use strict";var tT=b(),Ud=dt(),aM=$(),cM=X(),uM=an(),{handleHDBError:jo,hdb_errors:a8}=j(),{HTTP_STATUS_CODES:Zo}=a8,{readTransactionLogValidator:c8,deleteTransactionLogsBeforeValidator:u8}=eT(),lM="This operation relies on clustering and cannot run with it disable.",l8="Logs successfully deleted from transaction log.",_8="All logs successfully deleted from transaction log.";_M.exports={readTransactionLog:d8,deleteTransactionLogsBefore:f8};async function*d8(e){let t=c8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=aM.checkSchemaTableExist(r,s);if(n)throw jo(new Error,n,Zo.NOT_FOUND,void 0,void 0,!0);let i=uM.createNatsTableStreamName(r,s),o=await Ud.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===tT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(d8,"readTransactionLog");async function f8(e){let t=u8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!cM.get(tT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,lM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=aM.checkSchemaTableExist(r,s);if(i)throw jo(new Error,i,Zo.NOT_FOUND,void 0,void 0,!0);let o=uM.createNatsTableStreamName(r,s),{jsm:c}=await Ud.getNATSReferences(),u=await Ud.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=l8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=_8):d=(await Ud.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(f8,"deleteTransactionLogsBefore")});var fM=T((v_e,dM)=>{"use strict";var rT=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};dM.exports=rT});var hM=T((H_e,EM)=>{"use strict";var sT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};EM.exports=sT});var iT=T((F_e,pM)=>{"use strict";var mM=fM(),E8=hM(),{HDB_ERROR_MSGS:h8}=dr(),nT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=h8.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new mM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new E8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new mM(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};pM.exports=nT});var Hd=T((x_e,MM)=>{"use strict";var oT=Gr(),Pd=Fr(),Qr=M_(),uu=Si(),aT=Oi(),m8=Tp(),p8=LC(),lu=xr(),vd=wp(),ft=G(),S8=Dp(),T8=Hc(),R8=dS(),g8=xc(),A8=fS(),O8=ES(),N8=sd(),b8=SS(),cT=gS(),pn=$(),y8=ID(),uT=yS(),RM=pd(),Wr=b(),gM=yU(),I8=Fo(),AM=Mc(),OM=(Ad(),Z(tu)),NM=hr(),Ir=ZS(),w8=require("alasql"),bM=Md(),yM=Id(),IM=iT(),{handleHDBError:or,hdb_errors:wM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:au}=wM,v=new Map,CM="delete",ei="insert",Sn="read",Gi="update",cu="describe",SM=uu.describeSchema.name,TM=uu.describeTable.name,LM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},C8="catchup",L8="handleGetJob",D8="handleGetJobsByStartDate",Bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},U8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],DM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(oT.insert.name,new q(!1,[ei]));v.set(oT.update.name,new q(!1,[Gi]));v.set(oT.upsert.name,new q(!1,[ei,Gi]));v.set(Pd.searchByConditions.name,new q(!1,[Sn]));v.set(Pd.searchByHash.name,new q(!1,[Sn]));v.set(Pd.searchByValue.name,new q(!1,[Sn]));v.set(Pd.search.name,new q(!1,[Sn]));v.set(Qr.createSchema.name,new q(!0,[]));v.set(Qr.createTable.name,new q(!0,[]));v.set(Qr.createAttribute.name,new q(!1,[ei]));v.set(Qr.dropSchema.name,new q(!0,[]));v.set(Qr.dropTable.name,new q(!0,[]));v.set(Qr.dropAttribute.name,new q(!0,[]));v.set(uu.describeSchema.name,new q(!1,[Sn]));v.set(uu.describeTable.name,new q(!1,[Sn]));v.set(aT.deleteRecord.name,new q(!1,[CM]));v.set(lu.addUser.name,new q(!0,[]));v.set(lu.alterUser.name,new q(!0,[]));v.set(lu.dropUser.name,new q(!0,[]));v.set(lu.listUsersExternal.name,new q(!0,[]));v.set(vd.listRoles.name,new q(!0,[]));v.set(vd.addRole.name,new q(!0,[]));v.set(vd.alterRole.name,new q(!0,[]));v.set(vd.dropRole.name,new q(!0,[]));v.set(S8.name,new q(!0,[]));v.set(T8.name,new q(!0,[]));v.set(R8.name,new q(!0,[]));v.set(g8.name,new q(!0,[]));v.set(A8.name,new q(!0,[]));v.set(O8.name,new q(!0,[]));v.set(cT.setRoutes.name,new q(!0,[]));v.set(cT.getRoutes.name,new q(!0,[]));v.set(cT.deleteRoutes.name,new q(!0,[]));v.set(NM.setConfiguration.name,new q(!0,[]));v.set(N8.clusterStatus.name,new q(!0,[]));v.set(b8.name,new q(!0,[]));v.set(uT.getFingerprint.name,new q(!0,[]));v.set(uT.setLicense.name,new q(!0,[]));v.set(aT.deleteFilesBefore.name,new q(!0,[]));v.set(aT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(RM.restart.name,new q(!0,[]));v.set(RM.restartService.name,new q(!0,[]));v.set(m8.name,new q(!0,[]));v.set(p8.name,new q(!0,[Sn]));v.set(I8.systemInformation.name,new q(!0,[]));v.set(NM.getConfiguration.name,new q(!0,[]));v.set(bM.readTransactionLog.name,new q(!0,[]));v.set(bM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(yM.installModules.name,new q(!0,[]));v.set(yM.auditModules.name,new q(!0,[]));v.set(AM.createTokens.name,new q(!1,[]));v.set(AM.refreshOperationToken.name,new q(!1,[]));v.set(OM.login.name,new q(!1,[]));v.set(OM.logout.name,new q(!1,[]));v.set(Ir.customFunctionsStatus.name,new q(!0,[]));v.set(Ir.getCustomFunctions.name,new q(!0,[]));v.set(Ir.getComponents.name,new q(!0,[]));v.set(Ir.getComponentFile.name,new q(!0,[]));v.set(Ir.setComponentFile.name,new q(!0,[]));v.set(Ir.dropComponent.name,new q(!0,[]));v.set(Ir.getCustomFunction.name,new q(!0,[]));v.set(Ir.setCustomFunction.name,new q(!0,[]));v.set(Ir.dropCustomFunction.name,new q(!0,[]));v.set(Ir.addComponent.name,new q(!0,[]));v.set(Ir.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ir.packageComponent.name,new q(!0,[]));v.set(Ir.deployComponent.name,new q(!0,[]));v.set(uT.getRegistrationInfo.name,new q(!1,[]));v.set(lu.userInfo.name,new q(!1,[]));v.set(uu.describeAll.name,new q(!1,[]));v.set(L8,new q(!1,[]));v.set(D8,new q(!0,[]));v.set(C8,new q(!0,[]));v.set(Bd.CSV_DATA_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_URL_LOAD,new q(!1,[ei,Gi]));v.set(Bd.CSV_FILE_LOAD,new q(!1,[ei,Gi]));v.set(Bd.IMPORT_FROM_S3,new q(!1,[ei,Gi]));v.set(DM.EXPORT_TO_S3,new q(!0,[]));v.set(DM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[CM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Sn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ei]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Gi]));MM.exports={verifyPerms:P8,verifyPermsAst:M8,verifyBulkLoadAttributePerms:B8};function M8(e,t,r){if(pn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new IM,n=new y8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&LM[r])throw or(new Error,wt.DROP_SYSTEM,au.FORBIDDEN);if(c&&!u)return null;let _=gM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof w8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=UM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=_T(t.role.permission,f,d[E]);lT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(M8,"verifyPermsAst");function P8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),or(new Error,wt.DEFAULT_INVALID_REQUEST,au.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new IM;if(pn.isEmptyOrZeroLength(e.hdb_user.role)||pn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(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 or(new Error,wt.DROP_SYSTEM,au.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(U8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=gM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===SM||r===TM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===SM&&(!d[n]||!d[n][cu]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===TM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][cu]))return c.handleInvalidItem(wt.TABLE_NOT_FOUND(n,i))}}let f=UM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Wr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=v8(e),h=_T(e.hdb_user.role.permission,n,i);return lT(E,h,r,i,n,c,s),c.getPermsResponse()}a(P8,"verifyPerms");function UM(e,t,r,s,n){if(pn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),or(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw ft.info(`operation ${t} not found.`),or(new Error,wt.OP_NOT_FOUND(t),au.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(wt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][cu]===!1){s.addInvalidItem(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[cu]===!1)s.addInvalidItem(wt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!pn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(ft.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=wt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),or(wM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(UM,"hasPermissions");function lT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(pn.isEmptyOrZeroLength(t))return ft.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[cu]===!1){i.addInvalidItem(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!==Sn)throw or(new Error,wt.SYSTEM_TIMESTAMP_PERMS_ERR,au.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(wt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(lT,"checkAttributePerms");function v8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ft.info(r)}return t}a(v8,"getRecordAttributes");function _T(e,t,r){let s=new Map;if(pn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(_T,"getAttributePermissions");function B8(e,t,r,s,n,i,o){let c=new Set(i),u=_T(e,s,n);lT(c,u,t,n,s,o,r)}a(B8,"verifyBulkLoadAttributePerms")});var Fd=T((V_e,qM)=>{"use strict";qM.exports={evaluateSQL:z8,processAST:HM,convertSQLToAST:BM,checkASTPermissions:vM};var H8=Gr(),PM=require("util"),q8=PM.callbackify(H8.insert),F8=Fr().search,G8=Ow().update,x8=PM.callbackify(G8),k8=bw().convertDelete,ti=require("alasql"),V8=Hd(),qd=G(),$8=T_(),Y8=$(),_u=b(),{hdb_errors:K8,handleHDBError:dT}=j(),{HTTP_STATUS_CODES:fT}=K8;$8(ti);var W8=403,Q8="There was a problem performing this insert. Please check the logs and try again.",ET=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function z8(e,t){let r=e.parsed_sql_object;if(!r){r=BM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ti.yy.Insert?s=n.into.databaseid:n instanceof ti.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ti.yy.Update||n instanceof ti.yy.Delete?s=n.table.databaseid:qd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ti.yy.Select)&&Y8.isEmptyOrZeroLength(s))return t("No schema specified",null)}HM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(z8,"evaluateSQL");function vM(e,t){let r;try{r=V8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(vM,"checkASTPermissions");function BM(e){let t=new ET;if(!e)throw dT(new Error,"The 'sql' parameter is missing from the request body",fT.BAD_REQUEST);try{let r=e.trim(),s=ti.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
-
`);throw s[1]?dT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,fT.BAD_REQUEST):dT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",fT.BAD_REQUEST)}return t}a(BM,"convertSQLToAST");function HM(e,t,r){try{let s=J8;if(!e.bypass_auth&&!t.permissions_checked){let i=vM(e,t);if(i&&i.length>0)return r(W8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case _u.VALID_SQL_OPS_ENUM.SELECT:s=F8,n=t.ast.statements[0];break;case _u.VALID_SQL_OPS_ENUM.INSERT:s=X8;break;case _u.VALID_SQL_OPS_ENUM.UPDATE:s=x8;break;case _u.VALID_SQL_OPS_ENUM.DELETE:s=k8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(HM,"processAST");function J8(e,t){qd.info(e),t("unknown sql statement")}a(J8,"nullFunction");function X8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=j8(i,e.values)}catch(o){return r(o)}q8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){qd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(X8,"convertInsert");function j8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ti.compile(`SELECT ${n.toString()} AS [${_u.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(Q8)}}a(j8,"createDataObjects")});var hT=T((Y_e,GM)=>{"use strict";var{S3:Z8,GetObjectCommand:e6}=require("@aws-sdk/client-s3");GM.exports={getFileStreamFromS3:t6,getS3AuthObj:FM};async function t6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new e6(r))).Body}a(t6,"getFileStreamFromS3");function FM(e,t,r){return new Z8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FM,"getS3AuthObj")});var Gd=T((W_e,JM)=>{"use strict";var VM=Fr(),r6=Fd(),s6=hT(),{AsyncParser:n6,Transform:i6}=require("json2csv"),fu=require("stream"),wr=$(),mT=require("fs-extra"),o6=require("path"),zr=G(),{promisify:$M}=require("util"),du=$(),{handleHDBError:it,hdb_errors:a6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:ot}=a6,{streamAsJSON:c6}=GE(),{Upload:u6}=require("@aws-sdk/lib-storage"),xM=["search_by_value","search_by_hash","sql"],kM=["json","csv"],YM="json",KM="csv",l6="Successfully exported JSON locally.",_6="Successfully exported CSV locally.",d6=1e3,f6=VM.searchByHash,E6=VM.searchByValue,h6=$M(r6.evaluateSQL),m6=$M(fu.finished);JM.exports={export_to_s3:R6,export_local:p6,toCsvStream:WM};async function p6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=QM(e);if(!wr.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(wr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),it(new Error,ar.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(wr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(o6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=wr.buildFolderPath(e.path,r);await S6(e.path);let n=await zM(e);return await T6(s,e.format,n)}a(p6,"export_local");async function S6(e){if(zr.trace("in confirmPath"),wr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,zr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(S6,"confirmPath");async function T6(e,t,r){if(zr.trace("in saveToLocal"),du.isEmptyOrZeroLength(e))throw it(new Error,ar.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmptyOrZeroLength(t))throw it(new Error,ar.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(du.isEmpty(r))throw it(new Error,ar.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===YM){let s=mT.createWriteStream(e);return c6(r).pipe(s),await m6(s),{message:l6,path:e}}else if(t===KM){let s=mT.createWriteStream(e),n=fu.Readable.from(r),i={},o={objectMode:!0};return await new n6(i,o).fromInput(n).toOutput(s).promise(!1),{message:_6,path:e}}throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(T6,"saveToLocal");async function R6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ar.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ar.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ar.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ar.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ar.MISSING_VALUE("key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ar.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=QM(e);if(!wr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await zM(e)}catch(u){throw zr.error(u),u}let s,n=await s6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new fu.PassThrough;if(e.format===KM){i=e.s3.key+".csv";let u=WM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===YM){i=e.s3.key+".json";let u=new fu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%d6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST);return new u6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(R6,"export_to_s3");function WM(e){let t=fu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new i6(r,s);return t.pipe(n)}a(WM,"toCsvStream");function QM(e){if(zr.trace("in exportCoreValidation"),wr.isEmpty(e.format))return"format missing";if(kM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${kM.join(", ")}`;let t=e.search_operation.operation;if(wr.isEmpty(t))return"search_operation.operation missing";if(xM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${xM.join(", ")}`}a(QM,"exportCoreValidation");async function zM(e){zr.trace("in getRecords");let t,r;if(du.isEmpty(e.search_operation)||du.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ar.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=E6;break;case"search_by_hash":t=f6;break;case"sql":t=h6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(zM,"getRecords")});var nP={};Qe(nP,{contentTypes:()=>ST,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>TT,serialize:()=>$d,serializeMessage:()=>Zn});function g6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function TT(e){e.register(O6,{serializers:[{regex:/^application\/json$/,serializer:xd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(Eu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kd.Readable.from((0,Ks.encodeIter)(t,Eu)):(0,Ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,xi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Vd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=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 $d(e,t,r){let s=jM&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Vd(t);if(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,Tn.createBrotliCompress)({params:{[Tn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Tn.constants.BROTLI_MODE_TEXT:Tn.constants.BROTLI_MODE_GENERIC,[Tn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>jM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Tn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Zn(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Vd(t);return r=t.serialize=s.serializer.serialize,r(e)}function N6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ea(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ct.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ct.get(e)?.deserialize||ZM(e,s);return o=>N6(o).then(i)}return e&&Ct.get(e)?.deserialize||ZM(e,s)}function ZM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function b6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var xd,pT,Ks,xi,Tn,kd,eP,tP,rP,Eu,Ct,ST,XM,sP,A6,O6,jM,Wo=Te(()=>{xd=D(GE()),pT=D(Gd()),Ks=require("msgpackr"),xi=require("cbor-x"),Tn=require("zlib"),kd=require("stream");Mr();eP=require("../index"),tP=D(X()),rP=D(b()),Eu={useRecords:!1,useToJSON:!0},Ct=new Map,ST=Ct;ut.contentTypes=ST;(0,eP._assignPackageExport)("contentTypes",ST);Ct.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});XM=new xi.Encoder(Eu);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(Eu).end(e)},serialize:XM.encode,deserialize:XM.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kd.Readable.from((0,Ks.encodeIter)(e,Eu)):(0,Ks.pack)(e)},serialize:Ks.pack,deserialize:Ks.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,pT.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 kd.Readable.from(b6(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
15
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=YU(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 Xo.info(`finished installModules with response ${i}`),i}a(D5,"installModules");function YU(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(YU,"parseNPMStdErr");async function U5(e){Xo.info(`starting auditModules for request: ${e}`);let t=WU(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r}=e;await Id(),await KU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=yd.join(WS,o);s[o]={npm_output:null,npm_error:null};try{let u=await ou("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=YU(u.stderr)}}return Xo.info(`finished auditModules with response ${s}`),s}a(U5,"auditModules");async function Id(){try{return await ou("npm -v"),!0}catch{throw zo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Jo.BAD_REQUEST,void 0,void 0,!0)}}a(Id,"checkNPMInstalled");async function KU(e){if(!Array.isArray(e)||e.length===0)throw zo(new Error,"projects argument must be an array with at least 1 element",Jo.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=yd.join(WS,i.toString());if(!await kU.pathExists(o)){t.push(i);continue}let u=yd.join(o,"package.json");await kU.pathExists(u)||r.push(i)}if(t.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Jo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw zo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Jo.BAD_REQUEST,void 0,void 0,!0)}a(KU,"checkProjectPaths");function WU(e){let t=bd.object({projects:bd.array().min(1).items(bd.string()).required(),dry_run:bd.boolean().default(!1)});return y5.validateBySchema(e,t)}a(WU,"modulesValidator")});var zS=T((b_e,ZU)=>{"use strict";var jo=require("fs-extra"),QS=require("path"),Cd=F(),zU=$(),Ld=b(),jU=X(),M5=hr();ZU.exports=P5;async function P5(){let e=v5(),t=jU.get(Ld.CONFIG_PARAMS.ROOTPATH),r=QS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Ld.PACKAGE_ROOT}},n=QS.join(t,"node_modules");await jo.ensureDir(n);let i,o=!0,c=!1;try{i=await jo.readJson(r)}catch(u){if(zU.isEmptyOrZeroLength(e))return;if(u.code!==Ld.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!zU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await JU(_);s.dependencies[u]=l+_}if(!o){Cd.notify("Installing components"),await XU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await JU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Cd.notify("Removing component",u),c=!0);c&&(Cd.notify("Updating components."),await XU(r,s,i))}a(P5,"installComponents");function v5(){let e=M5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(v5,"getComponentsConfig");async function JU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":QS.extname(e)||await jo.pathExists(e)?"file:":"github:"}a(JU,"getPkgPrefix");async function XU(e,t,r){Cd.trace("npm installing components package.json",t),await jo.writeFile(e,JSON.stringify(t,null," "));try{await wd().installAllRootModules(jU.get(Ld.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await jo.writeFile(e,JSON.stringify(r,null," ")):await jo.unlink(e),s}}a(XU,"installPackages")});var jS=T((w_e,sM)=>{"use strict";var Le=require("fs-extra"),JS=require("fast-glob"),_e=require("path"),tM=require("tar-fs"),I_e=require("uuid").v4,XS=require("normalize-path"),$s=xU(),ft=F(),Me=b(),nt=X(),au=hr(),B5=$(),{PACKAGE_ROOT:H5}=b(),{handleHDBError:Tt,hdb_errors:F5}=j(),{basename:q5}=require("path"),G5=zS(),rM=X(),x5=b(),{Readable:k5}=require("stream"),{isMainThread:V5}=require("worker_threads"),{HDB_ERROR_MSGS:Gi,HTTP_STATUS_CODES:Rt}=F5,$5=_e.join(H5,"application-template"),eM=_e.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Y5(){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(Y5,"customFunctionsStatus");function K5(){ft.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{JS.sync(XS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:JS.sync(XS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:JS.sync(XS(`${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(K5,"getCustomFunctions");function W5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=$s.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(W5,"getCustomFunction");function Q5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=$s.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(Q5,"setCustomFunction");function z5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=$s.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(z5,"dropCustomFunction");function J5(e){e.project&&(e.project=_e.parse(e.project).name);let t=$s.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($5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Gi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,n)}}a(J5,"addComponent");function X5(e){e.project&&(e.project=_e.parse(e.project).name);let t=$s.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(!B5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return au.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(X5,"dropCustomFunctionProject");async function j5(e){e.project&&(e.project=_e.parse(e.project).name);let t=$s.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;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(eM);let i=_e.join(eM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(_e.join(n,"node_modules"))}),tM.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(j5,"packageComponent");async function Z5(e){e.project&&(e.project=_e.parse(e.project).name);let t=$s.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(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=k5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(tM.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 au.addConfig(s,{package:i}),!n){await G5();let f=rM.get(x5.CONFIG_PARAMS.ROOTPATH);o=_e.join(f,"node_modules",s)}if(V5)return;let c=new Map;c.isWorker=!0;let u=(Ud(),Z(Dd)),_;u.setErrorReporter(f=>_=f);let l=q5(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(Z5,"deployComponent");async function e8(){let e=au.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{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=(Ud(),Z(Dd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(e8,"getComponents");async function t8(e){let t=$s.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=au.getConfigObj()[e.project]||e.project==="harperdb"?_e.join(rM.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(t8,"getComponentFile");async function r8(e){let t=$s.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=_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(r8,"setComponentFile");async function s8(e){let t=$s.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),au.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(s8,"dropComponent");sM.exports={customFunctionsStatus:Y5,getCustomFunctions:K5,getCustomFunction:W5,setCustomFunction:Q5,dropCustomFunction:z5,addComponent:J5,dropCustomFunctionProject:X5,packageComponent:j5,deployComponent:Z5,getComponents:e8,getComponentFile:t8,setComponentFile:r8,dropComponent:s8}});var ZS=T((L_e,iM)=>{"use strict";var Ys=require("joi"),nM=qe();iM.exports={readTransactionLogValidator:n8,deleteTransactionLogsBeforeValidator:i8};function n8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),from:Ys.date().timestamp(),to:Ys.date().timestamp(),limit:Ys.number().min(1)});return nM.validateBySchema(e,t)}a(n8,"readTransactionLogValidator");function i8(e){let t=Ys.object({schema:Ys.string().required(),table:Ys.string().required(),timestamp:Ys.date().timestamp().required()});return nM.validateBySchema(e,t)}a(i8,"deleteTransactionLogsBeforeValidator")});var Pd=T((U_e,lM)=>{"use strict";var eT=b(),Md=dt(),oM=$(),aM=X(),cM=an(),{handleHDBError:Zo,hdb_errors:o8}=j(),{HTTP_STATUS_CODES:ea}=o8,{readTransactionLogValidator:a8,deleteTransactionLogsBeforeValidator:c8}=ZS(),uM="This operation relies on clustering and cannot run with it disable.",u8="Logs successfully deleted from transaction log.",l8="All logs successfully deleted from transaction log.";lM.exports={readTransactionLog:_8,deleteTransactionLogsBefore:d8};async function*_8(e){let t=a8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!aM.get(eT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,uM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=oM.checkSchemaTableExist(r,s);if(n)throw Zo(new Error,n,ea.NOT_FOUND,void 0,void 0,!0);let i=cM.createNatsTableStreamName(r,s),o=await Md.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===eT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(_8,"readTransactionLog");async function d8(e){let t=c8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!aM.get(eT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,uM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=oM.checkSchemaTableExist(r,s);if(i)throw Zo(new Error,i,ea.NOT_FOUND,void 0,void 0,!0);let o=cM.createNatsTableStreamName(r,s),{jsm:c}=await Md.getNATSReferences(),u=await Md.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=u8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=l8):d=(await Md.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(d8,"deleteTransactionLogsBefore")});var dM=T((P_e,_M)=>{"use strict";var tT=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}};_M.exports=tT});var EM=T((B_e,fM)=>{"use strict";var rT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};fM.exports=rT});var nT=T((F_e,mM)=>{"use strict";var hM=dM(),f8=EM(),{HDB_ERROR_MSGS:E8}=dr(),sT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=E8.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new hM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new f8(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new hM(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}};mM.exports=sT});var Fd=T((G_e,UM)=>{"use strict";var iT=Gr(),vd=qr(),Qr=P_(),lu=Ti(),oT=Ni(),h8=Sp(),m8=CC(),_u=xr(),Bd=Ip(),Et=F(),p8=Lp(),S8=Fc(),T8=_S(),R8=kc(),g8=dS(),A8=fS(),O8=nd(),N8=pS(),aT=RS(),Sn=$(),b8=yD(),cT=bS(),TM=Sd(),Wr=b(),RM=bU(),y8=Go(),gM=Pc(),AM=(Od(),Z(ru)),OM=hr(),Ir=jS(),I8=require("alasql"),NM=Pd(),bM=wd(),yM=nT(),{handleHDBError:or,hdb_errors:IM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:cu}=IM,v=new Map,wM="delete",ti="insert",Tn="read",xi="update",uu="describe",pM=lu.describeSchema.name,SM=lu.describeTable.name,CM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},w8="catchup",C8="handleGetJob",L8="handleGetJobsByStartDate",Hd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},D8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],LM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(iT.insert.name,new q(!1,[ti]));v.set(iT.update.name,new q(!1,[xi]));v.set(iT.upsert.name,new q(!1,[ti,xi]));v.set(vd.searchByConditions.name,new q(!1,[Tn]));v.set(vd.searchByHash.name,new q(!1,[Tn]));v.set(vd.searchByValue.name,new q(!1,[Tn]));v.set(vd.search.name,new q(!1,[Tn]));v.set(Qr.createSchema.name,new q(!0,[]));v.set(Qr.createTable.name,new q(!0,[]));v.set(Qr.createAttribute.name,new q(!1,[ti]));v.set(Qr.dropSchema.name,new q(!0,[]));v.set(Qr.dropTable.name,new q(!0,[]));v.set(Qr.dropAttribute.name,new q(!0,[]));v.set(lu.describeSchema.name,new q(!1,[Tn]));v.set(lu.describeTable.name,new q(!1,[Tn]));v.set(oT.deleteRecord.name,new q(!1,[wM]));v.set(_u.addUser.name,new q(!0,[]));v.set(_u.alterUser.name,new q(!0,[]));v.set(_u.dropUser.name,new q(!0,[]));v.set(_u.listUsersExternal.name,new q(!0,[]));v.set(Bd.listRoles.name,new q(!0,[]));v.set(Bd.addRole.name,new q(!0,[]));v.set(Bd.alterRole.name,new q(!0,[]));v.set(Bd.dropRole.name,new q(!0,[]));v.set(p8.name,new q(!0,[]));v.set(S8.name,new q(!0,[]));v.set(T8.name,new q(!0,[]));v.set(R8.name,new q(!0,[]));v.set(g8.name,new q(!0,[]));v.set(A8.name,new q(!0,[]));v.set(aT.setRoutes.name,new q(!0,[]));v.set(aT.getRoutes.name,new q(!0,[]));v.set(aT.deleteRoutes.name,new q(!0,[]));v.set(OM.setConfiguration.name,new q(!0,[]));v.set(O8.clusterStatus.name,new q(!0,[]));v.set(N8.name,new q(!0,[]));v.set(cT.getFingerprint.name,new q(!0,[]));v.set(cT.setLicense.name,new q(!0,[]));v.set(oT.deleteFilesBefore.name,new q(!0,[]));v.set(oT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(TM.restart.name,new q(!0,[]));v.set(TM.restartService.name,new q(!0,[]));v.set(h8.name,new q(!0,[]));v.set(m8.name,new q(!0,[Tn]));v.set(y8.systemInformation.name,new q(!0,[]));v.set(OM.getConfiguration.name,new q(!0,[]));v.set(NM.readTransactionLog.name,new q(!0,[]));v.set(NM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(bM.installModules.name,new q(!0,[]));v.set(bM.auditModules.name,new q(!0,[]));v.set(gM.createTokens.name,new q(!1,[]));v.set(gM.refreshOperationToken.name,new q(!1,[]));v.set(AM.login.name,new q(!1,[]));v.set(AM.logout.name,new q(!1,[]));v.set(Ir.customFunctionsStatus.name,new q(!0,[]));v.set(Ir.getCustomFunctions.name,new q(!0,[]));v.set(Ir.getComponents.name,new q(!0,[]));v.set(Ir.getComponentFile.name,new q(!0,[]));v.set(Ir.setComponentFile.name,new q(!0,[]));v.set(Ir.dropComponent.name,new q(!0,[]));v.set(Ir.getCustomFunction.name,new q(!0,[]));v.set(Ir.setCustomFunction.name,new q(!0,[]));v.set(Ir.dropCustomFunction.name,new q(!0,[]));v.set(Ir.addComponent.name,new q(!0,[]));v.set(Ir.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ir.packageComponent.name,new q(!0,[]));v.set(Ir.deployComponent.name,new q(!0,[]));v.set(cT.getRegistrationInfo.name,new q(!1,[]));v.set(_u.userInfo.name,new q(!1,[]));v.set(lu.describeAll.name,new q(!1,[]));v.set(C8,new q(!1,[]));v.set(L8,new q(!0,[]));v.set(w8,new q(!0,[]));v.set(Hd.CSV_DATA_LOAD,new q(!1,[ti,xi]));v.set(Hd.CSV_URL_LOAD,new q(!1,[ti,xi]));v.set(Hd.CSV_FILE_LOAD,new q(!1,[ti,xi]));v.set(Hd.IMPORT_FROM_S3,new q(!1,[ti,xi]));v.set(LM.EXPORT_TO_S3,new q(!0,[]));v.set(LM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[wM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Tn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[ti]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[xi]));UM.exports={verifyPerms:M8,verifyPermsAst:U8,verifyBulkLoadAttributePerms:v8};function U8(e,t,r){if(Sn.isEmptyOrZeroLength(e))throw Et.info("verify_perms_ast has an empty user parameter"),or(new Error);if(Sn.isEmptyOrZeroLength(t))throw Et.info("verify_perms_ast has an empty user parameter"),or(new Error);if(Sn.isEmptyOrZeroLength(r))throw Et.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new yM,n=new b8(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."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&CM[r])throw or(new Error,wt.DROP_SYSTEM,cu.FORBIDDEN);if(c&&!u)return null;let _=RM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof I8.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=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=lT(t.role.permission,f,d[E]);uT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(U8,"verifyPermsAst");function M8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Et.info("null required parameter in verifyPerms"),or(new Error,wt.DEFAULT_INVALID_REQUEST,cu.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 yM;if(Sn.isEmptyOrZeroLength(e.hdb_user.role)||Sn.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&&CM[r])throw or(new Error,wt.DROP_SYSTEM,cu.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(D8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=RM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===pM||r===SM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===pM&&(!d[n]||!d[n][uu]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===SM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][uu]))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=P8(e),h=lT(e.hdb_user.role.permission,n,i);return uT(E,h,r,i,n,c,s),c.getPermsResponse()}a(M8,"verifyPerms");function DM(e,t,r,s,n){if(Sn.arrayHasEmptyValues([e,t,r]))throw Et.info("hasPermissions has an invalid parameter"),or(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw Et.info(`operation ${t} not found.`),or(new Error,wt.OP_NOT_FOUND(t),cu.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][uu]===!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[uu]===!1)s.addInvalidItem(wt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!Sn.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),or(IM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(DM,"hasPermissions");function uT(e,t,r,s,n,i,o){if(!e||!t)throw Et.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw Et.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(Sn.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[uu]===!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!==Tn)throw or(new Error,wt.SYSTEM_TIMESTAMP_PERMS_ERR,cu.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(uT,"checkAttributePerms");function P8(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(P8,"getRecordAttributes");function lT(e,t,r){let s=new Map;if(Sn.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(lT,"getAttributePermissions");function v8(e,t,r,s,n,i,o){let c=new Set(i),u=lT(e,s,n);uT(c,u,t,n,s,o,r)}a(v8,"verifyBulkLoadAttributePerms")});var Gd=T((k_e,HM)=>{"use strict";HM.exports={evaluateSQL:Q8,processAST:BM,convertSQLToAST:vM,checkASTPermissions:PM};var B8=Gr(),MM=require("util"),H8=MM.callbackify(B8.insert),F8=qr().search,q8=Aw().update,G8=MM.callbackify(q8),x8=Nw().convertDelete,ri=require("alasql"),k8=Fd(),qd=F(),V8=R_(),$8=$(),du=b(),{hdb_errors:Y8,handleHDBError:_T}=j(),{HTTP_STATUS_CODES:dT}=Y8;V8(ri);var K8=403,W8="There was a problem performing this insert. Please check the logs and try again.",fT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Q8(e,t){let r=e.parsed_sql_object;if(!r){r=vM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ri.yy.Insert?s=n.into.databaseid:n instanceof ri.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ri.yy.Update||n instanceof ri.yy.Delete?s=n.table.databaseid:qd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ri.yy.Select)&&$8.isEmptyOrZeroLength(s))return t("No schema specified",null)}BM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Q8,"evaluateSQL");function PM(e,t){let r;try{r=k8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(PM,"checkASTPermissions");function vM(e){let t=new fT;if(!e)throw _T(new Error,"The 'sql' parameter is missing from the request body",dT.BAD_REQUEST);try{let r=e.trim(),s=ri.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
+
`);throw s[1]?_T(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,dT.BAD_REQUEST):_T(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",dT.BAD_REQUEST)}return t}a(vM,"convertSQLToAST");function BM(e,t,r){try{let s=z8;if(!e.bypass_auth&&!t.permissions_checked){let i=PM(e,t);if(i&&i.length>0)return r(K8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case du.VALID_SQL_OPS_ENUM.SELECT:s=F8,n=t.ast.statements[0];break;case du.VALID_SQL_OPS_ENUM.INSERT:s=J8;break;case du.VALID_SQL_OPS_ENUM.UPDATE:s=G8;break;case du.VALID_SQL_OPS_ENUM.DELETE:s=x8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(BM,"processAST");function z8(e,t){qd.info(e),t("unknown sql statement")}a(z8,"nullFunction");function J8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=X8(i,e.values)}catch(o){return r(o)}H8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){qd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(J8,"convertInsert");function X8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=ri.compile(`SELECT ${n.toString()} AS [${du.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(W8)}}a(X8,"createDataObjects")});var ET=T(($_e,qM)=>{"use strict";var{S3:j8,GetObjectCommand:Z8}=require("@aws-sdk/client-s3");qM.exports={getFileStreamFromS3:e6,getS3AuthObj:FM};async function e6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await FM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Z8(r))).Body}a(e6,"getFileStreamFromS3");function FM(e,t,r){return new j8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(FM,"getS3AuthObj")});var xd=T((K_e,zM)=>{"use strict";var kM=qr(),t6=Gd(),r6=ET(),{AsyncParser:s6,Transform:n6}=require("json2csv"),Eu=require("stream"),wr=$(),hT=require("fs-extra"),i6=require("path"),zr=F(),{promisify:VM}=require("util"),fu=$(),{handleHDBError:it,hdb_errors:o6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:ot}=o6,{streamAsJSON:a6}=xE(),{Upload:c6}=require("@aws-sdk/lib-storage"),GM=["search_by_value","search_by_hash","sql"],xM=["json","csv"],$M="json",YM="csv",u6="Successfully exported JSON locally.",l6="Successfully exported CSV locally.",_6=1e3,d6=kM.searchByHash,f6=kM.searchByValue,E6=VM(t6.evaluateSQL),h6=VM(Eu.finished);zM.exports={export_to_s3:T6,export_local:m6,toCsvStream:KM};async function m6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=WM(e);if(!wr.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(wr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),it(new Error,ar.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(wr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(i6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=wr.buildFolderPath(e.path,r);await p6(e.path);let n=await QM(e);return await S6(s,e.format,n)}a(m6,"export_local");async function p6(e){if(zr.trace("in confirmPath"),wr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await hT.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(p6,"confirmPath");async function S6(e,t,r){if(zr.trace("in saveToLocal"),fu.isEmptyOrZeroLength(e))throw it(new Error,ar.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(fu.isEmptyOrZeroLength(t))throw it(new Error,ar.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(fu.isEmpty(r))throw it(new Error,ar.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===$M){let s=hT.createWriteStream(e);return a6(r).pipe(s),await h6(s),{message:u6,path:e}}else if(t===YM){let s=hT.createWriteStream(e),n=Eu.Readable.from(r),i={},o={objectMode:!0};return await new s6(i,o).fromInput(n).toOutput(s).promise(!1),{message:l6,path:e}}throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(S6,"saveToLocal");async function T6(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,ar.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,ar.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,ar.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,ar.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,ar.MISSING_VALUE("key"),ot.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,ar.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=WM(e);if(!wr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await QM(e)}catch(u){throw zr.error(u),u}let s,n=await r6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Eu.PassThrough;if(e.format===YM){i=e.s3.key+".csv";let u=KM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===$M){i=e.s3.key+".json";let u=new Eu.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%_6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,ar.INVALID_VALUE("format"),ot.BAD_REQUEST);return new c6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(T6,"export_to_s3");function KM(e){let t=Eu.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new n6(r,s);return t.pipe(n)}a(KM,"toCsvStream");function WM(e){if(zr.trace("in exportCoreValidation"),wr.isEmpty(e.format))return"format missing";if(xM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${xM.join(", ")}`;let t=e.search_operation.operation;if(wr.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 QM(e){zr.trace("in getRecords");let t,r;if(fu.isEmpty(e.search_operation)||fu.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,ar.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=f6;break;case"search_by_hash":t=d6;break;case"sql":t=E6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(QM,"getRecords")});var sP={};Qe(sP,{contentTypes:()=>pT,findBestSerializer:()=>$d,getDeserializer:()=>ta,registerContentHandlers:()=>ST,serialize:()=>Yd,serializeMessage:()=>ei});function R6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function ST(e){e.register(A6,{serializers:[{regex:/^application\/json$/,serializer:kd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new ki.EncoderStream(hu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Vd.Readable.from((0,Ks.encodeIter)(t,hu)):(0,Ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,mT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ki.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function $d(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 Yd(e,t,r){let s=XM&&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=$d(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,Rn.createBrotliCompress)({params:{[Rn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Rn.constants.BROTLI_MODE_TEXT:Rn.constants.BROTLI_MODE_GENERIC,[Rn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>XM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Rn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function ei(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=$d(t);return r=t.serialize=s.serializer.serialize,r(e)}function O6(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function ta(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||jM(e,s);return o=>O6(o).then(i)}return e&&Ct.get(e)?.deserialize||jM(e,s)}function jM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function N6(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var kd,mT,Ks,ki,Rn,Vd,ZM,eP,tP,hu,Ct,pT,JM,rP,g6,A6,XM,Qo=Te(()=>{kd=D(xE()),mT=D(xd()),Ks=require("msgpackr"),ki=require("cbor-x"),Rn=require("zlib"),Vd=require("stream");Mr();ZM=require("../index"),eP=D(X()),tP=D(b()),hu={useRecords:!1,useToJSON:!0},Ct=new Map,pT=Ct;ut.contentTypes=pT;(0,ZM._assignPackageExport)("contentTypes",pT);Ct.set("application/json",{serializeStream:kd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});JM=new ki.Encoder(hu);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ki.EncoderStream(hu).end(e)},serialize:JM.encode,deserialize:JM.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Vd.Readable.from((0,Ks.encodeIter)(e,hu)):(0,Ks.pack)(e)},serialize:Ks.pack,deserialize:Ks.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,mT.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 Vd.Readable.from(N6(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
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()}});sP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:g6,q:.8};Ct.set("*/*",sP);Ct.set("",sP);a(g6,"tryJSONParse");a(TT,"registerContentHandlers");A6=require("fastify-plugin"),O6=A6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Vd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Vd,"findBestSerializer");jM=tP.default.get(rP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a($d,"serialize");a(Zn,"serializeMessage");a(N6,"streamToBuffer");a(ea,"getDeserializer");a(ZM,"deserializerUnknownType");a(b6,"transformIterable")});var Yd={};Qe(Yd,{start:()=>w6});async function I6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Sl(e);let n=new Hi;try{e.responseHeaders=n;let i=e.url.slice(1),o=gT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=ea(r["content-type"],!0)(e.body)}catch(p){throw new mu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new mu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new mu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,RT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){y6[0]=f;let p=String.fromCharCode(34,(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),RT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=$d(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ki.warn(i):ki.info(i):ki.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=$d(i.contentType?i:i.toString(),e,o),o}}function w6(e){RT=e,!iP&&(iP=!0,gT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return I6(t,r)}),e.server.ws(async(t,r,s)=>{hu++;let n=new is;oP||(oP=!0,Oc(l=>{hu>0&&l.push({metric:"ws-connections",connections:hu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.warn(l)});let o;t.on("message",a(function(d){o||(o=ea(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{hu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=gT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(Zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:hu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Zn(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,mu,Lt,y6,RT,iP,gT,oP,hu,aP=Te(()=>{Wo();kn();ki=D(G()),mu=D(j());Tl();va();fi();WS();Lt=new Uint8Array(8),y6=new Float64Array(Lt.buffer,0,1),RT={};a(I6,"http");hu=0;a(w6,"start")});var AT=T((nde,cP)=>{var{recordAction:Kd,recordActionBinary:C6}=(kn(),Z(b_)),L6=require("fastify-plugin"),D6=200;cP.exports=L6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.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),C6(n.raw.statusCode<400,"success",_,d,l);let f=D6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Kd(performance.now()-c,"transfer",_,d,l),Kd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Kd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var yT=T((ide,fP)=>{var Xd=require("clone"),jd=Fe(),U6=$(),zd=b(),M6=G(),Wd=require("fs"),OT=require("joi"),{string:Jd}=OT.types(),{hdb_errors:P6,handleHDBError:pu}=j(),{HDB_ERROR_MSGS:v6,HTTP_STATUS_CODES:Qd}=P6,{common_validators:ta}=Us(),uP=1e9,lP=" is required",B6=["insert","update","upsert"],NT={database:{presence:!1,format:ta.schema_format,length:ta.schema_length},schema:{presence:!1,format:ta.schema_format,length:ta.schema_length},table:{presence:!0,format:ta.schema_format,length:ta.schema_length},action:{inclusion:{within:B6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},H6={schema:Jd.required(),table:Jd.required(),action:Jd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:q6,AWS_SECRET:F6,AWS_BUCKET:G6,AWS_FILE_KEY:x6,REGION:k6}=zd.S3_BUCKET_AUTH_KEYS,V6={s3:{presence:!0},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String"},[`s3.${x6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${k6}`]:{presence:!0,type:"String"}},_P=Xd(NT);_P.data.presence={message:lP};var dP=Xd(NT);dP.file_path.presence={message:lP};var $6=Object.assign(Xd(NT),V6),bT=Xd(H6);bT.csv_url=Jd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();bT.passthrough_headers=OT.object();function Y6(e){let t=jd.validateObject(e,_P);return Zd(e,t)}a(Y6,"dataObject");function K6(e){let t=jd.validateBySchema(e,OT.object(bT));return Zd(e,t)}a(K6,"urlObject");function W6(e){let t=jd.validateObject(e,dP);return Zd(e,t)}a(W6,"fileObject");function Q6(e){let t=jd.validateObject(e,$6);return Zd(e,t)}a(Q6,"s3FileObject");function Zd(e,t){if(!t){let r=U6.checkGlobalSchemaTable(e.schema,e.table);if(r)return pu(new Error,r,Qd.BAD_REQUEST);if(e.operation===zd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Wd.accessSync(e.file_path,Wd.constants.R_OK|Wd.constants.F_OK)}catch(s){return s.code===zd.NODE_ERROR_CODES.ENOENT?pu(s,`No such file or directory ${s.path}`,Qd.BAD_REQUEST):s.code===zd.NODE_ERROR_CODES.EACCES?pu(s,`Permission denied ${s.path}`,Qd.BAD_REQUEST):pu(s)}try{let s=Wd.statSync(e.file_path).size;if(s>uP)return pu(new Error,v6.MAX_FILE_SIZE_ERR(s,uP),Qd.BAD_REQUEST)}catch(s){M6.error(s),console.error(s)}}}return t}a(Zd,"postValidateChecks");fP.exports={dataObject:Y6,urlObject:K6,fileObject:W6,s3FileObject:Q6}});var IT=T((ade,EP)=>{"use strict";var Su=G(),ef=b();async function z6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===ef.OPERATIONS_ENUM.INSERT||t.operation===ef.OPERATIONS_ENUM.UPDATE||t.operation===ef.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ef.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Su.info(i.message),i):i.http_resp_msg?(Su.error(`Error calling operation: ${e.name}`),Su.error(i.http_resp_msg),i):(Su.error(`Error calling operation: ${e.name}`),Su.error(i),i)}}a(z6,"callOperationFunctionAsAwait");EP.exports={callOperationFunctionAsAwait:z6}});var mP=T((ude,hP)=>{"use strict";var wT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},CT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};hP.exports={BulkLoadFileObject:wT,BulkLoadDataObject:CT}});var SP=T((_de,pP)=>{"use strict";var LT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};pP.exports=LT});var BT=T((pde,vP)=>{"use strict";var tf=Gr(),sf=yT(),J6=require("needle"),Rs=b(),fde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:IP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:$i}=IP,sa=G(),DT=require("papaparse");ra.promisifyPapaParse();var gs=require("fs-extra"),X6=require("path"),{chain:TP}=require("stream-chain"),RP=require("stream-json/streamers/StreamArray"),gP=require("stream-json/utils/Batch"),AP=require("stream-chain/utils/comp"),{finished:OP}=require("stream"),j6=X(),wP=IT(),Z6=hT(),{BulkLoadFileObject:MT,BulkLoadDataObject:e9}=mP(),PT=iT(),{verifyBulkLoadAttributePerms:CP}=Hd(),Ede=SP(),hde=dt(),mde=an(),{databases:t9}=(fe(),Z(Ce)),{coerceType:r9}=(nf(),Z(HT)),NP="No records parsed from csv file.",Vi=`${j6.get("HDB_ROOT")}/tmp`,{schema_regex:s9}=Us(),bP=1024*1024*2,yP=5e3,n9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vP.exports={csvDataLoad:i9,csvURLLoad:o9,csvFileLoad:a9,importFromS3:c9};async function i9(e,t){let r=sf.dataObject(e);if(r)throw $e(r,r.message,Dt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=UP(e.schema,e.table),i=DT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:UT.bind(null,n),dynamicTyping:!1}),o=new PT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&CP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Dt.BAD_REQUEST,void 0,void 0,!0);let u=new e9(e.action,e.schema,e.table,i.data);return s=await wP.callOperationFunctionAsAwait(MP,u,null),s.message===NP?NP:PP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(i9,"csvDataLoad");async function o9(e){let t=sf.urlObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Vi}/${r}`;try{await u9(e,r)}catch(n){throw sa.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,$i(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new MT(this.job_operation_function.name,e.action,e.schema,e.table,s,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await vT(n);return await rf(s),i}catch(n){throw await rf(s),Yi(n)}}a(o9,"csvURLLoad");async function a9(e){let t=sf.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new MT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await vT(r)}catch(s){throw Yi(s)}}a(a9,"csvFileLoad");async function c9(e){let t=sf.s3FileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=X6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Vi}/${n}`;let i=new MT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await l9(n,e);let o=await vT(i);return await rf(r),o}catch(s){throw await rf(r),Yi(s)}}a(c9,"importFromS3");async function u9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await J6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}d9(r,e.csv_url),await _9(t,r.raw)}a(u9,"downloadCSVFile");async function l9(e,t){try{let r=`${Vi}/${e}`;await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await Z6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){sa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw sa.error(Et.S3_DOWNLOAD_ERR+" - "+r),$e(r,$i(Et.S3_DOWNLOAD_ERR))}}a(l9,"downloadFileFromS3");async function _9(e,t){try{await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,t)}catch(r){throw sa.error(Et.WRITE_TEMP_FILE_ERR),$e(r,$i(Et.DEFAULT_BULK_LOAD_ERR))}}a(_9,"writeFileToTempFolder");async function rf(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{sa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rf,"deleteTempFile");function d9(e,t){if(e.statusCode!==IP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Dt.BAD_REQUEST);if(!n9[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,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(d9,"validateURLResponse");async function vT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await f9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await E9(e);break;default:throw $e(new Error,Et.DEFAULT_BULK_LOAD_ERR,Dt.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return PP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(vT,"fileLoad");async function LP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await tf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(LP,"validateChunk");async function DP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ra.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ra.isEmpty(c)&&!ra.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await wP.callOperationFunctionAsAwait(MP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,$i(Et.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(DP,"insertChunk");async function f9(e){let t={records:0,number_written:0},r=UP(e.schema,e.table);try{let s=new PT,n=gs.createReadStream(e.file_path,{highWaterMark:bP});n.setEncoding("utf8"),await DT.parsePromise(n,LP.bind(null,e,s),UT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:bP}),n.setEncoding("utf8"),await DT.parsePromise(n,DP.bind(null,e,t),UT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,$i(Et.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(f9,"callPapaParse");function UP(e,t){let r=t9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>r9(i,n));return s}a(UP,"createTransformMap");function UT(e,t,r){let s=e.get(r);return s?s(t):ra.autoCast(t)}a(UT,"typeFunction");async function E9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new PT,n=TP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await LP(e,s,r,c)})]);await new Promise((c,u)=>{OP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=TP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),RP.withParser(),c=>c.value,new gP({batchSize:yP}),AP(async c=>{await DP(e,t,r,c)})]);return await new Promise((c,u)=>{OP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,$i(Et.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(E9,"insertJson");async function MP(e){let t={};try{e.data&&e.data.length>0&&h9(e.data[0])?t=await m9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",sa.info(t.message))}catch(r){throw Yi(r)}return t}a(MP,"callBulkFileLoad");function h9(e){let t=Object.keys(e);for(let r of t)if(!s9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(h9,"validateColumnNames");async function m9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=tf.insert;break;case"update":i=tf.update;break;case"upsert":i=tf.upsert;break;default:throw $e(new Error,Et.INVALID_ACTION_PARAM_ERR(s),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=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Yi(o)}}a(m9,"bulkFileLoad");function PP(e,t){return`successfully loaded ${t} of ${e} records`}a(PP,"buildResponseMsg");function Yi(e){return $e(e,$i(Et.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var HP=T((Tde,BP)=>{"use strict";var qT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BP.exports=qT});var GP=T((gde,FP)=>{"use strict";var p9=b(),qP=require("moment"),S9=require("uuid").v4,FT=class{static{a(this,"JobObject")}constructor(){this.id=S9(),this.type=void 0,this.start_datetime=qP().valueOf(),this.created_datetime=qP().valueOf(),this.end_datetime=void 0,this.status=p9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FP.exports=FT});var GT=T((Ode,KP)=>{"use strict";var T9=require("uuid").v4,VP=Gr(),$P=Fr(),R9=Bs(),g9=No(),A9=HP(),Ye=b(),O9=GP(),N9=Pp(),Jr=G(),b9=Ja(),na=$(),{promisify:y9}=require("util"),Ki=require("moment"),I9=Fd(),of=yT(),xP=qh(),{deleteTransactionLogsBeforeValidator:w9}=eT(),{handleHDBError:C9,hdb_errors:L9}=j(),{HTTP_STATUS_CODES:D9}=L9,kP=$P.searchByValue,U9=$P.searchByHash,M9=VP.insert,P9=y9(I9.evaluateSQL),v9=VP.update;KP.exports={addJob:q9,updateJob:G9,handleGetJob:B9,handleGetJobsByStartDate:H9,getJobById:YP};async function B9(e){try{let t=await YP(e.id);return na.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Jr.error("There was an error getting job",t),new Error(r)}}a(B9,"handleGetJob");async function H9(e){try{let t=await F9(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ki(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ki(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(H9,"handleGetJobsByStartDate");async function q9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||na.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Jr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=of.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=of.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=of.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=of.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=w9(e);break;default:break}if(s)throw C9(s,s.message,D9.BAD_REQUEST,void 0,void 0,!0);let n=new O9;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new R9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await kP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=T9();try{o=await kP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new b9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await M9(u)}catch(l){return Jr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Jr.trace(l)}return t}a(q9,"addJob");async function F9(e){let t=Ki(e.from_date,Ki.ISO_8601),r=Ki(e.to_date,Ki.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new A9(s,e.hdb_user);try{return await P9(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(F9,"getJobsInDateRange");async function YP(e){if(na.isEmptyOrZeroLength(e))return na.errorizeMessage("Invalid job ID specified.");let t=new g9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await U9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),na.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(YP,"getJobById");async function G9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(na.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ki().valueOf());let t=new N9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await v9(t),r}a(G9,"updateJob")});var jP=T((bde,XP)=>{"use strict";var WP=$(),cr=b(),x9=require("moment"),af=BT(),cf=G(),QP=GT(),zP=Gd(),JP=Oi(),k9=Ze(),V9=Md(),xT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(WP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(WP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Rn(e,af.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Rn(e,af.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Rn(e,af.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Rn(e,af.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Rn(e,zP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Rn(e,zP.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Rn(e,JP.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Rn(e,JP.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Rn(e,V9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a($9,"parseMessage");async function Rn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=x9().valueOf(),await QP.updateJob(e.job),await Y9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):cf.error(`There was an error running ${t.name} job with id ${e.job.id}`),cf.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await QP.updateJob(e.job)}catch(n){throw cf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function Y9(e){cf.trace("launching job thread:",e),k9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Y9,"launchJobThread");XP.exports={parseMessage:$9,RunnerMessage:xT}});var ev=T((Ide,ZP)=>{"use strict";var kT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZP.exports=kT});var mv=T((Cde,QT)=>{"use strict";var df=Fr(),YT=Fd(),uf=BT(),gn=M_(),lf=Si(),Ru=Oi(),K9=Tp(),Tu=xr(),_f=wp(),Ut=ZS(),ht=G(),W9=Dp(),Q9=Hc(),z9=dS(),J9=xc(),X9=fS(),j9=ES(),Z9=sd(),e7=SS(),VT=gS(),tv=Gd(),t7=Hd(),KT=GT(),P=b(),{hdb_errors:Au,handleHDBError:gu}=j(),{HTTP_STATUS_CODES:rv}=Au,$T=yS(),sv=pd(),dv=require("util"),ia=Gr(),r7=cn(),s7=Fo(),nv=jP(),iv=Mc(),ov=(Ad(),Z(tu)),av=hr(),cv=Md(),uv=Id(),{setServerUtilities:n7}=(nf(),Z(HT)),{CONTEXT:i7}=(as(),Z(DE)),{_assignPackageExport:o7}=require("../index"),{transformReq:a7}=$(),{server:c7}=(Mr(),Z(to)),u7=IT(),lv=df.searchByHash,l7=df.searchByValue,_7=dv.promisify(df.search),d7=dv.promisify(YT.evaluateSQL),f7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=ev();async function fv(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await u7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return f7[e.body.operation]&&r7.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(fv,"processLocalTransaction");var _v=h7();QT.exports={chooseOperation:Ev,getOperationFunction:hv,operation:WT,processLocalTransaction:fv};n7(QT.exports);c7.operation=WT;function Ev(e){let t;try{t=hv(e)}catch(n){throw ht.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=YT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=YT.checkASTPermissions(e,i);if(o)throw ht.error(`${rv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),gu(new Error,o,Au.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=t7.verifyPerms(i,n);if(o)throw ht.error(`${rv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),gu(new Error,o,Au.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw gu(n,"There was an error when trying to choose an operation path")}return r}a(Ev,"chooseOperation");function hv(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),_v.has(e.operation))return _v.get(e.operation);throw gu(new Error,Au.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Au.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hv,"getOperationFunction");o7("operation",WT);function WT(e,t){e.hdb_user=this[i7]?.user,e.bypass_auth=!t;let r=Ev(e);return fv({body:e},r)}a(WT,"operation");async function E7(e){ht.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await ia.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ia.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ia.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Ru.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(E7,"catchup");async function Ws(e){a7(e);let t,r;try{r=await KT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new nv.RunnerMessage(t,e);return await nv.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),gu(s,n)}}a(Ws,"executeJob");function h7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(ia.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(ia.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(ia.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(df.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(lv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(l7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(_7)),e.set(P.OPERATIONS_ENUM.SQL,new H(d7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ws,uf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ws,uf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ws,uf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ws,uf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(gn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(gn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(gn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(gn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(gn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(gn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(lf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(lf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(lf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Ru.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Tu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Tu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Tu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Tu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(_f.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(_f.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(_f.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(_f.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Tu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(W9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(Q9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(z9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(J9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(X9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(j9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(av.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(Z9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(e7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(VT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(VT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(VT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ws,tv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ws,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ws,Ru.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ws,tv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(KT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(KT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H($T.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H($T.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H($T.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(sv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(sv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(E7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(s7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ws,Ru.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(K9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(iv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(iv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(ov.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(ov.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(av.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(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(cv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ws,cv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(uv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(uv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(gn.getBackup)),e}a(h7,"initializeOperationFunctionMap")});var Ef=T((Dde,Tv)=>{"use strict";var zT=b(),m7=$(),Ou=G(),{handleHDBError:JT,hdb_errors:ff}=j(),{isMainThread:p7}=require("worker_threads"),{Readable:S7}=require("stream"),pv=require("os"),T7=require("util"),R7=kp(),g7=T7.promisify(R7.authorize),Sv=mv(),{createGzip:A7,constants:O7}=require("zlib");function N7(e){let t=`Found an uncaught exception with message: ${e.message}. ${pv.EOL}Stack: ${e.stack} ${pv.EOL}Terminating ${p7?"HDB":"thread"}.`;console.error(t),Ou.fatal(t),process.exit(1)}a(N7,"handleServerUncaughtException");function b7(e,t,r){if(Ou[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:ff.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(b7,"serverErrorHandler");function y7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=JT(new Error,"Invalid JSON.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(m7.isEmpty(e.body.operation)){let s=JT(new Error,"Request body must include an 'operation' property.",ff.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(y7,"reqBodyValidationHandler");function I7(e,t,r){let s;e.body.operation!==zT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zT.OPERATIONS_ENUM.LOGOUT?g7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Ou.warn(n),Ou.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(JT(n,i,ff.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(I7,"authHandler");async function w7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Sv.chooseOperation(e.body);let n=await Sv.processLocalTransaction(e,s);if(n instanceof S7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(A7({level:O7.Z_BEST_SPEED})))}return n}catch(n){throw Ou.error(n),n}}a(w7,"handlePostRequest");Tv.exports={authHandler:I7,handlePostRequest:w7,handleServerUncaughtException:N7,serverErrorHandler:b7,reqBodyValidationHandler:y7}});var Ov=T((Mde,Av)=>{"use strict";var C7=require("fastify-plugin"),{handlePostRequest:Rv,authHandler:L7,reqBodyValidationHandler:D7}=Ef();async function U7(e){e.decorate("hdbCore",{preValidation:[D7,L7],request:t=>gv(Rv(t,response)),requestWithoutAuthentication:(t,r)=>gv(Rv(t,r,!0))})}a(U7,"hdbCore");async function gv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(gv,"convertAsyncIterators");Av.exports=C7(U7)});var bv=T((vde,Nv)=>{"use strict";var XT=require("fs"),oa=X();oa.initSync();var{CONFIG_PARAMS:Nu}=b(),M7=1024*1024*1024;function P7(e){let t=oa.get(Nu.HTTP_TIMEOUT),r=oa.get(Nu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:M7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=oa.get(Nu.TLS_PRIVATEKEY),i=oa.get(Nu.TLS_CERTIFICATE),o=oa.get(Nu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:XT.readFileSync(`${n}`),cert:XT.readFileSync(i)+(o?`
|
|
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()}});rP={type:"application/json",serializeStream:kd.streamAsJSON,serialize:JSON.stringify,deserialize:R6,q:.8};Ct.set("*/*",rP);Ct.set("",rP);a(R6,"tryJSONParse");a(ST,"registerContentHandlers");g6=require("fastify-plugin"),A6=g6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=$d(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a($d,"findBestSerializer");XM=eP.default.get(tP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Yd,"serialize");a(ei,"serializeMessage");a(O6,"streamToBuffer");a(ta,"getDeserializer");a(jM,"deserializerUnknownType");a(N6,"transformIterable")});var Kd={};Qe(Kd,{start:()=>I6});async function y6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Tl(e);let n=new Fi;try{e.responseHeaders=n;let i=e.url.slice(1),o=RT.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=ta(r["content-type"],!0)(e.body)}catch(p){throw new pu.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 pu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new pu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,TT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){b6[0]=f;let p=String.fromCharCode(34,(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),TT.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=Yd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?Vi.warn(i):Vi.info(i):Vi.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=Yd(i.contentType?i:i.toString(),e,o),o}}function I6(e){TT=e,!nP&&(nP=!0,RT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return y6(t,r)}),e.server.ws(async(t,r,s)=>{mu++;let n=new is;iP||(iP=!0,Nc(l=>{mu>0&&l.push({metric:"ws-connections",connections:mu,byThread:!0})}));let i;t.on("error",l=>{i=!0,Vi.warn(l)});let o;t.on("message",a(function(d){o||(o=ta(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{mu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=RT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(ei(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:mu}),"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=ei(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var Vi,pu,Lt,b6,TT,nP,RT,iP,mu,oP=Te(()=>{Qo();Vn();Vi=D(F()),pu=D(j());Rl();Ba();Ei();KS();Lt=new Uint8Array(8),b6=new Float64Array(Lt.buffer,0,1),TT={};a(y6,"http");mu=0;a(I6,"start")});var gT=T((sde,aP)=>{var{recordAction:Wd,recordActionBinary:w6}=(Vn(),Z(y_)),C6=require("fastify-plugin"),L6=200;aP.exports=C6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Wd(o,"duration",_,d,l),w6(n.raw.statusCode<400,"success",_,d,l);let f=L6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Wd(performance.now()-c,"transfer",_,d,l),Wd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Wd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var bT=T((nde,dP)=>{var jd=require("clone"),Zd=qe(),D6=$(),Jd=b(),U6=F(),Qd=require("fs"),AT=require("joi"),{string:Xd}=AT.types(),{hdb_errors:M6,handleHDBError:Su}=j(),{HDB_ERROR_MSGS:P6,HTTP_STATUS_CODES:zd}=M6,{common_validators:ra}=Us(),cP=1e9,uP=" is required",v6=["insert","update","upsert"],OT={database:{presence:!1,format:ra.schema_format,length:ra.schema_length},schema:{presence:!1,format:ra.schema_format,length:ra.schema_length},table:{presence:!0,format:ra.schema_format,length:ra.schema_length},action:{inclusion:{within:v6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},B6={schema:Xd.required(),table:Xd.required(),action:Xd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:H6,AWS_SECRET:F6,AWS_BUCKET:q6,AWS_FILE_KEY:G6,REGION:x6}=Jd.S3_BUCKET_AUTH_KEYS,k6={s3:{presence:!0},[`s3.${H6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${x6}`]:{presence:!0,type:"String"}},lP=jd(OT);lP.data.presence={message:uP};var _P=jd(OT);_P.file_path.presence={message:uP};var V6=Object.assign(jd(OT),k6),NT=jd(B6);NT.csv_url=Xd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();NT.passthrough_headers=AT.object();function $6(e){let t=Zd.validateObject(e,lP);return ef(e,t)}a($6,"dataObject");function Y6(e){let t=Zd.validateBySchema(e,AT.object(NT));return ef(e,t)}a(Y6,"urlObject");function K6(e){let t=Zd.validateObject(e,_P);return ef(e,t)}a(K6,"fileObject");function W6(e){let t=Zd.validateObject(e,V6);return ef(e,t)}a(W6,"s3FileObject");function ef(e,t){if(!t){let r=D6.checkGlobalSchemaTable(e.schema,e.table);if(r)return Su(new Error,r,zd.BAD_REQUEST);if(e.operation===Jd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Qd.accessSync(e.file_path,Qd.constants.R_OK|Qd.constants.F_OK)}catch(s){return s.code===Jd.NODE_ERROR_CODES.ENOENT?Su(s,`No such file or directory ${s.path}`,zd.BAD_REQUEST):s.code===Jd.NODE_ERROR_CODES.EACCES?Su(s,`Permission denied ${s.path}`,zd.BAD_REQUEST):Su(s)}try{let s=Qd.statSync(e.file_path).size;if(s>cP)return Su(new Error,P6.MAX_FILE_SIZE_ERR(s,cP),zd.BAD_REQUEST)}catch(s){U6.error(s),console.error(s)}}}return t}a(ef,"postValidateChecks");dP.exports={dataObject:$6,urlObject:Y6,fileObject:K6,s3FileObject:W6}});var yT=T((ode,fP)=>{"use strict";var Tu=F(),tf=b();async function Q6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===tf.OPERATIONS_ENUM.INSERT||t.operation===tf.OPERATIONS_ENUM.UPDATE||t.operation===tf.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===tf.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Tu.info(i.message),i):i.http_resp_msg?(Tu.error(`Error calling operation: ${e.name}`),Tu.error(i.http_resp_msg),i):(Tu.error(`Error calling operation: ${e.name}`),Tu.error(i),i)}}a(Q6,"callOperationFunctionAsAwait");fP.exports={callOperationFunctionAsAwait:Q6}});var hP=T((cde,EP)=>{"use strict";var IT=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}},wT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};EP.exports={BulkLoadFileObject:IT,BulkLoadDataObject:wT}});var pP=T((lde,mP)=>{"use strict";var CT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};mP.exports=CT});var vT=T((mde,PP)=>{"use strict";var rf=Gr(),nf=bT(),z6=require("needle"),Rs=b(),dde=ke(),sa=$(),{handleHDBError:$e,hdb_errors:yP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:ht,CHECK_LOGS_WRAPPER:Yi}=yP,na=F(),LT=require("papaparse");sa.promisifyPapaParse();var gs=require("fs-extra"),J6=require("path"),{chain:SP}=require("stream-chain"),TP=require("stream-json/streamers/StreamArray"),RP=require("stream-json/utils/Batch"),gP=require("stream-chain/utils/comp"),{finished:AP}=require("stream"),X6=X(),IP=yT(),j6=ET(),{BulkLoadFileObject:UT,BulkLoadDataObject:Z6}=hP(),MT=nT(),{verifyBulkLoadAttributePerms:wP}=Fd(),fde=pP(),Ede=dt(),hde=an(),{databases:e9}=(fe(),Z(Ce)),{coerceType:t9}=(of(),Z(BT)),OP="No records parsed from csv file.",$i=`${X6.get("HDB_ROOT")}/tmp`,{schema_regex:r9}=Us(),NP=1024*1024*2,bP=5e3,s9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};PP.exports={csvDataLoad:n9,csvURLLoad:i9,csvFileLoad:o9,importFromS3:a9};async function n9(e,t){let r=nf.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=LT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:DT.bind(null,n),dynamicTyping:!1}),o=new MT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&wP(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 Z6(e.action,e.schema,e.table,i.data);return s=await IP.callOperationFunctionAsAwait(UP,u,null),s.message===OP?OP:MP(s.records,s.number_written)}catch(n){throw Ki(n)}}a(n9,"csvDataLoad");async function i9(e){let t=nf.urlObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${$i}/${r}`;try{await c9(e,r)}catch(n){throw na.error(ht.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Yi(ht.DOWNLOAD_FILE_ERR(r)))}try{let n=new UT(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 PT(n);return await sf(s),i}catch(n){throw await sf(s),Ki(n)}}a(i9,"csvURLLoad");async function o9(e){let t=nf.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new UT(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 PT(r)}catch(s){throw Ki(s)}}a(o9,"csvFileLoad");async function a9(e){let t=nf.s3FileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=J6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${$i}/${n}`;let i=new UT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await u9(n,e);let o=await PT(i);return await sf(r),o}catch(s){throw await sf(r),Ki(s)}}a(a9,"importFromS3");async function c9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await z6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}_9(r,e.csv_url),await l9(t,r.raw)}a(c9,"downloadCSVFile");async function u9(e,t){try{let r=`${$i}/${e}`;await gs.mkdirp($i),await gs.writeFile(`${$i}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await j6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw na.error(ht.S3_DOWNLOAD_ERR+" - "+r),$e(r,Yi(ht.S3_DOWNLOAD_ERR))}}a(u9,"downloadFileFromS3");async function l9(e,t){try{await gs.mkdirp($i),await gs.writeFile(`${$i}/${e}`,t)}catch(r){throw na.error(ht.WRITE_TEMP_FILE_ERR),$e(r,Yi(ht.DEFAULT_BULK_LOAD_ERR))}}a(l9,"writeFileToTempFolder");async function sf(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(sf,"deleteTempFile");function _9(e,t){if(e.statusCode!==yP.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(!s9[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(_9,"validateURLResponse");async function PT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await d9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await f9(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 MP(t.records,t.number_written)}catch(t){throw Ki(t)}}a(PT,"fileLoad");async function CP(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 rf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&wP(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(CP,"validateChunk");async function LP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;sa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!sa.isEmpty(c)&&!sa.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 IP.callOperationFunctionAsAwait(UP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Yi(ht.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_CSV_ERR+" - "+c);r(u)}}a(LP,"insertChunk");async function d9(e){let t={records:0,number_written:0},r=DP(e.schema,e.table);try{let s=new MT,n=gs.createReadStream(e.file_path,{highWaterMark:NP});n.setEncoding("utf8"),await LT.parsePromise(n,CP.bind(null,e,s),DT.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 LT.parsePromise(n,LP.bind(null,e,t),DT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Yi(ht.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.PAPA_PARSE_ERR+s)}}a(d9,"callPapaParse");function DP(e,t){let r=e9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>t9(i,n));return s}a(DP,"createTransformMap");function DT(e,t,r){let s=e.get(r);return s?s(t):sa.autoCast(t)}a(DT,"typeFunction");async function f9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new MT,n=SP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),TP.withParser(),c=>c.value,new RP({batchSize:bP}),gP(async c=>{await CP(e,s,r,c)})]);await new Promise((c,u)=>{AP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=SP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),TP.withParser(),c=>c.value,new RP({batchSize:bP}),gP(async c=>{await LP(e,t,r,c)})]);return await new Promise((c,u)=>{AP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Yi(ht.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_JSON_ERR+s)}}a(f9,"insertJson");async function UP(e){let t={};try{e.data&&e.data.length>0&&E9(e.data[0])?t=await h9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",na.info(t.message))}catch(r){throw Ki(r)}return t}a(UP,"callBulkFileLoad");function E9(e){let t=Object.keys(e);for(let r of t)if(!r9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(E9,"validateColumnNames");async function h9(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=rf.insert;break;case"update":i=rf.update;break;case"upsert":i=rf.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=sa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ki(o)}}a(h9,"bulkFileLoad");function MP(e,t){return`successfully loaded ${t} of ${e} records`}a(MP,"buildResponseMsg");function Ki(e){return $e(e,Yi(ht.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ki,"buildTopLevelErrMsg")});var BP=T((Sde,vP)=>{"use strict";var HT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};vP.exports=HT});var qP=T((Rde,FP)=>{"use strict";var m9=b(),HP=require("moment"),p9=require("uuid").v4,FT=class{static{a(this,"JobObject")}constructor(){this.id=p9(),this.type=void 0,this.start_datetime=HP().valueOf(),this.created_datetime=HP().valueOf(),this.end_datetime=void 0,this.status=m9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FP.exports=FT});var qT=T((Ade,YP)=>{"use strict";var S9=require("uuid").v4,kP=Gr(),VP=qr(),T9=Bs(),R9=bo(),g9=BP(),Ye=b(),A9=qP(),O9=Mp(),Jr=F(),N9=Xa(),ia=$(),{promisify:b9}=require("util"),Wi=require("moment"),y9=Gd(),af=bT(),GP=qh(),{deleteTransactionLogsBeforeValidator:I9}=ZS(),{handleHDBError:w9,hdb_errors:C9}=j(),{HTTP_STATUS_CODES:L9}=C9,xP=VP.searchByValue,D9=VP.searchByHash,U9=kP.insert,M9=b9(y9.evaluateSQL),P9=kP.update;YP.exports={addJob:H9,updateJob:q9,handleGetJob:v9,handleGetJobsByStartDate:B9,getJobById:$P};async function v9(e){try{let t=await $P(e.id);return ia.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(v9,"handleGetJob");async function B9(e){try{let t=await F9(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Wi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Wi(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(B9,"handleGetJobsByStartDate");async function H9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ia.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=af.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=af.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=af.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=af.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=I9(e);break;default:break}if(s)throw w9(s,s.message,L9.BAD_REQUEST,void 0,void 0,!0);let n=new A9;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new T9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await xP(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=S9();try{o=await xP(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 N9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await U9(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(H9,"addJob");async function F9(e){let t=Wi(e.from_date,Wi.ISO_8601),r=Wi(e.to_date,Wi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new g9(s,e.hdb_user);try{return await M9(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(F9,"getJobsInDateRange");async function $P(e){if(ia.isEmptyOrZeroLength(e))return ia.errorizeMessage("Invalid job ID specified.");let t=new R9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await D9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ia.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a($P,"getJobById");async function q9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ia.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=Wi().valueOf());let t=new O9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await P9(t),r}a(q9,"updateJob")});var XP=T((Nde,JP)=>{"use strict";var KP=$(),cr=b(),G9=require("moment"),cf=vT(),uf=F(),WP=qT(),QP=xd(),zP=Ni(),x9=Ze(),k9=Pd(),GT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function V9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(KP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(KP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await gn(e,cf.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await gn(e,cf.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await gn(e,cf.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await gn(e,cf.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await gn(e,QP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await gn(e,QP.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await gn(e,zP.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await gn(e,zP.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await gn(e,k9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(V9,"parseMessage");async function gn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=G9().valueOf(),await WP.updateJob(e.job),await $9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):uf.error(`There was an error running ${t.name} job with id ${e.job.id}`),uf.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await WP.updateJob(e.job)}catch(n){throw uf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(gn,"runJob");async function $9(e){uf.trace("launching job thread:",e),x9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a($9,"launchJobThread");JP.exports={parseMessage:V9,RunnerMessage:GT}});var ZP=T((yde,jP)=>{"use strict";var xT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};jP.exports=xT});var hv=T((wde,WT)=>{"use strict";var ff=qr(),$T=Gd(),lf=vT(),An=P_(),_f=Ti(),gu=Ni(),Y9=Sp(),Ru=xr(),df=Ip(),Ut=jS(),mt=F(),K9=Lp(),W9=Fc(),Q9=_S(),z9=kc(),J9=dS(),X9=fS(),j9=nd(),Z9=pS(),kT=RS(),ev=xd(),e7=Fd(),YT=qT(),P=b(),{hdb_errors:Ou,handleHDBError:Au}=j(),{HTTP_STATUS_CODES:tv}=Ou,VT=bS(),rv=Sd(),_v=require("util"),oa=Gr(),t7=cn(),r7=Go(),sv=XP(),nv=Pc(),iv=(Od(),Z(ru)),ov=hr(),av=Pd(),cv=wd(),{setServerUtilities:s7}=(of(),Z(BT)),{CONTEXT:n7}=(as(),Z(UE)),{_assignPackageExport:i7}=require("../index"),{transformReq:o7}=$(),{server:a7}=(Mr(),Z(ro)),c7=yT(),uv=ff.searchByHash,u7=ff.searchByValue,l7=_v.promisify(ff.search),_7=_v.promisify($T.evaluateSQL),d7={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=ZP();async function dv(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 c7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return d7[e.body.operation]&&t7.setSchemaDataToGlobal(s=>{s&&mt.error(s)}),r}a(dv,"processLocalTransaction");var lv=E7();WT.exports={chooseOperation:fv,getOperationFunction:Ev,operation:KT,processLocalTransaction:dv};s7(WT.exports);a7.operation=KT;function fv(e){let t;try{t=Ev(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=$T.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$T.checkASTPermissions(e,i);if(o)throw mt.error(`${tv.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Au(new Error,o,Ou.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=e7.verifyPerms(i,n);if(o)throw mt.error(`${tv.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Au(new Error,o,Ou.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Au(n,"There was an error when trying to choose an operation path")}return r}a(fv,"chooseOperation");function Ev(e){if(mt.trace(`getOperationFunction with operation: ${e.operation}`),lv.has(e.operation))return lv.get(e.operation);throw Au(new Error,Ou.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ou.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Ev,"getOperationFunction");i7("operation",KT);function KT(e,t){e.hdb_user=this[n7]?.user,e.bypass_auth=!t;let r=fv(e);return dv({body:e},r)}a(KT,"operation");async function f7(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 oa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await oa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await oa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await gu.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(f7,"catchup");async function Ws(e){o7(e);let t,r;try{r=await YT.addJob(e),t=r.createdJob,mt.info("addJob result",r);let s=new sv.RunnerMessage(t,e);return await sv.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),Au(s,n)}}a(Ws,"executeJob");function E7(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(oa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(oa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(oa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(ff.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(uv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(uv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(u7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(l7)),e.set(P.OPERATIONS_ENUM.SQL,new H(_7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ws,lf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ws,lf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ws,lf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ws,lf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(An.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(An.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(An.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(An.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(An.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(An.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(_f.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(_f.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(_f.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(_f.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(gu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Ru.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Ru.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Ru.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Ru.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(df.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(df.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(df.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(df.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Ru.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(K9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(W9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(Q9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(z9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(J9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(X9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(ov.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(j9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(Z9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(kT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(kT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(kT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ws,ev.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ws,gu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ws,gu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ws,ev.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(YT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(YT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(VT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(VT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(VT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(rv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(rv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(f7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(r7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ws,gu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Y9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(nv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(nv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(iv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(iv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(ov.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(av.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ws,av.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(cv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(cv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(An.getBackup)),e}a(E7,"initializeOperationFunctionMap")});var hf=T((Lde,Sv)=>{"use strict";var QT=b(),h7=$(),Nu=F(),{handleHDBError:zT,hdb_errors:Ef}=j(),{isMainThread:m7}=require("worker_threads"),{Readable:p7}=require("stream"),mv=require("os"),S7=require("util"),T7=xp(),R7=S7.promisify(T7.authorize),pv=hv(),{createGzip:g7,constants:A7}=require("zlib");function O7(e){let t=`Found an uncaught exception with message: ${e.message}. ${mv.EOL}Stack: ${e.stack} ${mv.EOL}Terminating ${m7?"HDB":"thread"}.`;console.error(t),Nu.fatal(t),process.exit(1)}a(O7,"handleServerUncaughtException");function N7(e,t,r){if(Nu[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:Ef.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(N7,"serverErrorHandler");function b7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=zT(new Error,"Invalid JSON.",Ef.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(h7.isEmpty(e.body.operation)){let s=zT(new Error,"Request body must include an 'operation' property.",Ef.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(b7,"reqBodyValidationHandler");function y7(e,t,r){let s;e.body.operation!==QT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==QT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==QT.OPERATIONS_ENUM.LOGOUT?R7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Nu.warn(n),Nu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(zT(n,i,Ef.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(y7,"authHandler");async function I7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=pv.chooseOperation(e.body);let n=await pv.processLocalTransaction(e,s);if(n instanceof p7&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(g7({level:A7.Z_BEST_SPEED})))}return n}catch(n){throw Nu.error(n),n}}a(I7,"handlePostRequest");Sv.exports={authHandler:y7,handlePostRequest:I7,handleServerUncaughtException:O7,serverErrorHandler:N7,reqBodyValidationHandler:b7}});var Av=T((Ude,gv)=>{"use strict";var w7=require("fastify-plugin"),{handlePostRequest:Tv,authHandler:C7,reqBodyValidationHandler:L7}=hf();async function D7(e){e.decorate("hdbCore",{preValidation:[L7,C7],request:t=>Rv(Tv(t,response)),requestWithoutAuthentication:(t,r)=>Rv(Tv(t,r,!0))})}a(D7,"hdbCore");async function Rv(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(Rv,"convertAsyncIterators");gv.exports=w7(D7)});var Nv=T((Pde,Ov)=>{"use strict";var JT=require("fs"),aa=X();aa.initSync();var{CONFIG_PARAMS:bu}=b(),U7=1024*1024*1024;function M7(e){let t=aa.get(bu.HTTP_TIMEOUT),r=aa.get(bu.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:U7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=aa.get(bu.TLS_PRIVATEKEY),i=aa.get(bu.TLS_CERTIFICATE),o=aa.get(bu.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:JT.readFileSync(`${n}`),cert:JT.readFileSync(i)+(o?`
|
|
27
27
|
|
|
28
|
-
`+XT.readFileSync(o):"")},s.http2=!0}return s}a(P7,"getServerOptions");Nv.exports=P7});var wv=T((Hde,Iv)=>{"use strict";var jT=X();jT.initSync();var{CONFIG_PARAMS:yv}=b();function v7(){let e=jT.get(yv.HTTP_CORSACCESSLIST),t=jT.get(yv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(v7,"getCORSOptions");Iv.exports=v7});var Dv=T((Fde,Lv)=>{"use strict";var Cv=X();Cv.initSync();var B7=b();function H7(){return Cv.get(B7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(H7,"getHeaderTimeoutConfig");Lv.exports=H7});var tR={};Qe(tR,{customFunctionsServer:()=>G7,handleFile:()=>F7,ready:()=>V7});async function F7(e,t,r,s){if(!An){let c=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);An=$v(c),ut.http((await An).server)}let n=await An,i=(0,Mv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Uv.has(i)){Uv.add(i);try{n.register(k7(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function G7(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await x7();let e=ZT.get(eR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=An=await $v(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function x7(){try{De.info("Custom Functions starting configuration."),await Fv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function k7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Pv.existsSync)(e)&&r.register(qv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function $v(e){De.info("Custom Functions starting buildServer.");let t=(0,Gv.default)(e),r=(0,vv.default)(t);r.server.headersTimeout=(0,kv.default)(),r.setErrorHandler(Vv.serverErrorHandler);let s=(0,xv.default)();return s&&r.register(Bv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Hv.default),await r.register(q7),await r.after(),TT(r),De.info("Custom Functions completed buildServer."),r}function V7(){if(An)return An.then?An.then(e=>e.ready()):An.ready()}var Mv,Pv,vv,Bv,Hv,qv,ZT,eR,De,q7,Fv,Gv,xv,kv,Vv,An,Uv,Yv=Te(()=>{Mv=require("path"),Pv=require("fs"),vv=D(require("fastify")),Bv=D(require("@fastify/cors")),Hv=D(AT()),qv=D(require("@fastify/autoload")),ZT=D(X()),eR=D(b()),De=D(G()),q7=D(Ov()),Fv=D(xr()),Gv=D(bv()),xv=D(wv()),kv=D(Dv()),Vv=D(Ef());Wo();Mr();Uv=new Set;a(F7,"handleFile");a(G7,"customFunctionsServer");a(x7,"setUp");a(k7,"buildRouteFolder");a($v,"buildServer");a(V7,"ready")});var rR={};Qe(rR,{start:()=>$7});function $7(e){return{handleFile(t,r,s){Wv||(Wv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Kv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Qv.default)(n,(0,zv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Kv.set(r,s)}}}var Qv,zv,Kv,Wv,Jv=Te(()=>{Qv=D(require("send")),zv=require("fs"),Kv=new Map;a($7,"start")});function W7(e,t=1,r){if(sR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:pf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===pf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});K7.push(n),await n,aa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=mf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=aa.indexOf(s);o>-1&&aa.splice(o,1)}if(a(i,"removeWorker"),ca){let o=ca;ca=[];for(let c of o)e0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{nR?nR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),sR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function t0(e=0,t){if(typeof e=="string")try{(0,Sf.existsSync)(e)&&(0,Sf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Q7:r=z7(t):r=iR;let s=(0,ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=e0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),nR=!0,r(o,(c,u)=>{if(!c){if(Xv){let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});Xv.deliverSocket(l,e,u),l.resume()}else sR>0?(ca.length===0&&setTimeout(()=>{ca.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ca.push(o)):(console.log("start up a dynamic thread to handle request"),W7(0));Nr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});Z7(l,c,e)}Nr(!0,"socket-routed")})};let n=Rc();Zv.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function iR(e,t){let r,s=0;for(let n of aa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=hf)return hf=i,t(r);s=i}hf=0,t(r)}function Q7(e,t){let r={};e.getpeername(r);let s=r.address,n=la.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);iR(e,o=>{la.set(s,{worker:o,lastUsed:i}),t(o)})}function z7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new ua.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=la.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);iR(s,d=>{la.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function X7(){hf=0;for(let e of aa)e.expectedIdle=e.recentELU.idle+J7,e.requests=1;aa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Z7(e,t,r){let s=j7++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),mf.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),mf.delete(s)),n.event=="destroy"&&(e.destroy(),mf.delete(s))})}var Wi,ua,pf,Zv,Sf,Y7,aa,ca,e0,Xv,sR,K7,nR,hf,jv,la,J7,mf,j7,r0=Te(()=>{Wi=D(Ze()),ua=require("net"),pf=D(b()),Zv=D(G()),Sf=require("fs");kn();({isMainThread:Y7}=require("worker_threads")),aa=[],ca=[],e0=[],sR=0,K7=[];Y7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(W7,"startHTTPWorker");a(t0,"startSocketServer");hf=0;a(iR,"findMostIdleWorker");jv=36e5,la=new Map;a(Q7,"findByRemoteAddressAffinity");a(z7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+jv<e&&la.delete(t)},jv).unref();J7=1e3;a(X7,"updateWorkerIdleness");(0,Wi.setMonitorListener)(X7);mf=new Map,j7=1;a(Z7,"proxySocket")});var o0=T((Xde,i0)=>{"use strict";var eee=require("cluster"),As=X();As.initSync();var n0=b(),Qde=require("util"),On=G(),oR=require("fs"),tee=require("fastify"),zde=Rc(),ree=require("@fastify/cors"),see=require("@fastify/compress"),nee=require("@fastify/static"),iee=AT(),oee=require("path"),{PACKAGE_ROOT:aee}=b(),cee=cn(),uee=$(),lee=xr(),_ee=rc(),{server:dee}=(Mr(),Z(to)),{authHandler:fee,handlePostRequest:Eee,serverErrorHandler:hee,reqBodyValidationHandler:mee}=Ef(),Jde=require("net"),{registerContentHandlers:pee}=(Wo(),Z(nP)),See=6e4,Tee=1024*1024*1024,Ree="TRUE",{CONFIG_PARAMS:Nn}=n0,Qi;i0.exports={hdbServer:s0,start:s0};async function s0(e){try{On.info("In Fastify server"+process.cwd()),On.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),On.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=eee.isMaster,await gee();let t=As.get(Nn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=Aee(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{dee.http(Qi.server,e),Qi.server.closeIdleConnections||await Qi.listen({port:0,host:"::"})}catch(r){throw Qi.close(),On.error(r),On.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),On.fatal(t),process.exit(1)}}a(s0,"operationsServer");async function gee(){On.trace("Configuring HarperDB process."),cee.setSchemaDataToGlobal(),await lee.setUsersToGlobal(),await _ee.getLicense()}a(gee,"setUp");function Aee(e){On.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Oee(e),r=tee(t);r.server.headersTimeout=bee(),r.setErrorHandler(hee);let s=Nee();s&&r.register(ree,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(iee),r.register(see),r.register(nee,{root:oee.join(aee,"studio")}),pee(r);let n=As.get(n0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!uee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[mee,fee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Eee(i,o)}),r.get("/health",()=>"HarperDB is running."),On.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Aee,"buildServer");function Oee(e){let t=As.get(Nn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Nn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Tee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(Nn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(Nn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(Nn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:oR.readFileSync(n),cert:oR.readFileSync(i)+(o?`
|
|
28
|
+
`+JT.readFileSync(o):"")},s.http2=!0}return s}a(M7,"getServerOptions");Ov.exports=M7});var Iv=T((Bde,yv)=>{"use strict";var XT=X();XT.initSync();var{CONFIG_PARAMS:bv}=b();function P7(){let e=XT.get(bv.HTTP_CORSACCESSLIST),t=XT.get(bv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(P7,"getCORSOptions");yv.exports=P7});var Lv=T((Fde,Cv)=>{"use strict";var wv=X();wv.initSync();var v7=b();function B7(){return wv.get(v7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(B7,"getHeaderTimeoutConfig");Cv.exports=B7});var eR={};Qe(eR,{customFunctionsServer:()=>q7,handleFile:()=>F7,ready:()=>k7});async function F7(e,t,r,s){if(!On){let c=jT.get(ZT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);On=Vv(c),ut.http((await On).server)}let n=await On,i=(0,Uv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Dv.has(i)){Dv.add(i);try{n.register(x7(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function q7(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await G7();let e=jT.get(ZT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=On=await Vv(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function G7(){try{De.info("Custom Functions starting configuration."),await Fv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function x7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Mv.existsSync)(e)&&r.register(Hv.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 Vv(e){De.info("Custom Functions starting buildServer.");let t=(0,qv.default)(e),r=(0,Pv.default)(t);r.server.headersTimeout=(0,xv.default)(),r.setErrorHandler(kv.serverErrorHandler);let s=(0,Gv.default)();return s&&r.register(vv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Bv.default),await r.register(H7),await r.after(),ST(r),De.info("Custom Functions completed buildServer."),r}function k7(){if(On)return On.then?On.then(e=>e.ready()):On.ready()}var Uv,Mv,Pv,vv,Bv,Hv,jT,ZT,De,H7,Fv,qv,Gv,xv,kv,On,Dv,$v=Te(()=>{Uv=require("path"),Mv=require("fs"),Pv=D(require("fastify")),vv=D(require("@fastify/cors")),Bv=D(gT()),Hv=D(require("@fastify/autoload")),jT=D(X()),ZT=D(b()),De=D(F()),H7=D(Av()),Fv=D(xr()),qv=D(Nv()),Gv=D(Iv()),xv=D(Lv()),kv=D(hf());Qo();Mr();Dv=new Set;a(F7,"handleFile");a(q7,"customFunctionsServer");a(G7,"setUp");a(x7,"buildRouteFolder");a(Vv,"buildServer");a(k7,"ready")});var tR={};Qe(tR,{start:()=>V7});function V7(e){return{handleFile(t,r,s){Kv||(Kv=!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,Qv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Yv.set(r,s)}}}var Wv,Qv,Yv,Kv,zv=Te(()=>{Wv=D(require("send")),Qv=require("fs"),Yv=new Map;a(V7,"start")});function K7(e,t=1,r){if(rR++,(0,Qi.startWorker)("server/threads/threadServer.js",{name:Sf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Sf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Y7.push(n),await n,ca.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=pf.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ca.indexOf(s);o>-1&&ca.splice(o,1)}if(a(i,"removeWorker"),ua){let o=ua;ua=[];for(let c of o)Zv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{sR?sR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Qi.shutdownWorkers)(),rR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function e0(e=0,t){if(typeof e=="string")try{(0,Tf.existsSync)(e)&&(0,Tf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=W7:r=Q7(t):r=nR;let s=(0,la.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Zv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),sR=!0,r(o,(c,u)=>{if(!c){if(Jv){let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});Jv.deliverSocket(l,e,u),l.resume()}else rR>0?(ua.length===0&&setTimeout(()=>{ua.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,ua.push(o)):(console.log("start up a dynamic thread to handle request"),K7(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 la.Socket({handle:o,writable:!0,readable:!0});j7(l,c,e)}Nr(!0,"socket-routed")})};let n=gc();jv.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 nR(e,t){let r,s=0;for(let n of ca){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=mf)return mf=i,t(r);s=i}mf=0,t(r)}function W7(e,t){let r={};e.getpeername(r);let s=r.address,n=_a.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);nR(e,o=>{_a.set(s,{worker:o,lastUsed:i}),t(o)})}function Q7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new la.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=_a.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);nR(s,d=>{_a.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function J7(){mf=0;for(let e of ca)e.expectedIdle=e.recentELU.idle+z7,e.requests=1;ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function j7(e,t,r){let s=X7++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),pf.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")),pf.delete(s)),n.event=="destroy"&&(e.destroy(),pf.delete(s))})}var Qi,la,Sf,jv,Tf,$7,ca,ua,Zv,Jv,rR,Y7,sR,mf,Xv,_a,z7,pf,X7,t0=Te(()=>{Qi=D(Ze()),la=require("net"),Sf=D(b()),jv=D(F()),Tf=require("fs");Vn();({isMainThread:$7}=require("worker_threads")),ca=[],ua=[],Zv=[],rR=0,Y7=[];$7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(K7,"startHTTPWorker");a(e0,"startSocketServer");mf=0;a(nR,"findMostIdleWorker");Xv=36e5,_a=new Map;a(W7,"findByRemoteAddressAffinity");a(Q7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of _a)r.lastUsed+Xv<e&&_a.delete(t)},Xv).unref();z7=1e3;a(J7,"updateWorkerIdleness");(0,Qi.setMonitorListener)(J7);pf=new Map,X7=1;a(j7,"proxySocket")});var i0=T((Jde,n0)=>{"use strict";var Z7=require("cluster"),As=X();As.initSync();var s0=b(),Wde=require("util"),Nn=F(),iR=require("fs"),eee=require("fastify"),Qde=gc(),tee=require("@fastify/cors"),ree=require("@fastify/compress"),see=require("@fastify/static"),nee=gT(),iee=require("path"),{PACKAGE_ROOT:oee}=b(),aee=cn(),cee=$(),uee=xr(),lee=sc(),{server:_ee}=(Mr(),Z(ro)),{authHandler:dee,handlePostRequest:fee,serverErrorHandler:Eee,reqBodyValidationHandler:hee}=hf(),zde=require("net"),{registerContentHandlers:mee}=(Qo(),Z(sP)),pee=6e4,See=1024*1024*1024,Tee="TRUE",{CONFIG_PARAMS:bn}=s0,zi;n0.exports={hdbServer:r0,start:r0};async function r0(e){try{Nn.info("In Fastify server"+process.cwd()),Nn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Nn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Z7.isMaster,await Ree();let t=As.get(bn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;zi=gee(t),await zi.ready(),e||(e={}),e.isOperationsServer=!0,zi.server.cantCleanupProperly=!0;try{_ee.http(zi.server,e),zi.server.closeIdleConnections||await zi.listen({port:0,host:"::"})}catch(r){throw zi.close(),Nn.error(r),Nn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Nn.fatal(t),process.exit(1)}}a(r0,"operationsServer");async function Ree(){Nn.trace("Configuring HarperDB process."),aee.setSchemaDataToGlobal(),await uee.setUsersToGlobal(),await lee.getLicense()}a(Ree,"setUp");function gee(e){Nn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Aee(e),r=eee(t);r.server.headersTimeout=Nee(),r.setErrorHandler(Eee);let s=Oee();s&&r.register(tee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(nee),r.register(ree),r.register(see,{root:iee.join(oee,"studio")}),mee(r);let n=As.get(s0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!cee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[hee,dee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),fee(i,o)}),r.get("/health",()=>"HarperDB is running."),Nn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(gee,"buildServer");function Aee(e){let t=As.get(bn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(bn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:See,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(bn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(bn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(bn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:iR.readFileSync(n),cert:iR.readFileSync(i)+(o?`
|
|
29
29
|
|
|
30
|
-
`+oR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Oee,"getServerOptions");function Nee(){let e=As.get(Nn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Nn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Ree)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Nee,"getCORSOpts");function bee(){return As.get(Nn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??See}a(bee,"getHeaderTimeoutConfig")});var S0=T((rfe,p0)=>{"use strict";var{decode:yee}=require("msgpackr"),{isMainThread:Zde,parentPort:Iee,threadId:efe}=require("worker_threads"),u0=dt(),bn=ke(),wee=b(),bu=G(),a0=X(),l0=b();Ze();var Cee=an(),{recordAction:Lee,recordActionBinary:Dee}=(kn(),Z(b_)),{publishToStream:Uee}=u0,tfe={durable:bn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Mee,Pee,vee,_0,d0;p0.exports={initialize:f0,workQueueListener:m0,setSubscription:Bee,setIgnoreOrigin:qee,getDatabaseSubscriptions:Hee};async function f0(){d0=!0,bu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await u0.getNATSReferences();Mee=e,Pee=e.info.server_name,vee=t,_0=r}a(f0,"initialize");var Rf=new Map;function Bee(e,t,r){let s=Rf.get(e);s||Rf.set(e,s=new Map),s.set(t,r),d0||f0().then(m0)}a(Bee,"setSubscription");function Hee(){return Rf}a(Hee,"getDatabaseSubscriptions");var E0;function qee(e){E0=e}a(qee,"setIgnoreOrigin");var h0=100,c0=new Array(h0),Tf=0;async function m0(){let t=await(await _0.consumers.get(bn.WORK_QUEUE_CONSUMER_NAMES.stream_name,bn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();Iee?.on("message",async r=>{let{type:s}=r;s===l0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await c0[Tf],c0[Tf]=Fee(r).catch(s=>{bu.error(s)}),++Tf>=h0&&(Tf=0)}a(m0,"workQueueListener");async function Fee(e){let t=yee(e.data);Lee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=a0.get(wee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(bn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(bn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(bn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!E0),Dee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(bn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;bu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),bu.trace(`messageProcessor nats msg id: ${e.headers.get(bn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=Rf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:aR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:aR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:aR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}a0.get(l0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Uee(e.subject.split(".").slice(0,-1).join("."),Cee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){bu.error(o)}e.ack()}a(Fee,"messageProcessor");function aR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(aR,"convertOperation")});var fR={};Qe(fR,{disableNATS:()=>xee,publishToStream:()=>bf,setNATSReplicator:()=>cR,setPublishToStream:()=>kee,setSubscription:()=>dR,start:()=>Gee});function Gee(){Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$ee()}function xee(e=!0){O0=e}function kee(e,t){bf=e,dR=t}function $ee(){if(O0||process.env._DISABLE_NATS)return;let e=hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];cR(n,r,i)}}ER((r,s)=>{cR(r.tableName,r.databaseName,r),s&&b0(r)}),!T0&&(T0=!0)}function cR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){b0(i)}static subscribe(){let i=new is;return dR(t,e,i),i}static subscribeOnThisThread(i){return i<Vee}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new gf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=N0;return i}a(s,"getNATSTransaction")}function b0(e){let t=Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_NODENAME);bf(`${lR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,_R.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var R0,lR,_R,g0,A0,Af,Of,Nf,O0,bf,dR,Vee,N0,T0,gf,uR,y0=Te(()=>{fe();as();R0=D(dt()),lR=D(ke()),_R=D(an());va();g0=D(S0()),A0=D(mr()),Af=D(X()),Of=D(b()),Nf=D(G());a(Gee,"start");a(xee,"disableNATS");bf=R0.publishToStream,dR=g0.setSubscription;a(kee,"setPublishToStream");Vee=2;a($ee,"assignReplicationSource");a(cR,"setNATSReplicator");a(b0,"publishSchema");gf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=Af.default.get(Of.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Nf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(bf(`${lR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,_R.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Nf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},uR=class extends gf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,A0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};N0=new uR});async function w0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hR.getResource(e,{});n=new pR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hR.get(e);i&&i.delete()}n=new If(e,t)}return n}function mR(){return yf++,yf>65500&&(yf=1),yf}var I0,_a,hR,yf,If,pR,C0=Te(()=>{fe();eu();I0=D(mr()),_a=D(G());fi();hR=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(w0,"getSession");yf=1;a(mR,"getNextMessageId");If=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,_a.trace)("Resuming subscription from",n,"from",o);let h=jn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=mR());let Q=N.id;Array.isArray(Q)&&(Q=Ko(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,_a.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=mR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=jn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},pR=class extends If{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=mR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,_a.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,I0.getNextMonotonicTime)()),(0,_a.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hR.put(this.sessionRecord)),t.qos}}});var TR={};Qe(TR,{start:()=>Kee});async function Kee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=U0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Yee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,M0.getSuperUser)());let{onMessage:u,onClose:_}=U0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function U0(e,t,r,s,n){D0||(D0=!0,Oc(d=>{wf>0&&d.push({metric:"mqtt-connections",connections:wf,byThread:!0})}));let i;wf++;let o,c={protocolVersion:4},u=(0,Cf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){wf--,i||(i=!0,o?.disconnect(),kr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&L0.notify({username:s.username,status:yn.AUTH_AUDIT_STATUS.SUCCESS,type:yn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,SR.get)(yn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&L0.error({username:s.username,status:yn.AUTH_AUDIT_STATUS.FAILURE,type:yn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=w0({user:s,...d}),o=await o}catch(N){return(0,Xr.error)(N),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ea(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Xr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Cf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Cf,M0,SR,yn,Xr,L0,Yee,D0,wf,P0=Te(()=>{Cf=require("mqtt-packet");C0();M0=D(xr());Wo();kn();Mr();SR=D(X()),yn=D(b()),Xr=D(G()),L0=(0,Xr.loggerWithTag)("auth-event"),Yee=!0;a(Kee,"start");wf=0;a(U0,"onSocket")});var B0,v0,RR,H0=Te(()=>{B0=require("os"),v0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,B0.platform)()!="win32"&&(RR=require("node-unix-socket").createReuseportFd)});var Ld={};Qe(Ld,{component_errors:()=>da,loadComponent:()=>Lf,loadComponentDirectories:()=>K0,setErrorReporter:()=>Jee});function K0(e,t){t&&(AR=t),e&&(OR=e);let r=[];if((0,Os.existsSync)(gR)){let n=(0,Os.readdirSync)(gR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(gR,o);r.push(Lf(c,AR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Lf(s,AR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Y0=!0})}function Jee(e){wu=e}async function Lf(e,t,r,s,n,i){if(!F0.has(e)){F0.set(e,!0),n&&(OR=n);try{let o;s&&(da=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,$0.getConfigObj)():(0,G0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=NR;let u=[],_=s;for(let l in o){let d=o[l];if(da.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,Os.existsSync)(N=(0,gt.join)(I,"node_modules",l));)if(I=(0,gt.dirname)(I),I.length<(0,V0.getHdbBasePath)().length){N=null;break}if(N)f=await Lf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=zee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(yu.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!q0.includes(I)){let N=bR.get(yR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&Iu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!RR)&&(q0.push(I),t0(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),OR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,k0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==NR[l]?.files&&!(0,Os.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,x0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await Qee(Q);yu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else yu.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${F.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,wu?.(x),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(x),t.set(d.path||"/",new Cu(x)),da.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,wu?.(h),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(h),t.set(d.path||"/",new Cu(h),null,!0),da.set(s?l:(0,gt.basename)(e),h.message)}}if(yu.isMainThread&&!Y0&&i&&(0,fa.watchDir)(e,async()=>K0()),o.extensionModule)return await Al((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;wu?.(new Error(l)),((0,fa.getWorkerIndex)()===0?console:Iu.default).error(l),da.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,wu?.(o),t.set("",new Cu(o))}}}var Os,gt,yu,G0,bR,yR,x0,fa,Iu,k0,V0,Wee,$0,Qee,gR,OR,Y0,AR,da,zee,NR,q0,F0,wu,Cu,Dd=Te(()=>{Os=require("fs"),gt=require("path"),yu=require("worker_threads"),G0=require("yaml"),bR=D(X()),yR=D(b());GA();$A();YA();aP();Yv();Jv();x0=D(require("fast-glob")),fa=D(Ze()),Iu=D(G());PE();Mr();k0=D(j());as();fe();r0();V0=D(X()),Wee=D(o0());Ad();y0();P0();$0=D(hr());H0();({readFile:Qee}=Os.promises),gR=bR.get(yR.CONFIG_PARAMS.COMPONENTSROOT),OR=new Map,da=new Map;a(K0,"loadComponentDirectories");zee={REST:Yd,rest:Yd,graphqlSchema:ME,jsResource:BE,fastifyRoutes:tR,login:qE,static:rR,operationsApi:Wee,customFunctions:{},http:{},clustering:fR,authentication:tu,mqtt:TR},NR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(NR,"static",{value:{files:"web/**"}});q0=[],F0=new Map;a(Jee,"setErrorReporter");a(Lf,"loadComponent");Cu=class extends Nt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var z0=T((Mfe,Q0)=>{var{isMainThread:W0}=require("worker_threads"),{getTables:Xee}=(fe(),Z(Ce)),{loadComponentDirectories:jee,loadComponent:Zee}=(Dd(),Z(Ld)),{resetResources:ete}=(eu(),Z(IU)),tte=JS(),rte=hr(),{dirname:ste}=require("path"),{getConnection:nte}=dt(),ite=X(),ote=b(),IR=new Map;async function ate(e=!1){!W0&&ite.get(ote.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nte();try{W0&&await tte()}catch(s){console.error(s)}let t=ete();Xee(),t.isWorker=e,await Zee(ste(rte.getConfigFilePath()),t,"hdb",!0,IR),await jee(IR,t);let r=[];for(let[s]of IR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ate,"loadRootComponents");Q0.exports.loadRootComponents=ate});var Ze=T((vfe,si)=>{"use strict";var{Worker:cte,MessageChannel:ute,parentPort:Qs,isMainThread:UR,threadId:lte,workerData:In}=require("worker_threads"),{PACKAGE_ROOT:_te}=b(),{join:Z0,isAbsolute:dte,extname:fte}=require("path"),{server:eB}=(Mr(),Z(to)),{watch:Ete,readdir:hte}=require("fs/promises"),{totalmem:J0}=require("os"),Mf=b(),mte=X(),wn=G(),{randomBytes:pte}=require("crypto"),{_assignPackageExport:Ste}=require("../index"),Tte=b(),X0=1024*1024,ri=[],jr=[],Rte=50,MR=1e4,gte="restart",tB="request_thread_info",rB="resource_report",sB="thread_info",nB="added-port",Ate="ack",wR;Ste("threads",jr);si.exports={startWorker:CR,restartWorkers:vR,shutdownWorkers:Ite,workers:ri,setMonitorListener:vte,onMessageFromWorkers:wte,onMessageByType:lB,broadcast:Lte,broadcastWithAcknowledgement:Ute,setChildListenerByType:yte,getWorkerIndex:iB,getWorkerCount:oB,getTicketKeys:aB,setMainIsWorker:Nte,setTerminateTimeout:Ote,restartNumber:In?.restartNumber||1};jr.onMessageByType=lB;jr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=jr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var PR;function Ote(e){MR=e}a(Ote,"setTerminateTimeout");function iB(){return In?In.workerIndex:PR?0:void 0}a(iB,"getWorkerIndex");function oB(){return In?In.workerCount:PR?1:void 0}a(oB,"getWorkerCount");function Nte(e){PR=e}a(Nte,"setMainIsWorker");var Df;function aB(){return Df||(Df=UR?pte(48):In.ticketKeys,Df)}a(aB,"getTicketKeys");Object.defineProperty(eB,"workerIndex",{get(){return iB()}});Object.defineProperty(eB,"workerCount",{get(){return oB()}});var cB={[tB](e,t){Mte(t)},[rB](e,t){Pte(t,e)}};function CR(e,t={}){let r=process.constrainedMemory?.()||J0();r=Math.min(r,J0(),2e4*X0);let s=Math.max(Math.floor(r/X0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new ute;_.existingPort=u,i.push(_),o.push(_.port2)}fte(e)||(e+=".js");let c=new cte(dte(e)?e:Z0(_te,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:si.exports.restartNumber,ticketKeys:aB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:nB,port:u,threadId:c.threadId},[u]);return Pf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>CR(e,t),c.on("error",u=>{console.error("Worker error:",u),wn.error("Worker error:",u)}),c.on("exit",u=>{ri.splice(ri.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rte?(t.unexpectedRestarts=c.unexpectedRestarts+1,CR(e,t)):wn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{cB[u.type]?.(u,c)}),ri.push(c),Hte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(CR,"startWorker");var bte=[Mf.THREAD_TYPES.HTTP];async function vR(e=null,t=2,r=!0){if(UR){if(r){let{loadRootComponents:o}=z0();await o()}si.exports.restartNumber++,t<1&&(t=t*ri.length);let s=[],n=[];for(let o of ri.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;wn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:si.exports.restartNumber,type:Mf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=bte.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),MR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Tte.ITC_EVENT_TYPES.CHILD_STARTED&&(wn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");wn.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=pd();r&&(e==="http"||!e)&&mte.get(Mf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Qs.postMessage({type:gte,workerType:e})}a(vR,"restartWorkers");function yte(e,t){cB[e]=t}a(yte,"setChildListenerByType");function Ite(e){return vR(e,1/0,!1)}a(Ite,"shutdownWorkers");var uB=[];function wte(e){uB.push(e)}a(wte,"onMessageFromWorkers");var LR=new Map;function lB(e,t){let r=LR.get(e);r||LR.set(e,r=[]),r.push(t)}a(lB,"onMessageByType");var Cte=10;async function Lte(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Cte&&(t=0,await new Promise(setImmediate))}catch(s){wn.error("Unable to send message to worker",s)}}a(Lte,"broadcast");var Uf=new Map,Dte=1;function Ute(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Dte++,i=a(()=>{Uf.delete(n),--r===0&&t(),s!==Qs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Uf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Uf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){wn.error("Unable to send message to worker",n)}r===0&&t()})}a(Ute,"broadcastWithAcknowledgement");function Mte(e){e.postMessage({type:sB,workers:_B()})}a(Mte,"sendThreadInfo");function _B(){let e=Date.now();return ri.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(_B,"getChildWorkerInfo");function Pte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Pte,"recordResourceReport");var DR;function vte(e){DR=e}a(vte,"setMonitorListener");var Bte=1e3,j0=!1;function Hte(){j0||(j0=!0,setInterval(()=>{for(let e of ri){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DR&&DR()},Bte).unref())}a(Hte,"startMonitoring");var qte=1e3;if(Qs){Pf(Qs);for(let e=0,t=In.addPorts.length;e<t;e++){let r=In.addPorts[e];r.threadId=In.addThreadIds[e],Pf(r)}setInterval(()=>{let e=process.memoryUsage();Qs.postMessage({type:rB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qte).unref(),wR=a(()=>new Promise((e,t)=>{Qs.on("message",r),Qs.postMessage({type:tB});function r(s){s.type===sB&&(Qs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wR=_B;si.exports.getThreadInfo=wR;function Pf(e,t){jr.push(e),e.on("message",r=>{if(r.type===nB)r.port.threadId=r.threadId,Pf(r.port);else if(r.type===Ate){let s=Uf.get(r.id);s&&s()}else{for(let n of uB)n(r,e);let s=LR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){wn.error(i)}}}).on("close",()=>{jr.splice(jr.indexOf(e),1)}).on("exit",()=>{jr.splice(jr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Pf,"addPort");if(UR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await hte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Z0(s,i.name));try{for await(let{filename:i}of Ete(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await vR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");si.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Qs.on("message",async e=>{let{type:t}=e;t===Mf.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Qs.unref(),setTimeout(()=>{wn.warn("Thread did not voluntarily terminate",lte),process.exit(0)},MR).unref())})});function fB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ea||((0,Du.onMessageByType)(dB,d=>{EB(d.path)}),(0,Du.onMessageByType)(Fte,d=>{(0,Lu.trace)("confirming to proceed with txn",d.txnId)}),Ea=Object.create(null));let c=Ea[i]||(Ea[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Ko(t);let _=new HR(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function EB(e,t){if(!Ea)return;let r=Ea[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:BR,exclusiveStart:!0})){BR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ko(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Lu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Lu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},BR,!0)}function hB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Du.broadcast)({type:dB,path:n}),EB(n,!0)})}}var Lu,Du,dB,Fte,Ea,xfe,HR,BR,mB=Te(()=>{Lu=D(G()),Du=D(Ze());va();eu();oo();dB="transaction",Fte="transaction-await",xfe=Buffer.alloc(4096);a(fB,"addSubscription");HR=class extends is{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},BR=Date.now();a(EB,"notifyFromTransactionData");a(hB,"listenToCommits")});var HT={};Qe(HT,{coerceType:()=>Ff,makeTable:()=>kf,setServerUtilities:()=>Qte,updateResource:()=>vu});function kf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),hB(i,u);let S=oh(i,s,u),A=0,I,N,Y,Q={},F=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Mt=2,Pe={},At={},es=864e5,JR,ku,YB=10,KB=6;E&&ZR();class at extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,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,Uu);switch(M.type){case"put":return k._writeUpdate(z,Uu);case"delete":return k._writeDelete(Uu);case"publish":return k._writePublish(z,Uu);case"invalidate":return k.invalidate(Uu);default:Ke.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,zi.getWorkerIndex)()):(0,zi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let 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(oi=>oi.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(ie=k,U(k,k),new Promise(ne=>{ie.resolve=ne})):U(k,k)});y&&(await Ne,Hu.signalUserChange(new qu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Sa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=Cn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return XR(m,g,{transaction:U},L,M=>{if(M?vu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Js.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[FR]=!0,xR(V,z=>(vu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=jf(this[we],this[zs],this[me]);if(m)return this[FR]=!0,xR(m,g=>{this[zs]=g,this[Re]=g.value,this[qf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,Zf()}static enableAuditing(m=!0){E=m,m&&ZR(),at.audit=m}static coerceId(m){return m===""?null:Ff(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Hu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[cs])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let C=$u(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=GR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=$u(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=GR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[cs]){let C=$u(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=GR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return $u(m)?.delete}update(m,g){if(!Cn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[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),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[zs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:At.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[zs],L,vf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,Bf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Vu(m,g,null)}),E)S(m,null,L,C,Bf,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,OB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=Cn(C),L=this[we];Sa(L);let y=this[zs];this[qR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[SB]||dl(m)){if(this.validate(m),C?.source?m=Ba(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=Ba(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:At.put&&(()=>At.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),vu(this,V));let ie=V?.value;this[qR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Vu(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=Cn(this[me]),C=this[we];Sa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),vu(this,y)),!(y?.version>L)&&(Vu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[zs],L,0,E,this[me],0,"delete"),E||Zf()):i.remove(this[we]))}}),!0}search(m){let g=Cn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Js.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Ff(Ne,Ee)):Ff(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,AB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Pu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===Pu.SEARCH_TYPES.CONTAINS||Ee===Pu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Pu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=kte:k.estimated_count=xte}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Hf.SKIP);else{let k=IE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(wE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=IE(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&&jf(He,oi,z,this);if(lr)return lr.then(zB=>kt(zB))}let ys=oi?.value;if(!ys)return Hf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](ys))return Hf.SKIP;return ys}return a(kt,"processEntry"),k.map(oi=>XR(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=fB(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[cs]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[cs]){if(L){if(R)throw new Js.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=Sr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||gB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=Sr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||gB(C,z)){let 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,Gf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[zs]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=Sr(V),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[qf],timestamp:this[zs]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[qR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=Cn(this[me]),R=this[we]||null;Sa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[zs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:At.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&Zf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],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 Js.ClientError(g.join(". "))}getUpdatedTime(){return this[qf]}wasLoadedFromSource(){return N?!!this[FR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Js.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Js.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value: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(){El(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Mu(),Sr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Mu();let L=Sr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Mu();let y=u.get(R);if(y){let U=Sr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let WB=at.prototype;return WB[SB]=!0,d&&at.setTTLExpiration(d/1e3),B&&QB(),at;function Vu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Bu.getIndexedValues)(M);if(V){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Bu.getIndexedValues)(U),V){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(Vu,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>TB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,Gf.writeKey)(W,Kte,0)>TB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Sa,"checkValidId");function XR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>KB&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Mt>2&&Mt--}else se=Mt,Mt<YB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(XR,"loadLocalRecord");function $u(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Wte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a($u,"getTablePermissions");function jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(vf|Bf)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=jR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new Js.ServerError("Entry is not cached",504);return}else return L}}}a(jf,"ensureLoadedFromSource");function Cn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new di,m.lmdbDb=i,m;m=g}while(!0)}else return new pl}a(Cn,"txnForContext");async function jR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(vf|Bf)?L(jR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Yte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,ie)=>{let k;xR(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&vf;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Bu.getNextMonotonicTime)());let ys=performance.now()-Ne;if(Nr(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,ys)=>{if(ys?.version!==R)return;let lr=Vu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,ys,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,ys,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 Zf(){if(es!==JR&&(JR=es,(0,zi.getWorkerIndex)()===(0,zi.getWorkerCount)()-1)){if(ku&&clearTimeout(ku),!es)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/es)*es+W.getTime(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),ku=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(ku);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+$te<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Mu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(Zf,"scheduleCleanup");function ZR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(ZR,"addDeleteRemoval");function QB(){(0,zi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Mu()}}catch(W){Ke.error("Error in evicting old records",W)}},Vte).unref()}a(QB,"runRecordExpirationEviction")}function GR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function RB(){}function Qte(e){OB=e}function Ff(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!zte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,xf.autoCast)(e)}function gB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function xR(e,t,r){return e?.then?e.then(t,r):t(e)}function vu(e,t){e[zs]=t,e[Re]=t?.value??null,e[qf]=t?.version}var Ns,Hf,Bu,AB,Pu,Fu,Js,Hu,qu,Ke,Gf,zi,xf,Gte,OB,xte,kte,Vte,$te,pB,Yte,qf,SB,zs,qR,FR,Uu,vf,Bf,Kte,TB,Wte,nEe,zte,Mu,nf=Te(()=>{Ns=D(b()),Hf=require("lmdb"),Bu=D(mr()),AB=require("lodash");as();bE();Pu=D(ze()),Fu=D(X());mB();Js=D(j()),Hu=D(un()),qu=D(ds());fe();Tl();Ke=D(G());ml();fi();Gf=require("ordered-binary"),zi=D(Ze());oo();xf=D($());xa();kn();Gte=new Uint8Array(9);Gte[8]=192;xte=1e8,kte=1e7,Vte=6e4,$te=864e5;Fu.initSync();pB=Fu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Yte=1e4,qf=Symbol.for("version"),SB=Symbol.for("incremental-update"),zs=Symbol("entry"),qR=Symbol("is-saving"),FR=Symbol("loaded-from-source"),Uu={isNotification:!0,ensureLoaded:!1},vf=1,Bf=8,Kte=Buffer.allocUnsafeSlow(8192),TB=1978,Wte={read:!0,insert:!0,update:!0,delete:!0},nEe=(0,xf.convertToMS)(Fu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(kf,"makeTable");a(GR,"attributesAsObject");a(RB,"noop");a(Qte,"setServerUtilities");zte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Ff,"coerceType");a(gB,"isDescendantId");Mu=a(()=>new Promise(setImmediate),"rest");a(xR,"when");a(vu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>zm,dropTableMeta:()=>tre,getDatabases:()=>hs,getTables:()=>Jte,onUpdatedTable:()=>ER,readMetaDb:()=>Gu,resetDatabases:()=>Xte,table:()=>et,tables:()=>pr});function Jte(){return Wf||hs(),pr||{}}function hs(){if(Wf)return xe;Wf=!0,pa=new Map;let e=(0,xt.getHdbBasePath)()&&(0,qe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,qe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Gu((0,qe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,qe.join)((0,ma.getBaseSchemaPath)(),r.name),n=(0,qe.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);Gu((0,qe.join)(s,i.name),(0,qe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Cr.existsSync)(n))for(let o of(0,Cr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,qe.extname)(o.name).toLowerCase()===".mdb"&&Gu((0,qe.join)(n,o.name),(0,qe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,qe.join)(c.path,(0,qe.basename)(o+".mdb"));(0,Cr.existsSync)(u)&&Gu(u,o,r,null,!0)}}for(let r in xe){let s=pa.get(r);if(s){let n=xe[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in pr)delete pr[n];delete pr[Qf]}}return pa=null,xe}}function Xte(){Wf=!1;for(let[,e]of ni)e.needsDeletion=!0;hs();for(let[e,t]of ni)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ni.delete(e));return xe}function Gu(e,t,r=$R,s,n){let i=new kR.default(e,!1);try{let o=ni.get(e);o?o.needsDeletion=!1:(o=(0,$f.open)(i),ni.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Vf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Cr.existsSync)(s)&&(i.path=s,_=(0,$f.open)(i),_.isLegacy=!0):_=bl(o));let l=IB(r),d=l[Qf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,xt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ha)||0)&&u.putSync(ha,Y+1):(S.tableId=Y=u.get(ha),Y||(Y=1),u.putSync(ha,Y+1),u.putSync(S.key,S));let x=new Ji.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Ll(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new Ji.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=wB(l,E,kf({primaryStore:Q,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of YR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function IB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=pr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Qf]=r,pa.set(e,r)}return t}function wB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=$R),hs();let r=IB(e),s=(0,qe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,qe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=ni.get(o);if(!c){let u=new kR.default(o,!1);c=(0,$f.open)(u),ni.set(o,c)}return c}async function zm(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ni.delete(n.path),n.status==="open"&&(await n.close(),await NB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[Qf]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=$R);let l=mc({database:t,table:e}),d=xe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new Ji.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=bl(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,xt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new Ji.default(!1,!0),B=e+"/",x=Ll(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A),x.tableId=S.get(ha),x.tableId||(x.tableId=1),S.putSync(ha,x.tableId+1),h.tableId=x.tableId,f=wB(d,e,kf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,F(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Vf.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,F(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<xu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,F(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=ere(f,Q,Y):I&&Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of YR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function ere(e,t,r){try{let s=e.schemaVersion;await Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,bB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),xu.workerData&&xu.workerData.restartNumber!==yB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>jte?await n:u>Zte&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Yf.signalSchemaChange(new Kf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function tre({table:e,database:t}){let r=mc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function ER(e){YR.push(e)}var xt,Vf,$f,qe,Cr,ma,Ji,kR,Lr,NB,VR,bB,Yf,Kf,xu,Zr,yB,$R,Qf,pr,xe,ha,YR,Wf,ni,pa,jte,Zte,fe=Te(()=>{xt=D(X()),Vf=D(ze()),$f=require("lmdb"),qe=require("path"),Cr=require("fs"),ma=D(ve());nf();Ji=D(Dl()),kR=D(Ml()),Lr=D(b()),NB=D(require("fs-extra")),VR=require("../index"),bB=D(mr()),Yf=D(un()),Kf=D(ds()),xu=require("worker_threads"),Zr=D(G()),yB=D(Ze());oo();xa();$R="data",Qf=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,VR._assignPackageExport)("databases",xe);(0,VR._assignPackageExport)("tables",pr);ha=Symbol.for("next-table-id"),YR=[],ni=new Map;a(Jte,"getTables");a(hs,"getDatabases");a(Xte,"resetDatabases");a(Gu,"readMetaDb");a(IB,"ensureDB");a(wB,"setTable");a(mc,"database");a(zm,"dropDatabase");a(et,"table");jte=1e3,Zte=10;a(ere,"runIndexing");a(tre,"dropTableMeta");a(ER,"onUpdatedTable")});var $=T((fEe,kB)=>{"use strict";var ii=require("path"),MB=require("fs-extra"),ur=G(),CB=require("fs-extra"),zf=require("os"),rre=require("net"),sre=require("recursive-iterator"),We=b(),nre=Ug(),LB=require("papaparse"),Jf=require("moment"),{inspect:ire}=require("util"),DB=require("is-number"),dEe=require("lodash"),ore=require("minimist"),are=require("https"),cre=require("http"),{hdb_errors:Xf}=j(),ure=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,PB=require("util").promisify(setTimeout),lre=100,_re=5,dre="",fre=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};kB.exports={isEmpty:Dr,isEmptyOrZeroLength:Xs,arrayHasEmptyValues:mre,arrayHasEmptyOrZeroLengthValues:pre,buildFolderPath:Sre,isBoolean:vB,errorizeMessage:Ere,stripFileExtension:Rre,autoCast:gre,autoCastJSON:BB,autoCastJSONDeep:WR,removeDir:Are,compareVersions:Ore,isCompatibleDataVersion:Nre,escapeRawValue:bre,unescapeValue:yre,stringifyProps:Ire,timeoutPromise:Cre,isClusterOperation:Dre,getClusterUser:Mre,checkGlobalSchemaTable:Ure,getHomeDir:qB,getPropsFilePath:wre,promisifyPapaParse:Pre,removeBOM:FB,createEventPromise:vre,checkProcessRunning:Bre,checkSchemaTableExist:Hre,checkSchemaExists:GB,checkTableExists:xB,getStartOfTomorrowInSeconds:qre,getLimitKey:Fre,isObject:Tre,isNotEmptyAndHasValue:hre,autoCasterIsNumberCheck:HB,backtickASTSchemaItems:Gre,isPortTaken:Lre,createForkArgs:xre,autoCastBoolean:kre,async_set_timeout:PB,getTableHashAttribute:Vre,doesSchemaExist:$re,doesTableExist:Yre,stringifyObj:Kre,ms_to_time:Wre,changeExtension:Qre,getEnvCliRootPath:QR,noBootFile:zre,httpRequest:Jre,transformReq:Xre,convertToMS:jre,PACKAGE_ROOT:We.PACKAGE_ROOT};function Ere(e){return e instanceof Error?e:new Error(e)}a(Ere,"errorizeMessage");function Dr(e){return e==null}a(Dr,"isEmpty");function hre(e){return!Dr(e)&&(e||e===0||e===""||vB(e))}a(hre,"isNotEmptyAndHasValue");function Xs(e){return Dr(e)||e.length===0||e.size===0}a(Xs,"isEmptyOrZeroLength");function mre(e){if(Dr(e))return!0;for(let t=0;t<e.length;t++)if(Dr(e[t]))return!0;return!1}a(mre,"arrayHasEmptyValues");function pre(e){if(Xs(e))return!0;for(let t=0;t<e.length;t++)if(Xs(e[t]))return!0;return!1}a(pre,"arrayHasEmptyOrZeroLengthValues");function Sre(...e){try{return e.join(ii.sep)}catch{console.error(e)}}a(Sre,"buildFolderPath");function vB(e){return Dr(e)?!1:e===!0||e===!1}a(vB,"isBoolean");function Tre(e){return Dr(e)?!1:typeof e=="object"}a(Tre,"isObject");function Rre(e){return Xs(e)?dre:e.slice(0,-fre)}a(Rre,"stripFileExtension");function gre(e){return Dr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:HB(e)===!0?Number(e):ure.test(e)?new Date(e):e}a(gre,"autoCast");function BB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(BB,"autoCastJSON");function WR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=WR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=WR(r);s!==r&&(e[t]=s)}return e}else return BB(e)}a(WR,"autoCastJSONDeep");function HB(e){if(e.startsWith("0.")&&DB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&DB(e))}a(HB,"autoCasterIsNumberCheck");async function Are(e){if(Xs(e))throw new Error(`Directory path: ${e} does not exist`);try{await CB.emptyDir(e),await CB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(Are,"removeDir");function Ore(e,t){if(Xs(e)){ur.info("Invalid current version sent as parameter.");return}if(Xs(t)){ur.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Ore,"compareVersions");function Nre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Nre,"isCompatibleDataVersion");function bre(e){if(Dr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(bre,"escapeRawValue");function yre(e){if(Dr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(yre,"unescapeValue");function Ire(e,t){if(Dr(e))return ur.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+zf.EOL}!Xs(s)&&s[0]===";"?r+=" "+s+n+zf.EOL:Xs(s)||(r+=s+"="+n+zf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Ire,"stringifyProps");function qB(){let e;try{e=zf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(qB,"getHomeDir");function wre(){let e=ii.join(qB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return MB.existsSync(e)||(e=ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(wre,"getPropsFilePath");function Cre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Cre,"timeoutPromise");async function Lre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=rre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Lre,"isPortTaken");function Dre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Dre,"isClusterOperation");function Ure(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ure,"checkGlobalSchemaTable");function Mre(e,t){if(Dr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Dr(e)||Xs(e)){ur.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Mre,"getClusterUser");function Pre(){LB.parsePromise=function(e,t,r){return new Promise(function(s,n){LB.parse(e,{header:!0,transformHeader:FB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Pre,"promisifyPapaParse");function FB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FB,"removeBOM");function vre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${ire(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(vre,"createEventPromise");async function Bre(e){let t=!0,r=0;do await PB(lre*r++),(await nre.findPs(e)).length>0&&(t=!1);while(t&&r<_re);if(t)throw new Error(`process ${e} was not started`)}a(Bre,"checkProcessRunning");function Hre(e,t){let r=GB(e);if(r)return r;let s=xB(e,t);if(s)return s}a(Hre,"checkSchemaTableExist");function GB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Xf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(GB,"checkSchemaExists");function xB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Xf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xB,"checkTableExists");function qre(){let e=Jf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Jf().utc().unix();return e-t}a(qre,"getStartOfTomorrowInSeconds");function Fre(){return Jf().utc().format("DD-MM-YYYY")}a(Fre,"getLimitKey");function Gre(e){try{let t=new sre(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ur.error("Got an error back ticking items."),ur.error(t)}}a(Gre,"backtickASTSchemaItems");function xre(e){return[e]}a(xre,"createForkArgs");function kre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(kre,"autoCastBoolean");function Vre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Vre,"getTableHashAttribute");function $re(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a($re,"doesSchemaExist");function Yre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Yre,"doesTableExist");function Kre(e){try{return JSON.stringify(e)}catch{return e}}a(Kre,"stringifyObj");function Wre(e){let t=Jf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(Wre,"ms_to_time");function Qre(e,t){let r=ii.basename(e,ii.extname(e));return ii.join(ii.dirname(e),r+t)}a(Qre,"changeExtension");function QR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=ore(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(QR,"getEnvCliRootPath");var KR;function zre(){if(KR)return KR;let e=QR();QR()&&MB.pathExistsSync(ii.join(e,We.HDB_CONFIG_FILE))&&(KR=!0)}a(zre,"noBootFile");function Jre(e,t){let r;return e.protocol==="http:"?r=cre:r=are,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Jre,"httpRequest");function Xre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Xre,"transformReq");function jre(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(jre,"convertToMS")});var $B=T((mEe,VB)=>{"use strict";var zR=b(),Zre=$(),ese=Gs(),bs=G(),tse=sd(),rse=Hc(),hEe=HS(),sse=cn(),nse=xc(),ise=require("semver/functions/gte"),ose=3e4,ase=7;VB.exports=cse;async function cse(){try{bs.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await sse.setSchemaDataToGlobalAsync();let e=await ese.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===zR.PRE_4_0_0_VERSION&&t.push(use(n))}await Promise.allSettled(t),bs.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw bs.error(e),e}}a(cse,"updateAllNodes");async function use(e){try{let{name:t,subscriptions:r}=e;bs.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<ase;){let i=[];if(await tse.buildNodeStatus(e,i),bs.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&ise(i[0].system_info.hdb_version,"4.0.0")){bs.notify("Received open status from node:",t,"calling add node");let o={operation:zR.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await rse(o,!0),bs.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),bs.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await Zre.async_set_timeout(ose)}s||(bs.error("4.0.0 node update was unable to update connection to node:",t),bs.error("Removing following node record from hdb_nodes",e),await nse({operation:zR.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw bs.error(t),t}}a(use,"updateNode")});var lse=$B();(async()=>{try{await lse()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|
|
30
|
+
`+iR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Aee,"getServerOptions");function Oee(){let e=As.get(bn.OPERATIONSAPI_NETWORK_CORS),t=As.get(bn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Tee)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Oee,"getCORSOpts");function Nee(){return As.get(bn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??pee}a(Nee,"getHeaderTimeoutConfig")});var p0=T((tfe,m0)=>{"use strict";var{decode:bee}=require("msgpackr"),{isMainThread:jde,parentPort:yee,threadId:Zde}=require("worker_threads"),c0=dt(),yn=ke(),Iee=b(),yu=F(),o0=X(),u0=b();Ze();var wee=an(),{recordAction:Cee,recordActionBinary:Lee}=(Vn(),Z(y_)),{publishToStream:Dee}=c0,efe={durable:yn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:yn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Uee,Mee,Pee,l0,_0;m0.exports={initialize:d0,workQueueListener:h0,setSubscription:vee,setIgnoreOrigin:Hee,getDatabaseSubscriptions:Bee};async function d0(){_0=!0,yu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await c0.getNATSReferences();Uee=e,Mee=e.info.server_name,Pee=t,l0=r}a(d0,"initialize");var gf=new Map;function vee(e,t,r){let s=gf.get(e);s||gf.set(e,s=new Map),s.set(t,r),_0||d0().then(h0)}a(vee,"setSubscription");function Bee(){return gf}a(Bee,"getDatabaseSubscriptions");var f0;function Hee(e){f0=e}a(Hee,"setIgnoreOrigin");var E0=100,a0=new Array(E0),Rf=0;async function h0(){let t=await(await l0.consumers.get(yn.WORK_QUEUE_CONSUMER_NAMES.stream_name,yn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();yee?.on("message",async r=>{let{type:s}=r;s===u0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await a0[Rf],a0[Rf]=Fee(r).catch(s=>{yu.error(s)}),++Rf>=E0&&(Rf=0)}a(h0,"workQueueListener");async function Fee(e){let t=bee(e.data);Cee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=o0.get(Iee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(yn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(yn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(yn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!f0),Lee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(yn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;yu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),yu.trace(`messageProcessor nats msg id: ${e.headers.get(yn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=gf.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:oR(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:oR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:oR(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})}o0.get(u0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Dee(e.subject.split(".").slice(0,-1).join("."),wee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){yu.error(o)}e.ack()}a(Fee,"messageProcessor");function oR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(oR,"convertOperation")});var dR={};Qe(dR,{disableNATS:()=>Gee,publishToStream:()=>yf,setNATSReplicator:()=>aR,setPublishToStream:()=>xee,setSubscription:()=>_R,start:()=>qee});function qee(){Of.default.get(Nf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Vee()}function Gee(e=!0){A0=e}function xee(e,t){yf=e,_R=t}function Vee(){if(A0||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];aR(n,r,i)}}fR((r,s)=>{aR(r.tableName,r.databaseName,r),s&&N0(r)}),!S0&&(S0=!0)}function aR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(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 _R(t,e,i),i}static subscribeOnThisThread(i){return i<kee}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Af(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=O0;return i}a(s,"getNATSTransaction")}function N0(e){let t=Of.default.get(Nf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);yf(`${uR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var T0,uR,lR,R0,g0,Of,Nf,bf,A0,yf,_R,kee,O0,S0,Af,cR,b0=Te(()=>{fe();as();T0=D(dt()),uR=D(ke()),lR=D(an());Ba();R0=D(p0()),g0=D(mr()),Of=D(X()),Nf=D(b()),bf=D(F());a(qee,"start");a(Gee,"disableNATS");yf=T0.publishToStream,_R=R0.setSubscription;a(xee,"setPublishToStream");kee=2;a(Vee,"assignReplicationSource");a(aR,"setNATSReplicator");a(N0,"publishSchema");Af=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=Of.default.get(Nf.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||(bf.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(yf(`${uR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw bf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},cR=class extends Af{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,g0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};O0=new cR});async function I0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ER.getResource(e,{});n=new mR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ER.get(e);i&&i.delete()}n=new wf(e,t)}return n}function hR(){return If++,If>65500&&(If=1),If}var y0,da,ER,If,wf,mR,w0=Te(()=>{fe();tu();y0=D(mr()),da=D(F());Ei();ER=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(I0,"getSession");If=1;a(hR,"getNextMessageId");wf=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,da.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 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=hR());let Q=N.id;Array.isArray(Q)&&(Q=Wo(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,da.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=hR();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 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=[]}},mR=class extends wf{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=hR(),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,da.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,y0.getNextMonotonicTime)()),(0,da.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ER.put(this.sessionRecord)),t.qos}}});var SR={};Qe(SR,{start:()=>Yee});async function Yee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=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;$ee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,U0.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){L0||(L0=!0,Nc(d=>{Cf>0&&d.push({metric:"mqtt-connections",connections:Cf,byThread:!0})}));let i;Cf++;let o,c={protocolVersion:4},u=(0,Lf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Cf--,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,pR.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&C0.notify({username:s.username,status:In.AUTH_AUDIT_STATUS.SUCCESS,type:In.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,pR.get)(In.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&C0.error({username:s.username,status:In.AUTH_AUDIT_STATUS.FAILURE,type:In.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=I0({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=ta(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,Lf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return ei(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Lf,U0,pR,In,Xr,C0,$ee,L0,Cf,M0=Te(()=>{Lf=require("mqtt-packet");w0();U0=D(xr());Qo();Vn();Mr();pR=D(X()),In=D(b()),Xr=D(F()),C0=(0,Xr.loggerWithTag)("auth-event"),$ee=!0;a(Yee,"start");Cf=0;a(D0,"onSocket")});var v0,P0,TR,B0=Te(()=>{v0=require("os"),P0=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,v0.platform)()!="win32"&&(TR=require("node-unix-socket").createReuseportFd)});var Dd={};Qe(Dd,{component_errors:()=>fa,loadComponent:()=>Df,loadComponentDirectories:()=>Y0,setErrorReporter:()=>zee});function Y0(e,t){t&&(gR=t),e&&(AR=e);let r=[];if((0,Os.existsSync)(RR)){let n=(0,Os.readdirSync)(RR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(RR,o);r.push(Df(c,gR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Df(s,gR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{$0=!0})}function zee(e){Cu=e}async function Df(e,t,r,s,n,i){if(!F0.has(e)){F0.set(e,!0),n&&(AR=n);try{let o;s&&(fa=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,V0.getConfigObj)():(0,q0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=OR;let u=[],_=s;for(let l in o){let d=o[l];if(fa.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,k0.getHdbBasePath)().length){N=null;break}if(N)f=await Df(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Qee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Iu.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&&!H0.includes(I)){let N=NR.get(bR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&wu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!TR)&&(H0.push(I),e0(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),AR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,x0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==OR[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: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 Wee(Q);Iu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Iu.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}`,Cu?.(x),((0,Ea.getWorkerIndex)()===0?console:wu.default).error(x),t.set(d.path||"/",new Lu(x)),fa.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}`,Cu?.(h),((0,Ea.getWorkerIndex)()===0?console:wu.default).error(h),t.set(d.path||"/",new Lu(h),null,!0),fa.set(s?l:(0,gt.basename)(e),h.message)}}if(Iu.isMainThread&&!$0&&i&&(0,Ea.watchDir)(e,async()=>Y0()),o.extensionModule)return await Ol((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Cu?.(new Error(l)),((0,Ea.getWorkerIndex)()===0?console:wu.default).error(l),fa.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}`,Cu?.(o),t.set("",new Lu(o))}}}var Os,gt,Iu,q0,NR,bR,G0,Ea,wu,x0,k0,Kee,V0,Wee,RR,AR,$0,gR,fa,Qee,OR,H0,F0,Cu,Lu,Ud=Te(()=>{Os=require("fs"),gt=require("path"),Iu=require("worker_threads"),q0=require("yaml"),NR=D(X()),bR=D(b());qA();VA();$A();oP();$v();zv();G0=D(require("fast-glob")),Ea=D(Ze()),wu=D(F());vE();Mr();x0=D(j());as();fe();t0();k0=D(X()),Kee=D(i0());Od();b0();M0();V0=D(hr());B0();({readFile:Wee}=Os.promises),RR=NR.get(bR.CONFIG_PARAMS.COMPONENTSROOT),AR=new Map,fa=new Map;a(Y0,"loadComponentDirectories");Qee={REST:Kd,rest:Kd,graphqlSchema:PE,jsResource:HE,fastifyRoutes:eR,login:qE,static:tR,operationsApi:Kee,customFunctions:{},http:{},clustering:dR,authentication:ru,mqtt:SR},OR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(OR,"static",{value:{files:"web/**"}});H0=[],F0=new Map;a(zee,"setErrorReporter");a(Df,"loadComponent");Lu=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 Q0=T((Ufe,W0)=>{var{isMainThread:K0}=require("worker_threads"),{getTables:Jee}=(fe(),Z(Ce)),{loadComponentDirectories:Xee,loadComponent:jee}=(Ud(),Z(Dd)),{resetResources:Zee}=(tu(),Z(yU)),ete=zS(),tte=hr(),{dirname:rte}=require("path"),{getConnection:ste}=dt(),nte=X(),ite=b(),yR=new Map;async function ote(e=!1){!K0&&nte.get(ite.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ste();try{K0&&await ete()}catch(s){console.error(s)}let t=Zee();Jee(),t.isWorker=e,await jee(rte(tte.getConfigFilePath()),t,"hdb",!0,yR),await Xee(yR,t);let r=[];for(let[s]of yR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ote,"loadRootComponents");W0.exports.loadRootComponents=ote});var Ze=T((Pfe,ni)=>{"use strict";var{Worker:ate,MessageChannel:cte,parentPort:Qs,isMainThread:DR,threadId:ute,workerData:wn}=require("worker_threads"),{PACKAGE_ROOT:lte}=b(),{join:j0,isAbsolute:_te,extname:dte}=require("path"),{server:Z0}=(Mr(),Z(ro)),{watch:fte,readdir:Ete}=require("fs/promises"),{totalmem:z0}=require("os"),Pf=b(),hte=X(),Cn=F(),{randomBytes:mte}=require("crypto"),{_assignPackageExport:pte}=require("../index"),Ste=b(),J0=1024*1024,si=[],jr=[],Tte=50,UR=1e4,Rte="restart",eB="request_thread_info",tB="resource_report",rB="thread_info",sB="added-port",gte="ack",IR;pte("threads",jr);ni.exports={startWorker:wR,restartWorkers:PR,shutdownWorkers:yte,workers:si,setMonitorListener:Pte,onMessageFromWorkers:Ite,onMessageByType:uB,broadcast:Cte,broadcastWithAcknowledgement:Dte,setChildListenerByType:bte,getWorkerIndex:nB,getWorkerCount:iB,getTicketKeys:oB,setMainIsWorker:Ote,setTerminateTimeout:Ate,restartNumber:wn?.restartNumber||1};jr.onMessageByType=uB;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 MR;function Ate(e){UR=e}a(Ate,"setTerminateTimeout");function nB(){return wn?wn.workerIndex:MR?0:void 0}a(nB,"getWorkerIndex");function iB(){return wn?wn.workerCount:MR?1:void 0}a(iB,"getWorkerCount");function Ote(e){MR=e}a(Ote,"setMainIsWorker");var Uf;function oB(){return Uf||(Uf=DR?mte(48):wn.ticketKeys,Uf)}a(oB,"getTicketKeys");Object.defineProperty(Z0,"workerIndex",{get(){return nB()}});Object.defineProperty(Z0,"workerCount",{get(){return iB()}});var aB={[eB](e,t){Ute(t)},[tB](e,t){Mte(t,e)}};function wR(e,t={}){let r=process.constrainedMemory?.()||z0();r=Math.min(r,z0(),2e4*J0);let s=Math.max(Math.floor(r/J0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new cte;_.existingPort=u,i.push(_),o.push(_.port2)}dte(e)||(e+=".js");let c=new ate(_te(e)?e:j0(lte,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:ni.exports.restartNumber,ticketKeys:oB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:sB,port:u,threadId:c.threadId},[u]);return vf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>wR(e,t),c.on("error",u=>{console.error("Worker error:",u),Cn.error("Worker error:",u)}),c.on("exit",u=>{si.splice(si.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Tte?(t.unexpectedRestarts=c.unexpectedRestarts+1,wR(e,t)):Cn.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{aB[u.type]?.(u,c)}),si.push(c),Bte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(wR,"startWorker");var Nte=[Pf.THREAD_TYPES.HTTP];async function PR(e=null,t=2,r=!0){if(DR){if(r){let{loadRootComponents:o}=Q0();await o()}ni.exports.restartNumber++,t<1&&(t=t*si.length);let s=[],n=[];for(let o of si.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Cn.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ni.exports.restartNumber,type:Pf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Nte.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),UR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Ste.ITC_EVENT_TYPES.CHILD_STARTED&&(Cn.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");Cn.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}=Sd();r&&(e==="http"||!e)&&hte.get(Pf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Qs.postMessage({type:Rte,workerType:e})}a(PR,"restartWorkers");function bte(e,t){aB[e]=t}a(bte,"setChildListenerByType");function yte(e){return PR(e,1/0,!1)}a(yte,"shutdownWorkers");var cB=[];function Ite(e){cB.push(e)}a(Ite,"onMessageFromWorkers");var CR=new Map;function uB(e,t){let r=CR.get(e);r||CR.set(e,r=[]),r.push(t)}a(uB,"onMessageByType");var wte=10;async function Cte(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>wte&&(t=0,await new Promise(setImmediate))}catch(s){Cn.error("Unable to send message to worker",s)}}a(Cte,"broadcast");var Mf=new Map,Lte=1;function Dte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Lte++,i=a(()=>{Mf.delete(n),--r===0&&t(),s!==Qs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Mf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Mf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Cn.error("Unable to send message to worker",n)}r===0&&t()})}a(Dte,"broadcastWithAcknowledgement");function Ute(e){e.postMessage({type:rB,workers:lB()})}a(Ute,"sendThreadInfo");function lB(){let e=Date.now();return si.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(lB,"getChildWorkerInfo");function Mte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Mte,"recordResourceReport");var LR;function Pte(e){LR=e}a(Pte,"setMonitorListener");var vte=1e3,X0=!1;function Bte(){X0||(X0=!0,setInterval(()=>{for(let e of si){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}LR&&LR()},vte).unref())}a(Bte,"startMonitoring");var Hte=1e3;if(Qs){vf(Qs);for(let e=0,t=wn.addPorts.length;e<t;e++){let r=wn.addPorts[e];r.threadId=wn.addThreadIds[e],vf(r)}setInterval(()=>{let e=process.memoryUsage();Qs.postMessage({type:tB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Hte).unref(),IR=a(()=>new Promise((e,t)=>{Qs.on("message",r),Qs.postMessage({type:eB});function r(s){s.type===rB&&(Qs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else IR=lB;ni.exports.getThreadInfo=IR;function vf(e,t){jr.push(e),e.on("message",r=>{if(r.type===sB)r.port.threadId=r.threadId,vf(r.port);else if(r.type===gte){let s=Mf.get(r.id);s&&s()}else{for(let n of cB)n(r,e);let s=CR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Cn.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(vf,"addPort");if(DR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Ete(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(j0(s,i.name));try{for await(let{filename:i}of fte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ni.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Qs.on("message",async e=>{let{type:t}=e;t===Pf.ITC_EVENT_TYPES.SHUTDOWN&&(ni.exports.restartNumber=e.restartNumber,Qs.unref(),setTimeout(()=>{Cn.warn("Thread did not voluntarily terminate",ute),process.exit(0)},UR).unref())})});function dB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ha||((0,Uu.onMessageByType)(_B,d=>{fB(d.path)}),(0,Uu.onMessageByType)(Fte,d=>{(0,Du.trace)("confirming to proceed with txn",d.txnId)}),ha=Object.create(null));let c=ha[i]||(ha[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=Wo(t);let _=new BR(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function fB(e,t){if(!ha)return;let r=ha[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:vR,exclusiveStart:!0})){vR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Wo(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,Du.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,Du.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"},vR,!0)}function EB(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,Uu.broadcast)({type:_B,path:n}),fB(n,!0)})}}var Du,Uu,_B,Fte,ha,Gfe,BR,vR,hB=Te(()=>{Du=D(F()),Uu=D(Ze());Ba();tu();ao();_B="transaction",Fte="transaction-await",Gfe=Buffer.alloc(4096);a(dB,"addSubscription");BR=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"}}},vR=Date.now();a(fB,"notifyFromTransactionData");a(EB,"listenToCommits")});var BT={};Qe(BT,{coerceType:()=>Gf,makeTable:()=>Vf,setServerUtilities:()=>Wte,updateResource:()=>Bu});function Vf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),EB(i,u);let S=ah(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,zR,Vu,$B=10,YB=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,Mu);switch(M.type){case"put":return k._writeUpdate(z,Mu);case"delete":return k._writeDelete(Mu);case"publish":return k._writePublish(z,Mu);case"invalidate":return k.invalidate(Mu);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,Ji.getWorkerIndex)()):(0,Ji.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(ai=>ai.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),Fu.signalSchemaChange(new qu.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,Fu.signalUserChange(new qu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Ta(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=Ln(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?Bu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Js.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Zf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[FR]=!0,GR(V,z=>(Bu(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=Zf(this[we],this[zs],this[me]);if(m)return this[FR]=!0,GR(m,g=>{this[zs]=g,this[Re]=g.value,this[qf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,eE()}static enableAuditing(m=!0){E=m,m&&jR(),at.audit=m}static coerceId(m){return m===""?null:Gf(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));Fu.signalSchemaChange(new qu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[cs])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let C=Yu(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=qR(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=Yu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=qR(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=Yu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=qR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Yu(m)?.delete}update(m,g){if(!Ln(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];Ta(C),Ln(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[zs],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:At.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[zs],L,Bf,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,Hf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{$u(m,g,null)}),E)S(m,null,L,C,Hf,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,AB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=Ln(C),L=this[we];Ta(L);let y=this[zs];this[HR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[pB]||fl(m)){if(this.validate(m),C?.source?m=Ha(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=Ha(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),Bu(this,V));let ie=V?.value;this[HR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&($u(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=Ln(this[me]),C=this[we];Ta(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),Bu(this,y)),!(y?.version>L)&&($u(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[zs],L,0,E,this[me],0,"delete"),E||eE()):i.remove(this[we]))}}),!0}search(m){let g=Ln(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Js.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Gf(Ne,Ee)):Gf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,gB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===vu.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===vu.SEARCH_TYPES.CONTAINS||Ee===vu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===vu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=xte:k.estimated_count=Gte}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))):Ff.SKIP);else{let k=wE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(CE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=wE(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(ai,He){if(Pt&&He!==void 0){let lr=!z.onlyIfCached&&Zf(He,ai,z,this);if(lr)return lr.then(QB=>kt(QB))}let ys=ai?.value;if(!ys)return Ff.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](ys))return Ff.SKIP;return ys}return a(kt,"processEntry"),k.map(ai=>JR(ai,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=dB(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[cs]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[cs]){if(L){if(R)throw new Js.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=Sr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||RB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=Sr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||RB(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,xf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[zs]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=Sr(V),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[qf],timestamp:this[zs]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[HR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=Ln(this[me]),R=this[we]||null;Ta(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[zs],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:At.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&eE(),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 Js.ClientError(g.join(". "))}getUpdatedTime(){return this[qf]}wasLoadedFromSource(){return N?!!this[FR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Js.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Js.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value: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(){hl(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Pu(),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 Pu();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 Pu();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 KB=at.prototype;return KB[pB]=!0,d&&at.setTTLExpiration(d/1e3),B&&WB(),at;function $u(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,Hu.getIndexedValues)(M);if(V){mB&&L.prefetch(V.map(z=>({key:z,value:W})),TB);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Hu.getIndexedValues)(U),V){mB&&L.prefetch(V.map(z=>({key:z,value:W})),TB);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a($u,"updateIndices");function Ta(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>SB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,xf.writeKey)(W,Yte,0)>SB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Ta,"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>YB&&(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<$B&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(JR,"loadLocalRecord");function Yu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Kte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(Yu,"getTablePermissions");function Zf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Bf|Hf)||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 Js.ServerError("Entry is not cached",504);return}else return L}}}a(Zf,"ensureLoadedFromSource");function Ln(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 fi,m.lmdbDb=i,m;m=g}while(!0)}else return new Sl}a(Ln,"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&(Bf|Hf)?L(XR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},$te)});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;GR(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&Bf;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Hu.getNextMonotonicTime)());let ys=performance.now()-Ne;if(Nr(ys,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${ys.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}Ln(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,ys)=>{if(ys?.version!==R)return;let lr=$u(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,ys,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,ys,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 eE(){if(es!==zR&&(zR=es,(0,Ji.getWorkerIndex)()===(0,Ji.getWorkerCount)()-1)){if(Vu&&clearTimeout(Vu),!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`),Vu=setTimeout(()=>G=G.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(Vu);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+Vte<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Pu();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(eE,"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 WB(){(0,Ji.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 Pu()}}catch(W){Ke.error("Error in evicting old records",W)}},kte).unref()}a(WB,"runRecordExpirationEviction")}function qR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function TB(){}function Wte(e){AB=e}function Gf(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"&&!Qte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,kf.autoCast)(e)}function RB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function GR(e,t,r){return e?.then?e.then(t,r):t(e)}function Bu(e,t){e[zs]=t,e[Re]=t?.value??null,e[qf]=t?.version}var Ns,Ff,Hu,gB,vu,Gu,Js,Fu,qu,Ke,xf,Ji,kf,qte,AB,Gte,xte,kte,Vte,mB,$te,qf,pB,zs,HR,FR,Mu,Bf,Hf,Yte,SB,Kte,sEe,Qte,Pu,of=Te(()=>{Ns=D(b()),Ff=require("lmdb"),Hu=D(mr()),gB=require("lodash");as();yE();vu=D(ze()),Gu=D(X());hB();Js=D(j()),Fu=D(un()),qu=D(ds());fe();Rl();Ke=D(F());pl();Ei();xf=require("ordered-binary"),Ji=D(Ze());ao();kf=D($());ka();Vn();qte=new Uint8Array(9);qte[8]=192;Gte=1e8,xte=1e7,kte=6e4,Vte=864e5;Gu.initSync();mB=Gu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),$te=1e4,qf=Symbol.for("version"),pB=Symbol.for("incremental-update"),zs=Symbol("entry"),HR=Symbol("is-saving"),FR=Symbol("loaded-from-source"),Mu={isNotification:!0,ensureLoaded:!1},Bf=1,Hf=8,Yte=Buffer.allocUnsafeSlow(8192),SB=1978,Kte={read:!0,insert:!0,update:!0,delete:!0},sEe=(0,kf.convertToMS)(Gu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Vf,"makeTable");a(qR,"attributesAsObject");a(TB,"noop");a(Wte,"setServerUtilities");Qte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Gf,"coerceType");a(RB,"isDescendantId");Pu=a(()=>new Promise(setImmediate),"rest");a(GR,"when");a(Bu,"updateResource")});var Ce={};Qe(Ce,{database:()=>pc,databases:()=>xe,dropDatabase:()=>Jm,dropTableMeta:()=>ere,getDatabases:()=>hs,getTables:()=>zte,onUpdatedTable:()=>fR,readMetaDb:()=>xu,resetDatabases:()=>Jte,table:()=>et,tables:()=>pr});function zte(){return Qf||hs(),pr||{}}function hs(){if(Qf)return xe;Qf=!0,Sa=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&xu((0,Fe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,pa.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,pa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,pa.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,pa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);xu((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,Cr.existsSync)(n))for(let o of(0,Cr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&xu((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,Cr.existsSync)(u)&&xu(u,o,r,null,!0)}}for(let r in xe){let s=Sa.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[zf]}}return Sa=null,xe}}function Jte(){Qf=!1;for(let[,e]of ii)e.needsDeletion=!0;hs();for(let[e,t]of ii)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ii.delete(e));return xe}function xu(e,t,r=VR,s,n){let i=new xR.default(e,!1);try{let o=ii.get(e);o?o.needsDeletion=!1:(o=(0,Yf.open)(i),ii.set(e,o));let c=new Xi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB($f.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Cr.existsSync)(s)&&(i.path=s,_=(0,Yf.open)(i),_.isLegacy=!0):_=yl(o));let l=yB(r),d=l[zf],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)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ma)||0)&&u.putSync(ma,Y+1):(S.tableId=Y=u.get(ma),Y||(Y=1),u.putSync(ma,Y+1),u.putSync(S.key,S));let x=new Xi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Dl(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 Xi.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=IB(l,E,Vf({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 $R)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function yB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=pr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),Sa&&!Sa.has(e)){let r=new Set;t[zf]=r,Sa.set(e,r)}return t}function IB(e,t,r){return e[t]=r,r}function pc({database:e,table:t}){e||(e=VR),hs();let r=yB(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,xt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,xt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ii.get(o);if(!c){let u=new xR.default(o,!1);c=(0,Yf.open)(u),ii.set(o,c)}return c}async function Jm(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;ii.delete(n.path),n.status==="open"&&(await n.close(),await OB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[zf]}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=VR);let l=pc({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 Xi.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=yl(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)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new Xi.default(!1,!0),B=e+"/",x=Dl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB($f.INTERNAL_DBIS_NAME,A),x.tableId=S.get(ma),x.tableId||(x.tableId=1),S.putSync(ma,x.tableId+1),h.tableId=x.tableId,f=IB(d,e,Vf({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($f.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 Xi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ku.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ku.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=Zte(f,Q,Y):I&&Kf.signalSchemaChange(new Wf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of $R)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 Zte(e,t,r){try{let s=e.schemaVersion;await Kf.signalSchemaChange(new Wf.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)}),ku.workerData&&ku.workerData.restartNumber!==bB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Xte?await n:u>jte&&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 Kf.signalSchemaChange(new Wf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function ere({table:e,database:t}){let r=pc({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 fR(e){$R.push(e)}var xt,$f,Yf,Fe,Cr,pa,Xi,xR,Lr,OB,kR,NB,Kf,Wf,ku,Zr,bB,VR,zf,pr,xe,ma,$R,Qf,ii,Sa,Xte,jte,fe=Te(()=>{xt=D(X()),$f=D(ze()),Yf=require("lmdb"),Fe=require("path"),Cr=require("fs"),pa=D(ve());of();Xi=D(Ul()),xR=D(Pl()),Lr=D(b()),OB=D(require("fs-extra")),kR=require("../index"),NB=D(mr()),Kf=D(un()),Wf=D(ds()),ku=require("worker_threads"),Zr=D(F()),bB=D(Ze());ao();ka();VR="data",zf=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,kR._assignPackageExport)("databases",xe);(0,kR._assignPackageExport)("tables",pr);ma=Symbol.for("next-table-id"),$R=[],ii=new Map;a(zte,"getTables");a(hs,"getDatabases");a(Jte,"resetDatabases");a(xu,"readMetaDb");a(yB,"ensureDB");a(IB,"setTable");a(pc,"database");a(Jm,"dropDatabase");a(et,"table");Xte=1e3,jte=10;a(Zte,"runIndexing");a(ere,"dropTableMeta");a(fR,"onUpdatedTable")});var $=T((dEe,xB)=>{"use strict";var oi=require("path"),UB=require("fs-extra"),ur=F(),wB=require("fs-extra"),Jf=require("os"),tre=require("net"),rre=require("recursive-iterator"),We=b(),sre=Dg(),CB=require("papaparse"),Xf=require("moment"),{inspect:nre}=require("util"),LB=require("is-number"),_Ee=require("lodash"),ire=require("minimist"),ore=require("https"),are=require("http"),{hdb_errors:jf}=j(),cre=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,MB=require("util").promisify(setTimeout),ure=100,lre=5,_re="",dre=4,DB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};xB.exports={isEmpty:Dr,isEmptyOrZeroLength:Xs,arrayHasEmptyValues:hre,arrayHasEmptyOrZeroLengthValues:mre,buildFolderPath:pre,isBoolean:PB,errorizeMessage:fre,stripFileExtension:Tre,autoCast:Rre,autoCastJSON:vB,autoCastJSONDeep:KR,removeDir:gre,compareVersions:Are,isCompatibleDataVersion:Ore,escapeRawValue:Nre,unescapeValue:bre,stringifyProps:yre,timeoutPromise:wre,isClusterOperation:Lre,getClusterUser:Ure,checkGlobalSchemaTable:Dre,getHomeDir:HB,getPropsFilePath:Ire,promisifyPapaParse:Mre,removeBOM:FB,createEventPromise:Pre,checkProcessRunning:vre,checkSchemaTableExist:Bre,checkSchemaExists:qB,checkTableExists:GB,getStartOfTomorrowInSeconds:Hre,getLimitKey:Fre,isObject:Sre,isNotEmptyAndHasValue:Ere,autoCasterIsNumberCheck:BB,backtickASTSchemaItems:qre,isPortTaken:Cre,createForkArgs:Gre,autoCastBoolean:xre,async_set_timeout:MB,getTableHashAttribute:kre,doesSchemaExist:Vre,doesTableExist:$re,stringifyObj:Yre,ms_to_time:Kre,changeExtension:Wre,getEnvCliRootPath:WR,noBootFile:Qre,httpRequest:zre,transformReq:Jre,convertToMS:Xre,PACKAGE_ROOT:We.PACKAGE_ROOT};function fre(e){return e instanceof Error?e:new Error(e)}a(fre,"errorizeMessage");function Dr(e){return e==null}a(Dr,"isEmpty");function Ere(e){return!Dr(e)&&(e||e===0||e===""||PB(e))}a(Ere,"isNotEmptyAndHasValue");function Xs(e){return Dr(e)||e.length===0||e.size===0}a(Xs,"isEmptyOrZeroLength");function hre(e){if(Dr(e))return!0;for(let t=0;t<e.length;t++)if(Dr(e[t]))return!0;return!1}a(hre,"arrayHasEmptyValues");function mre(e){if(Xs(e))return!0;for(let t=0;t<e.length;t++)if(Xs(e[t]))return!0;return!1}a(mre,"arrayHasEmptyOrZeroLengthValues");function pre(...e){try{return e.join(oi.sep)}catch{console.error(e)}}a(pre,"buildFolderPath");function PB(e){return Dr(e)?!1:e===!0||e===!1}a(PB,"isBoolean");function Sre(e){return Dr(e)?!1:typeof e=="object"}a(Sre,"isObject");function Tre(e){return Xs(e)?_re:e.slice(0,-dre)}a(Tre,"stripFileExtension");function Rre(e){return Dr(e)||e===""||typeof e!="string"?e:DB[e]!==void 0?DB[e]:BB(e)===!0?Number(e):cre.test(e)?new Date(e):e}a(Rre,"autoCast");function vB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(vB,"autoCastJSON");function 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 vB(e)}a(KR,"autoCastJSONDeep");function BB(e){if(e.startsWith("0.")&&LB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&LB(e))}a(BB,"autoCasterIsNumberCheck");async function gre(e){if(Xs(e))throw new Error(`Directory path: ${e} does not exist`);try{await wB.emptyDir(e),await wB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(gre,"removeDir");function Are(e,t){if(Xs(e)){ur.info("Invalid current version sent as parameter.");return}if(Xs(t)){ur.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Are,"compareVersions");function Ore(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Ore,"isCompatibleDataVersion");function Nre(e){if(Dr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(Nre,"escapeRawValue");function bre(e){if(Dr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(bre,"unescapeValue");function yre(e,t){if(Dr(e))return ur.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Jf.EOL}!Xs(s)&&s[0]===";"?r+=" "+s+n+Jf.EOL:Xs(s)||(r+=s+"="+n+Jf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(yre,"stringifyProps");function HB(){let e;try{e=Jf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(HB,"getHomeDir");function Ire(){let e=oi.join(HB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return UB.existsSync(e)||(e=oi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Ire,"getPropsFilePath");function wre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(wre,"timeoutPromise");async function Cre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=tre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Cre,"isPortTaken");function Lre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Lre,"isClusterOperation");function Dre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return jf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return jf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Dre,"checkGlobalSchemaTable");function Ure(e,t){if(Dr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Dr(e)||Xs(e)){ur.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){ur.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){ur.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Ure,"getClusterUser");function Mre(){CB.parsePromise=function(e,t,r){return new Promise(function(s,n){CB.parse(e,{header:!0,transformHeader:FB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Mre,"promisifyPapaParse");function FB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FB,"removeBOM");function Pre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${nre(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(Pre,"createEventPromise");async function vre(e){let t=!0,r=0;do await MB(ure*r++),(await sre.findPs(e)).length>0&&(t=!1);while(t&&r<lre);if(t)throw new Error(`process ${e} was not started`)}a(vre,"checkProcessRunning");function Bre(e,t){let r=qB(e);if(r)return r;let s=GB(e,t);if(s)return s}a(Bre,"checkSchemaTableExist");function qB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return jf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qB,"checkSchemaExists");function GB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return jf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(GB,"checkTableExists");function Hre(){let e=Xf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Xf().utc().unix();return e-t}a(Hre,"getStartOfTomorrowInSeconds");function Fre(){return Xf().utc().format("DD-MM-YYYY")}a(Fre,"getLimitKey");function qre(e){try{let t=new rre(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){ur.error("Got an error back ticking items."),ur.error(t)}}a(qre,"backtickASTSchemaItems");function Gre(e){return[e]}a(Gre,"createForkArgs");function xre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(xre,"autoCastBoolean");function kre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(kre,"getTableHashAttribute");function Vre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Vre,"doesSchemaExist");function $re(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a($re,"doesTableExist");function Yre(e){try{return JSON.stringify(e)}catch{return e}}a(Yre,"stringifyObj");function Kre(e){let t=Xf.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(Kre,"ms_to_time");function Wre(e,t){let r=oi.basename(e,oi.extname(e));return oi.join(oi.dirname(e),r+t)}a(Wre,"changeExtension");function WR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=ire(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(WR,"getEnvCliRootPath");var YR;function Qre(){if(YR)return YR;let e=WR();WR()&&UB.pathExistsSync(oi.join(e,We.HDB_CONFIG_FILE))&&(YR=!0)}a(Qre,"noBootFile");function zre(e,t){let r;return e.protocol==="http:"?r=are:r=ore,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(zre,"httpRequest");function Jre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Jre,"transformReq");function Xre(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(Xre,"convertToMS")});var VB=T((hEe,kB)=>{"use strict";var QR=b(),jre=$(),Zre=Gs(),bs=F(),ese=nd(),tse=Fc(),EEe=BS(),rse=cn(),sse=kc(),nse=require("semver/functions/gte"),ise=3e4,ose=7;kB.exports=ase;async function ase(){try{bs.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await rse.setSchemaDataToGlobalAsync();let e=await Zre.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===QR.PRE_4_0_0_VERSION&&t.push(cse(n))}await Promise.allSettled(t),bs.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw bs.error(e),e}}a(ase,"updateAllNodes");async function cse(e){try{let{name:t,subscriptions:r}=e;bs.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<ose;){let i=[];if(await ese.buildNodeStatus(e,i),bs.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&nse(i[0].system_info.hdb_version,"4.0.0")){bs.notify("Received open status from node:",t,"calling add node");let o={operation:QR.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await tse(o,!0),bs.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),bs.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await jre.async_set_timeout(ise)}s||(bs.error("4.0.0 node update was unable to update connection to node:",t),bs.error("Removing following node record from hdb_nodes",e),await sse({operation:QR.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw bs.error(t),t}}a(cse,"updateNode")});var use=VB();(async()=>{try{await use()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
|