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 ZB=Object.getOwnPropertyDescriptor;var eH=Object.getOwnPropertyNames;var tH=Object.getPrototypeOf,rH=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})},rg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of eH(t))!rH.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=ZB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?jB(tH(e)):{},rg(t||!e||!e.__esModule?Ta(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>rg(Ta({},"__esModule",{value:!0}),e);var ig=T((lse,ng)=>{var sH=require("fast-glob"),{statSync:rE,existsSync:sE,readFileSync:nH,writeFileSync:iH}=require("fs"),{spawnSync:oH,spawn:aH,execFileSync:use}=require("child_process"),{isMainThread:cH}=require("worker_threads"),{join:Cn,relative:sg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:uH,platform:lH}=require("os");require("source-map-support").install();var _H=["resources","server","dataLayer","components"],Ra="ts-build",nE,dH=__filename.endsWith("tsBuild.js");if(dH){if(cH){let r;try{rE(Cn(ts,Ra)),r=!0}catch{}if(r)for(let s of sH.sync(_H.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=rE(Cn(ts,s)).mtimeMs-5e3,i=rE(Cn(ts,Ra,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),nE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),nE=!0;if(nE){let s=Cn(ts,"node_modules/.bin/tsc");lH()==="win32"&&(s+=".cmd");let n=oH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Cn(uH(),"harperdb-tsc.pid"),o;if(sE(i))try{process.kill(+nH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=aH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});iH(i,c.pid.toString()),c.unref()}}}}let e=ng.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=sg(ts,s[0]),o;i.startsWith(Ra)?o=Cn(ts,sg(Ra,i)):o=Cn(ts,Ra,i);let c=Cn(o,r),u=c+".js";if(sE(u))return u;if(c.includes(".")&&sE(c))return c}return t(r,s,n)}}});var b=T((fse,Tg)=>{"use strict";var Mr=require("path"),fH=require("fs"),{relative:_se,join:dse}=Mr,{existsSync:EH}=fH;function hH(){let e=__dirname;for(;!EH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(hH,"getHDBPackageRoot");var Ln=hH(),og="js",Yu=og,mH="harperdb-config.yaml",pH="defaultConfig.yaml",SH="hdb",ag=`harperdb.${Yu}`,cg=`customFunctionsServer.${Yu}`,TH=`restartHdb.${Yu}`,oE="HarperDB",$u="Custom Functions",Ku="Clustering Hub",Wu="Clustering Leaf",RH="Clustering Ingest Service",gH="Clustering Reply Service",AH="foreground.pid",OH="hdb.pid",NH="data",bH={HDB:oE,CLUSTERING_HUB:Ku,CLUSTERING_LEAF:Wu,CLUSTERING_INGEST_SERVICE:RH,CLUSTERING_REPLY_SERVICE:gH,CUSTOM_FUNCTIONS:$u,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"},yH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},IH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},wH={harperdb:oE,"clustering hub":Ku,"clustering leaf":Wu,"custom functions":$u,custom_functions:$u,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},CH={CLUSTERING_HUB_PROC_DESCRIPTOR:Ku,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wu},iE={HDB:Mr.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Ln,"server/nats"),CLUSTERING_LEAF:Mr.join(Ln,"server/nats")},LH={HDB:Mr.join(iE.HDB,ag),CUSTOM_FUNCTIONS:Mr.join(iE.CUSTOM_FUNCTIONS,cg)},DH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},UH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ug="support@harperdb.io",MH="customer-success@harperdb.io",lg=1,PH=4141,_g="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",vH="https://www.harperdb.io/product",BH=`For support, please submit a request at ${_g} or contact ${ug}`,dg=`For license support, please contact ${MH}`,HH="None of the specified records were found.",qH="hash attribute not found",FH=`Your current license only supports ${lg} role. ${dg}`,GH="Your current license only supports 3 connections to a node.",xH="127.0.0.1",kH=1,VH=/^\.$/,$H=/^\.\.$/,YH="U+002E",KH=/\//g,WH="U+002F",QH=/U\+002F/g,zH=/^U\+002E$/,JH=/^U\+002EU\+002E$/,XH="d",jH=999999,ZH="*",eq="--max-old-space-size=",tq="system",rq="__hdb_hash",sq=".harperdb",nq=".hdb",iq="keys",oq="hdb_boot_properties.file",aq=".updateConfig.json",cq="SIGTSTP",uq=24,lq=6e4,_q=448,dq="blob",fq="trash",Eq="database",hq="schema",mq="transactions",pq=".count",Sq="id",Tq="PROCESS_NAME",fg={SETTINGS_PATH_KEY:"settings_path"},Eg=require("lodash"),Rq={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"},gq={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},Aq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Oq={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"},Nq={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:",bq={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"},yq={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"},Iq="060493.ks",wq=".license",Cq={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"},Lq={CSV:".csv",JSON:".json"},Dq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Uq={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 Mq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Pq={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},hg={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"},vq=Eg.invert(hg),Bq={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"},mg={settings_path:fg.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];mg[t.toLowerCase()]=t}var Hq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},qq={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"},Fq={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"},Gq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},xq={VERSION_DEFAULT:"2.2.0"},kq={DEVELOPMENT:8192,DEFAULT:512},Vq={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"},$q={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"},Yq={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},pg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Kq=Symbol("metadata"),Wq="__clustering__",Qq=Object.values(pg),zq=15984864e5,Sg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Jq=Eg.invert(Sg),Xq={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,Zq=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(js,"createLogRecord");function
|
|
4
|
-
`).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:UF.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(BF,"findPs")});var ze=T((gse,Bg)=>{"use strict";var HF="__dbis__",qF="__txns__",FF="__environment_name__",GF="__dbi_defintion__",xF={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"},kF=["__createdtime__","__updatedtime__"],VF="\uFFFF",vg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},$F=Object.values(vg);Bg.exports={AUDIT_STORE_NAME:qF,INTERNAL_DBIS_NAME:HF,DBI_DEFINITION_NAME:GF,SEARCH_TYPES:xF,TIMESTAMP_NAMES:kF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:FF,TRANSACTIONS_DBI_NAMES_ENUM:vg,TRANSACTIONS_DBIS:$F,OVERFLOW_MARKER:VF}});var dr=T((Ase,Yg)=>{"use strict";var Hg=b(),qg=ze(),Fg={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},Gg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),xg={500:Gg("There was an error processing your request."),400:"Invalid request"},YF=xg[Fg.INTERNAL_SERVER_ERROR],KF={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.`},WF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},QF={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"},zF={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 ${qg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${qg.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"},JF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Hg.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 ${Hg.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"},kg={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"},XF={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`},ZF={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"},eG={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},tG={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`},Vg={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.`},$g={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}`},rG={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."},sG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},nG={...kg,...QF,...KF,...XF,...jF,...ZF,...eG,...tG,...JF,...Vg,...$g,...rG,...sG,...WF};Yg.exports={CHECK_LOGS_WRAPPER:Gg,HDB_ERROR_MSGS:nG,DEFAULT_ERROR_MSGS:xg,DEFAULT_ERROR_RESP:YF,HTTP_STATUS_CODES:Fg,LMDB_ERRORS_ENUM:zF,AUTHENTICATION_ERROR_MSGS:kg,VALIDATION_ERROR_MSGS:Vg,ITC_ERRORS:$g}});var j=T((Nse,Qg)=>{"use strict";var Zi=dr(),iG=G(),oG=b(),ju=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Kg),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&iG[n](i)}},hE=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}},mE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Kg(e,t,r,s=oG.LOG_LEVELS.ERROR,n=null,i=!1){if(Wg(e))return e;let o=new ju(e,t,r,s,n);return i&&delete o.stack,o}a(Kg,"handleHDBError");function Wg(e){return e.__proto__.constructor.name===ju.name}a(Wg,"isHDBError");Qg.exports={isHDBError:Wg,handleHDBError:Kg,ClientError:hE,ServerError:mE,hdb_errors:Zi}});var Jg=T((yse,zg)=>{"use strict";var aG={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 XB=Object.create;var Ra=Object.defineProperty;var jB=Object.getOwnPropertyDescriptor;var ZB=Object.getOwnPropertyNames;var eH=Object.getPrototypeOf,tH=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})},tg=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ZB(t))!tH.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?XB(eH(e)):{},tg(t||!e||!e.__esModule?Ra(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>tg(Ra({},"__esModule",{value:!0}),e);var ng=T((use,sg)=>{var rH=require("fast-glob"),{statSync:sE,existsSync:nE,readFileSync:sH,writeFileSync:nH}=require("fs"),{spawnSync:iH,spawn:oH,execFileSync:cse}=require("child_process"),{isMainThread:aH}=require("worker_threads"),{join:Ln,relative:rg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:cH,platform:uH}=require("os");require("source-map-support").install();var lH=["resources","server","dataLayer","components"],ga="ts-build",iE,_H=__filename.endsWith("tsBuild.js");if(_H){if(aH){let r;try{sE(Ln(ts,ga)),r=!0}catch{}if(r)for(let s of rH.sync(lH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=sE(Ln(ts,s)).mtimeMs-5e3,i=sE(Ln(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."),iE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),iE=!0;if(iE){let s=Ln(ts,"node_modules/.bin/tsc");uH()==="win32"&&(s+=".cmd");let n=iH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Ln(cH(),"harperdb-tsc.pid"),o;if(nE(i))try{process.kill(+sH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=oH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});nH(i,c.pid.toString()),c.unref()}}}}let e=sg.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=rg(ts,s[0]),o;i.startsWith(ga)?o=Ln(ts,rg(ga,i)):o=Ln(ts,ga,i);let c=Ln(o,r),u=c+".js";if(nE(u))return u;if(c.includes(".")&&nE(c))return c}return t(r,s,n)}}});var b=T((dse,Sg)=>{"use strict";var Mr=require("path"),dH=require("fs"),{relative:lse,join:_se}=Mr,{existsSync:fH}=dH;function EH(){let e=__dirname;for(;!fH(Mr.join(e,"package.json"));){let t=Mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(EH,"getHDBPackageRoot");var Dn=EH(),ig="js",Ku=ig,hH="harperdb-config.yaml",mH="defaultConfig.yaml",pH="hdb",og=`harperdb.${Ku}`,ag=`customFunctionsServer.${Ku}`,SH=`restartHdb.${Ku}`,aE="HarperDB",Yu="Custom Functions",Wu="Clustering Hub",Qu="Clustering Leaf",TH="Clustering Ingest Service",RH="Clustering Reply Service",gH="foreground.pid",AH="hdb.pid",OH="data",NH={HDB:aE,CLUSTERING_HUB:Wu,CLUSTERING_LEAF:Qu,CLUSTERING_INGEST_SERVICE:TH,CLUSTERING_REPLY_SERVICE:RH,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"},bH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},yH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},IH={harperdb:aE,"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"},wH={CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu},oE={HDB:Mr.join(Dn,"server/harperdb"),CUSTOM_FUNCTIONS:Mr.join(Dn,"server/customFunctions"),CLUSTERING_HUB:Mr.join(Dn,"server/nats"),CLUSTERING_LEAF:Mr.join(Dn,"server/nats")},CH={HDB:Mr.join(oE.HDB,og),CUSTOM_FUNCTIONS:Mr.join(oE.CUSTOM_FUNCTIONS,ag)},LH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Mr.join(Dn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Mr.join(Dn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Mr.join(Dn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},DH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},cg="support@harperdb.io",UH="customer-success@harperdb.io",ug=1,MH=4141,lg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",PH="https://www.harperdb.io/product",vH=`For support, please submit a request at ${lg} or contact ${cg}`,_g=`For license support, please contact ${UH}`,BH="None of the specified records were found.",HH="hash attribute not found",FH=`Your current license only supports ${ug} role. ${_g}`,qH="Your current license only supports 3 connections to a node.",GH="127.0.0.1",xH=1,kH=/^\.$/,VH=/^\.\.$/,$H="U+002E",YH=/\//g,KH="U+002F",WH=/U\+002F/g,QH=/^U\+002E$/,zH=/^U\+002EU\+002E$/,JH="d",XH=999999,jH="*",ZH="--max-old-space-size=",eF="system",tF="__hdb_hash",rF=".harperdb",sF=".hdb",nF="keys",iF="hdb_boot_properties.file",oF=".updateConfig.json",aF="SIGTSTP",cF=24,uF=6e4,lF=448,_F="blob",dF="trash",fF="database",EF="schema",hF="transactions",mF=".count",pF="id",SF="PROCESS_NAME",dg={SETTINGS_PATH_KEY:"settings_path"},fg=require("lodash"),TF={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"},RF={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},gF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},AF={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"},OF={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:",NF={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"},bF={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"},yF="060493.ks",IF=".license",wF={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"},CF={CSV:".csv",JSON:".json"},LF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},DF={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 UF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},MF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},Eg={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"},PF=fg.invert(Eg),vF={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"},hg={settings_path:dg.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];hg[t.toLowerCase()]=t}var BF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},HF={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"},FF={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"},qF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},GF={VERSION_DEFAULT:"2.2.0"},xF={DEVELOPMENT:8192,DEFAULT:512},kF={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"},VF={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"},$F={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},mg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},YF=Symbol("metadata"),KF="__clustering__",WF=Object.values(mg),QF=15984864e5,pg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},zF=fg.invert(pg),JF={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"},XF=111,jF=`\r
|
|
2
|
+
`,ZF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},eq=["*","%"],tq="unauthorized_access",rq="func_val",sq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},nq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},iq={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"},oq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},aq={HTTP:"http"},cq={STOPPED:"stopped",ONLINE:"online"},uq="3.x.x",lq={SUCCESS:"success",FAILURE:"failure"},_q={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Sg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:cg,HDB_SUPPORT_URL:lg,HDB_PRICING_URL:PH,SUPPORT_HELP_MSG:vH,LICENSE_HELP_MSG:_g,HDB_PROC_NAME:og,HDB_PROC_DESCRIPTOR:aE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Qu,CLUSTERING_HUB_PROC_DESCRIPTOR:Wu,SYSTEM_SCHEMA_NAME:eF,HASH_FOLDER_NAME:tF,HDB_HOME_DIR_NAME:rF,UPDATE_FILE_NAME:oF,LICENSE_KEY_DIR_NAME:nF,BOOT_PROPS_FILE_NAME:iF,JOB_TYPE_ENUM:HF,JOB_STATUS_ENUM:wF,SYSTEM_TABLE_NAMES:AF,SYSTEM_TABLE_HASH_ATTRIBUTES:OF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:CF,S3_BUCKET_AUTH_KEYS:LF,VALID_SQL_OPS_ENUM:DF,GEO_CONVERSION_ENUM:MF,HDB_SETTINGS_NAMES:Eg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:PF,SERVICE_ACTIONS_ENUM:UF,CLUSTER_MESSAGE_TYPE_ENUM:FF,CLUSTER_CONNECTION_DIRECTION_ENUM:qF,CLUSTER_EVENTS_DEFS_ENUM:kF,PERIOD_REGEX:kH,DOUBLE_PERIOD_REGEX:VH,UNICODE_PERIOD:$H,FORWARD_SLASH_REGEX:YH,UNICODE_FORWARD_SLASH:KH,ESCAPED_FORWARD_SLASH_REGEX:WH,ESCAPED_PERIOD_REGEX:QH,ESCAPED_DOUBLE_PERIOD_REGEX:zH,REG_KEY_FILE_NAME:yF,RESTART_TIMEOUT_MS:uF,HDB_FILE_PERMISSIONS:lF,DATABASES_DIR_NAME:fF,LEGACY_DATABASES_DIR_NAME:EF,TRANSACTIONS_DIR_NAME:hF,LIMIT_COUNT_NAME:mF,ID_ATTRIBUTE_STRING:pF,INSERT_MODULE_ENUM:RF,UPGRADE_JSON_FIELD_NAMES_ENUM:gF,RESTART_CODE:aF,RESTART_CODE_NUM:cF,CLUSTER_OPERATIONS:Aa,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:bF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:NF,CLUSTERING_MESSAGE_TYPES:JF,HDB_FILE_SUFFIX:sF,BLOB_FOLDER_NAME:_F,HDB_TRASH_DIR:dF,ORIGINATOR_SET_VALUE:XF,LICENSE_VALUES:GF,RAM_ALLOCATION_ENUM:xF,TIME_STAMP_NAMES_ENUM:mg,TIME_STAMP_NAMES:WF,PERMS_UPDATE_RELEASE_TIMESTAMP:QF,SEARCH_NOT_FOUND_MESSAGE:BH,SEARCH_ATTRIBUTE_NOT_FOUND:HH,LICENSE_ROLE_DENIED_RESPONSE:FH,LICENSE_MAX_CONNS_REACHED:qH,BASIC_LICENSE_MAX_NON_CU_ROLES:ug,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:MH,VALUE_SEARCH_COMPARATORS:pg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:zF,LICENSE_FILE_NAME:IF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:VF,NEW_LINE:jF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:xH,MOMENT_DAYS_TAG:JH,API_TURNOVER_SEC:XH,LOOPBACK:GH,CODE_EXTENSION:Ku,WILDCARD_SEARCH_VALUE:jH,NODE_ERROR_CODES:$F,JAVASCRIPT_EXTENSION:ig,PERMS_CRUD_ENUM:ZF,UNAUTHORIZED_PERMISSION_NAME:tq,SEARCH_WILDCARDS:eq,FUNC_VAL:rq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:sq,JWT_ENUM:nq,CLUSTERING_FLAG:KF,ITC_EVENT_TYPES:iq,CUSTOM_FUNCTION_PROC_NAME:ag,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Yu,SERVICES:oq,THREAD_TYPES:aq,MEM_SETTING_KEY:ZH,HDB_RESTART_SCRIPT:SH,PROCESS_DESCRIPTORS:NH,SERVICE_SERVERS:CH,SERVICE_SERVERS_CWD:oE,PROCESS_DESCRIPTORS_VALIDATE:IH,LAUNCH_SERVICE_SCRIPTS:LH,LOG_LEVELS:yH,PROCESS_NAME_ENV_PROP:SF,LOG_NAMES:bH,PM2_PROCESS_STATUSES:cq,CONFIG_PARAM_MAP:hg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:hH,HDB_DEFAULT_CONFIG_FILE:mH,ROLE_TYPES_ENUM:DH,BOOT_PROP_PARAMS:dg,INSTALL_PROMPTS:TF,HDB_ROOT_DIR_NAME:pH,CLUSTERING_PROCESSES:wH,FOREGROUND_PID_FILE:gH,PACKAGE_ROOT:Dn,PRE_4_0_0_VERSION:uq,DATABASES_PARAM_CONFIG:BF,METADATA_PROPERTY:YF,AUTH_AUDIT_STATUS:lq,AUTH_AUDIT_TYPES:_q,HDB_PID_FILE:AH,DEFAULT_DATABASE_NAME:OH,LEGACY_CONFIG_PARAMS:vF};ng()});var cE=T((Ese,gg)=>{"use strict";var Tg=require("minimist");gg.exports=dq;function dq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Rg(process.env),s=Rg(Tg(process.argv))):(r=process.env,s=Tg(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(dq,"assignCMDENVVariables");function Rg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Rg,"objKeysToLowerCase")});var F=T((mse,hE)=>{"use strict";var ai=require("fs-extra"),{workerData:fq,threadId:Eq}=require("worker_threads"),Xs=require("path"),Ng=require("yaml"),bg=require("properties-reader"),ut=b(),Ag=cE(),hq=require("os"),{PACKAGE_ROOT:lE}=b(),{_assignPackageExport:mq}=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},yg={STDOUT:"stdOut",STDERR:"stdErr"},pq=Xs.join(lE,"logs"),Sq=Xs.join(lE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),Tq=1e4,Js,ys,Vt,zu,Ju,ba,Zi,Oa;Oa===void 0&&Ig();hE.exports={notify:Lg,fatal:Dg,error:ya,warn:EE,info:Xu,debug:fE,trace:dE,setLogLevel:yq,log_level:Vt,loggerWithTag:Rq,suppressLogging:gq,initLogSettings:Ig,setupConsoleLogging:wg,logCustomLevel:Nq,closeLogFile:_E,getLogFilePath:()=>ba,OUTPUTS:yg,AuthAuditLog:Cq};mq("logger",hE.exports);function Ig(e=!1){try{if(Oa===void 0||e){_E();let t=bq(),r=Ag(["ROOTPATH"]);try{Oa=bg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ai.pathExistsSync(Xs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:Vt,config_log_path:Ju,to_file:Js,to_stream:ys}=Iq(r.ROOTPATH?Xs.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Oa.get("settings_path"))),zu=ut.LOG_NAMES.HDB,ba=Xs.join(Ju,zu)}}catch(t){if(Oa=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=Ag(Object.keys(ut.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ut.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ut.CONFIG_PARAMS.LOGGING_LEVEL){Vt=u;continue}if(c===ut.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ut.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=wq();Js=Js===void 0?n:Js,Js=Og(Js),ys=ys===void 0?i:ys,ys=Og(ys),Vt=Vt===void 0?s:Vt,Ju=pq,zu=ut.LOG_NAMES.INSTALL,ba=Xs.join(Ju,zu);return}throw ya("Error initializing log settings"),ya(t),t}process.env.DEV_MODE&&(ys=!0),wg()}a(Ig,"initLogSettings");var uE=!0;function wg(){ji("error",ya),ji("warn",EE),ji("log",Xu),ji("info",Xu),ji("debug",fE),ji("trace",dE)}a(wg,"setupConsoleLogging");function ji(e,t){console[e]=function(...r){if(uE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Na[e](...r)}}a(ji,"logConsole");function Rq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Lg),fatal:r(Dg),error:r(ya),warn:r(EE),info:r(Xu),debug:r(fE),trace:r(dE)};function r(s){return function(...n){return s(t,...n)}}}a(Rq,"loggerWithTag");function gq(e){try{uE=!1,e()}finally{uE=!0}}a(gq,"suppressLogging");var Aq=fq?.name?.replace(/ /g,"-")||"main";function js(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Aq+"/"+Eq);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(js,"createLogRecord");function Ia(e){Js&&Cg(e),ys&&process.stdout.write(e)}a(Ia,"logStdOut");function ju(e){Js&&Cg(e),ys&&process.stderr.write(e)}a(ju,"logStdErr");function Cg(e){Oq(),Zi?ai.appendFileSync(Zi,e):Na.log(e)}a(Cg,"logToFile");function _E(){try{ai.closeSync(Zi)}catch{}Zi=null}a(_E,"closeLogFile");function Oq(){if(!Zi){try{if(!ba)debugger;Zi=ai.openSync(ba,"a")}catch(e){Na.error(e)}setTimeout(()=>{_E()},Tq).unref()}}a(Oq,"openLogFile");function Xu(...e){$t[Vt]<=$t.info&&Ia(js("info",e))}a(Xu,"info");function dE(...e){$t[Vt]<=$t.trace&&Ia(js("trace",e))}a(dE,"trace");function ya(...e){$t[Vt]<=$t.error&&ju(js("error",e))}a(ya,"error");function fE(...e){$t[Vt]<=$t.debug&&Ia(js("debug",e))}a(fE,"debug");function Lg(...e){$t[Vt]<=$t.notify&&Ia(js("notify",e))}a(Lg,"notify");function Dg(...e){$t[Vt]<=$t.fatal&&ju(js("fatal",e))}a(Dg,"fatal");function EE(...e){$t[Vt]<=$t.warn&&ju(js("warn",e))}a(EE,"warn");function Nq(e,t,...r){t===yg.STDERR?ju(js(e,r)):Ia(js(e,r))}a(Nq,"logCustomLevel");function bq(){let e;try{e=hq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return ai.existsSync(t)||(t=Xs.join(lE,"utility/hdb_boot_properties.file")),t}a(bq,"getPropsFilePath");function yq(e){Vt=e}a(yq,"setLogLevel");function Og(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Og,"autoCastBoolean");function Iq(e){try{if(e.includes("config/settings.js")){let o=bg(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(ut.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ut.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Ng.parseDocument(ai.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===ut.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Iq,"getLogConfig");function wq(){try{let e=Ng.parseDocument(ai.readFileSync(Sq,"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(wq,"getDefaultConfig");function Cq(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(Cq,"AuthAuditLog")});var Mg=T((Sse,Ug)=>{"use strict";var Lq=require("util"),Dq=require("path"),Uq=require("child_process"),Mq=Lq.promisify(Uq.execFile),Pq=1e3*1e3*10;Ug.exports={findPs:vq};async function vq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Mq("ps",["wwxo",`pid,${r}`],{maxBuffer:Pq});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:Dq.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(vq,"findPs")});var ze=T((Rse,vg)=>{"use strict";var Bq="__dbis__",Hq="__txns__",Fq="__environment_name__",qq="__dbi_defintion__",Gq={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"},xq=["__createdtime__","__updatedtime__"],kq="\uFFFF",Pg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Vq=Object.values(Pg);vg.exports={AUDIT_STORE_NAME:Hq,INTERNAL_DBIS_NAME:Bq,DBI_DEFINITION_NAME:qq,SEARCH_TYPES:Gq,TIMESTAMP_NAMES:xq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Fq,TRANSACTIONS_DBI_NAMES_ENUM:Pg,TRANSACTIONS_DBIS:Vq,OVERFLOW_MARKER:kq}});var dr=T((gse,$g)=>{"use strict";var Bg=b(),Hg=ze(),Fg={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"),Gg={500:qg("There was an error processing your request."),400:"Invalid request"},$q=Gg[Fg.INTERNAL_SERVER_ERROR],Yq={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.`},Kq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Wq={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"},Qq={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 ${Hg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${Hg.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"},zq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Bg.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 ${Bg.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"},xg={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"},Jq={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."},Xq={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"},Zq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},eG={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`},kg={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.`},Vg={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}`},tG={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."},rG={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},sG={...xg,...Wq,...Yq,...Jq,...Xq,...jq,...Zq,...eG,...zq,...kg,...Vg,...tG,...rG,...Kq};$g.exports={CHECK_LOGS_WRAPPER:qg,HDB_ERROR_MSGS:sG,DEFAULT_ERROR_MSGS:Gg,DEFAULT_ERROR_RESP:$q,HTTP_STATUS_CODES:Fg,LMDB_ERRORS_ENUM:Qq,AUTHENTICATION_ERROR_MSGS:xg,VALIDATION_ERROR_MSGS:kg,ITC_ERRORS:Vg}});var j=T((Ose,Wg)=>{"use strict";var eo=dr(),nG=F(),iG=b(),Zu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Yg),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&&nG[n](i)}},mE=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}},pE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Yg(e,t,r,s=iG.LOG_LEVELS.ERROR,n=null,i=!1){if(Kg(e))return e;let o=new Zu(e,t,r,s,n);return i&&delete o.stack,o}a(Yg,"handleHDBError");function Kg(e){return e.__proto__.constructor.name===Zu.name}a(Kg,"isHDBError");Wg.exports={isHDBError:Kg,handleHDBError:Yg,ClientError:mE,ServerError:pE,hdb_errors:eo}});var zg=T((bse,Qg)=>{"use strict";var oG={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
|
-
`)},cG="certificate.pem",uG="privateKey.pem",lG="ca.pem";zg.exports={CERTIFICATE_VALUES:aG,CERTIFICATE_PEM_NAME:cG,PRIVATEKEY_PEM_NAME:uG,CA_PEM_NAME:lG}});var Fe=T((Ise,Xg)=>{"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};Xg.exports={validateObject:_G,validateObjectAsync:dG,validateBySchema:fG};function _G(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(_G,"validateObject");async function dG(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(dG,"validateObjectAsync");function fG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(fG,"validateBySchema")});var SE=T((Lse,rA)=>{"use strict";var tA=require("fs-extra"),ce=require("joi"),EG=require("os"),{boolean:Ie,string:Is,number:Ot,array:pE}=ce.types(),{totalmem:jg}=require("os"),eo=require("path"),hG=G(),el=$(),Cse=Jg(),Zg=b(),mG=Fe(),eA="log",pG="components",SG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",TG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",RG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",gG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",AG="rootPath config parameter is undefined",OG="clustering.enabled config parameter is undefined",ai=Ot.min(0).required(),tl=pE.items({host:Is.required(),port:ai}).empty(null),Zs;rA.exports={configValidator:NG,routesValidator:LG,route_constraints:tl};function NG(e){if(Zs=e.rootPath,el.isEmpty(Zs))throw AG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(CG),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zu),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(Zu),c=ce.custom(yG).empty(null).default(Zu),u=e.clustering?.enabled;if(el.isEmpty(u))throw OG;let _;return u===!0?_=ce.object({enabled:t,hubServer:ce.object({cluster:ce.object({name:ce.required().empty(null),network:ce.object({port:ai,routes:tl}).required()}).required(),leafNodes:ce.object({network:ce.object({port:ai}).required()}).required(),network:ce.object({port:ai}).required()}).required(),leafServer:ce.object({network:ce.object({port:ai,routes:tl}).required(),streams:ce.object({maxAge:Ot.min(120).allow(null).optional(),maxBytes:Ot.min(1).allow(null).optional(),maxMsgs:Ot.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ce.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Is.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ce.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Is.custom(wG).optional().empty(null),maxSize:Is.custom(IG).optional().empty(null),path:Is.optional().empty(null).default(Zu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ce.object({network:ce.object({cors:Ie.optional(),corsAccessList:pE.optional(),headersTimeout:Ot.min(1).optional(),keepAliveTimeout:Ot.min(1).optional(),port:Ot.optional().empty(null),securePort:Ot.optional().empty(null),timeout:Ot.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:pE.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(NG,"configValidator");function bG(e){return tA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(bG,"doesPathExist");function yG(e,t){ce.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=bG(e);if(r)return t.message(r)}a(yG,"validatePath");function IG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(SG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(RG):e}a(IG,"validateRotationMaxSize");function wG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(TG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(gG):e}a(wG,"validateRotationInterval");function CG(e,t){let r=t.state.path.join("."),s=EG.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),hG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(CG,"setDefaultThreads");function Zu(e,t){if(!el.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(el.isEmpty(Zs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(Zs,pG);case"logging.root":return eo.join(Zs,eA);case"clustering.leafServer.streams.path":return eo.join(Zs,"clustering","leaf");case"storage.path":let s=eo.join(Zs,Zg.LEGACY_DATABASES_DIR_NAME);return tA.existsSync(s)?s:eo.join(Zs,Zg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(Zs,eA);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Zu,"setDefaultRoot");function LG(e){let t=ce.object({routes:tl});return mG.validateBySchema({routes:e},t)}a(LG,"routesValidator")});var to={};Qe(to,{server:()=>lt});var sA,lt,Pr=Te(()=>{sA=require("../../index"),lt={};(0,sA._assignPackageExport)("server",lt)});var hr=T((Mse,dA)=>{"use strict";var Er=b(),mt=$(),_t=G(),{configValidator:DG,routesValidator:nA}=SE(),Kt=require("fs-extra"),UG=require("yaml"),rs=require("path"),MG=require("is-number"),oA=require("properties-reader"),PG=require("lodash"),{handleHDBError:vG}=j(),{HTTP_STATUS_CODES:BG,HDB_ERROR_MSGS:rl}=dr(),Use=require("minimist"),{server:HG}=(Pr(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,qG="Unable to get config value because config is uninitialized",FG="Config successfully initialized",GG="Error backing up config file",xG="Empty parameter sent to getConfigValue",aA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),kG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",iA={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"},sl,dt,nl;dA.exports={createConfigFile:VG,getDefaultConfig:$G,getConfigValue:uA,initConfig:RE,flattenConfig:ro,updateConfigValue:lA,updateConfigObject:KG,getConfiguration:zG,setConfiguration:JG,readConfigFile:AE,getClusteringRoutes:XG,initOldConfig:_A,getConfigFromFile:jG,getConfigFilePath:ci,addConfig:ZG,deleteConfigFromFile:ex,getConfigObj:tx};function VG(e){let t=Dn(aA);sl=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("_"),_=TE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){_t.error(l)}}}r&&cA(t,r),gE(t);let s=t.toJSON();dt=ro(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Kt.createFileSync(i),Kt.writeFileSync(i,String(t)),_t.trace(`Config file written to ${i}`)}a(VG,"createConfigFile");function cA(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){_t.error("Error parsing schemas CLI/env config arguments",s)}}a(cA,"setSchemasConfig");function $G(e){if(sl===void 0){let r=Dn(aA);sl=ro(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return sl[t.toLowerCase()]}a($G,"getDefaultConfig");function uA(e){if(e==null){_t.error(xG);return}if(dt===void 0){_t.trace(qG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return dt[t.toLowerCase()]}a(uA,"getConfigValue");function ci(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):oA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function RE(e=!1){if(dt===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 _t.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{_A(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Dn(r)}catch(i){if(i.code===Er.NODE_ERROR_CODES.ENOENT){_t.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 _t.error(i),new Error(`Error reading HarperDB config file at ${r}`)}YG(s,r),gE(s);let n=s.toJSON();if(HG.config=n,dt=ro(n),dt.logging_rotation_rotate)for(let i in iA)dt[i]&&_t.error(`Config ${iA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_t.trace(FG)}}a(RE,"initConfig");function YG(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&&(_t.trace("Updating config file with missing config params"),Kt.writeFileSync(t,String(e)))}a(YG,"checkForUpdatedConfig");function gE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=DG(t);if(r.error)throw rl.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(gE,"validateConfig");function KG(e,t){dt===void 0&&(dt={});let r=ss[e.toLowerCase()];if(r===void 0){_t.trace(`Unable to update config object because config param '${e}' does not exist`);return}dt[r.toLowerCase()]=t}a(KG,"updateConfigObject");function lA(e,t,r=void 0,s=!1,n=!1,i=!1){dt===void 0&&RE();let o=uA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Dn(c),_;if(r===void 0&&e.toLowerCase()===fr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=TE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===fr.HTTP_SECUREPORT&&r[f]===dt[fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===dt[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=TE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){_t.error(A)}}}_&&cA(u,_),gE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&WG(c,l),Kt.writeFileSync(d,String(u)),n&&(dt=ro(u.toJSON())),_t.trace(`Config parameter: ${e} updated with value: ${t}`)}a(lA,"updateConfigValue");function WG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Kt.copySync(e,r),_t.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_t.error(GG),_t.error(r)}}a(WG,"backupConfigFile");var QG=["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)),nl=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])&&!QG.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 TE(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(MG(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(TE,"castConfigValue");function zG(){let e=mt.getPropsFilePath(),t=ci(e);return Dn(t).toJSON()}a(zG,"getConfiguration");async function JG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return lA(void 0,void 0,n,!0),kG}catch(i){throw typeof i=="string"||i instanceof String?vG(i,i,BG.BAD_REQUEST,void 0,void 0,!0):i}}a(JG,"setConfiguration");function AE(){let e=mt.getPropsFilePath();try{Kt.accessSync(e,Kt.constants.F_OK|Kt.constants.R_OK)}catch(s){if(!mt.noBootFile())throw _t.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ci(e);return Dn(t).toJSON()}a(AE,"readConfigFile");function Dn(e){return UG.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Dn,"parseYamlDoc");function XG(){let e=AE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=nA(t);if(r)throw rl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=nA(s);if(n)throw rl.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 rl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(XG,"getClusteringRoutes");function _A(e){let t=oA(e);dt={};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?dt[n]=rs.dirname(s):dt[n]=s}return dt}a(_A,"initOldConfig");function jG(e){let t=AE();return PG.get(t,e.replaceAll("_","."))}a(jG,"getConfigFromFile");async function ZG(e,t){let r=Dn(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(ci(),String(r))}a(ZG,"addConfig");function ex(e){let t=ci(mt.getPropsFilePath()),r=Dn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Kt.writeFileSync(n,String(r))}a(ex,"deleteConfigFromFile");function tx(){return nl||(RE(),nl)}a(tx,"getConfigObj")});var X=T((vse,hA)=>{"use strict";var OE=require("fs-extra"),ns=require("path"),fA=require("os"),rx=require("properties-reader"),wa=G(),ui=$(),ee=b(),il=hr(),sx="Error initializing environment manager",ol="BOOT_PROPS_FILE_PATH",EA=!1,nx={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},en={};hA.exports={BOOT_PROPS_FILE_PATH:ol,getHdbBasePath:ix,setHdbBasePath:ox,get:ax,initSync:ux,setProperty:he,initTestEnvironment:lx};function ix(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ix,"getHdbBasePath");function ox(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ox,"setHdbBasePath");function ax(e){let t=il.getConfigValue(e);return t===void 0?en[e]:t}a(ax,"get");function he(e,t){nx[e]&&(en[e]=t),il.updateConfigObject(e,t)}a(he,"setProperty");function cx(){let e;try{e=ui.getPropsFilePath(),OE.accessSync(e,OE.constants.F_OK|OE.constants.R_OK),EA=!0;let t=rx(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[ol]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(cx,"doesPropFileExist");function ux(e=!1){try{(EA||cx()||ui.noBootFile())&&(il.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=il.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){wa.error(sx),wa.error(t),console.error(t),process.exit(1)}}a(ux,"initSync");function lx(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ns.join(__dirname,"../../","unitTests");en[ol]=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,fA.userInfo()?fA.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ui.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ui.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ui.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ui.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ui.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${ol}. Please check your boot props and settings files`;wa.fatal(r),wa.error(t)}}a(lx,"initTestEnvironment")});var ve=T((Hse,AA)=>{"use strict";var Ma=b(),_x=$(),Wt=X(),Pa=require("path"),dx=require("minimist"),mA=require("fs-extra"),pA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Un,DATABASES_PARAM_CONFIG:Ca,SYSTEM_SCHEMA_NAME:al}=Ma,La,Da,Ua;function SA(){if(La!==void 0)return La;if(Wt.getHdbBasePath()!==void 0)return La=Wt.get(Un.STORAGE_PATH)||Pa.join(Wt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(SA,"getBaseSchemaPath");function TA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=gA(al),Da}a(TA,"getSystemSchemaPath");function RA(){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(RA,"getTransactionAuditStoreBasePath");function fx(e,t){let r=Wt.get(Un.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(RA(),e.toString())}a(fx,"getTransactionAuditStorePath");function gA(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(SA(),e)}a(gA,"getSchemaPath");function Ex(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,dx(process.argv));let s=r[Un.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!_x.isObject(s))throw o;i=s}for(let o of i){let c=o[al];if(!c)continue;let u=Wt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return pA.set(u,[al,Ca.TABLES,t,Ca.PATH],_),Wt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return pA.set(u,[al,Ca.PATH],l),Wt.setProperty(Un.DATABASES,u),l}}let n=r[Un.STORAGE_PATH.toUpperCase()];if(n){if(!mA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Pa.join(n,e);return mA.mkdirsSync(i),Wt.setProperty(Un.STORAGE_PATH,n),i}return TA()}a(Ex,"initSystemSchemaPaths");function hx(){La=void 0,Da=void 0,Ua=void 0}a(hx,"resetPaths");AA.exports={getBaseSchemaPath:SA,getSystemSchemaPath:TA,getTransactionAuditStorePath:fx,getTransactionAuditStoreBasePath:RA,getSchemaPath:gA,initSystemSchemaPaths:Ex,resetPaths:hx}});var mr=T((xse,IA)=>{"use strict";var mx=dr().LMDB_ERRORS_ENUM,Fse=require("lmdb"),px=ze(),Gse=require("buffer").Buffer,{OVERFLOW_MARKER:OA,MAX_SEARCH_KEY_LENGTH:cl}=px,NA=["number","string","symbol","boolean","bigint"];function Sx(e){if(e=e?.primaryStore||e,!e)throw new Error(mx.ENV_REQUIRED)}a(Sx,"validateEnv");function Tx(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(Tx,"stringifyData");function Rx(e){return e instanceof Date?e.valueOf():e}a(Rx,"convertKeyValueToWrite");function gx(e){if(e==null)return;if(NA.includes(typeof e))return e.length>cl?[e.slice(0,cl)+OA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(NA.includes(typeof n))n.length>cl?t.push(n.slice(0,cl)+OA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(gx,"getIndexedValues");var ul=0,bA=0;function yA(){bA=Date.now()-performance.now()}a(yA,"adjustStartTime");yA();var Ax=6e4;setInterval(yA,Ax).unref();function Ox(){let e=performance.now()+bA;return e>ul?(ul=e,e):(ul+=488e-6,ul)}a(Ox,"getNextMonotonicTime");IA.exports={validateEnv:Sx,stringifyData:Tx,convertKeyValueToWrite:Rx,getNextMonotonicTime:Ox,getIndexedValues:gx}});var wA,is,NE,va=Te(()=>{wA=require("events"),is=class extends wA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new NE;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)}},NE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vr(e){return e[vt]||(e[vt]=Object.create(null))}function fl(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}`);vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new os.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(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=CA(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");vr(this)[o]=c}),i("deleteProperty",function(o){vr(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 CA(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}},fl(r,t)),new r(e)):new ll(e);case Array:let s=new dl(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=CA(o,t?.elements)),s[n]=o}return s}}function El(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=El(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 _l(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(_l(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(_l(n))return!0}else return!0}else return!0}}return!1}var os,vt,ll,li,dl,hl=Te(()=>{as();os=D(j()),vt=Symbol("own-data");a(vr,"getChanges");a(fl,"assignTrackedAccessors");a(CA,"trackObject");ll=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};fl(ll,{});a(El,"collapseData");a(Ba,"deepFreeze");a(_l,"hasChanges");li=Symbol.for("has-array-changes"),dl=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};dl.prototype.constructor=Array});function Ix(){yx=setInterval(function(){for(let e of bE)if(e.stale){let t=e[me]?.url;LA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},bx).unref()}var yE,LA,Nx,bE,_i,ml,bx,yx,IE=Te(()=>{yE=D(mr()),LA=D(G());as();Nx=100,bE=new Set,_i=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),bE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(bE.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,yE.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<Nx>>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=[]}},ml=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,yE.getNextMonotonicTime)())}getReadTxn(){}},bx=3e4;a(Ix,"startMonitoringTxns");Ix()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new _i;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var DA,di=Te(()=>{DA=require("../../index");as();IE();a(Ge,"transaction");(0,DA._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 CE(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(PA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case pt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new 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=LE(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:MA.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 LE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),PA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new so.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function pl(e){if(!e)return;let t=new wE,r,s,n,i,o,c=UA;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=wx[_],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?Cx:UA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,pt,Cs,MA,wx,PA,UA,Cx,wE,Sl=Te(()=>{so=D(j()),pt=D(ze()),Cs=require("ordered-binary"),MA=require("lmdb"),wx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(CE,"idsForCondition");PA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(LE,"filterByType");a(ws,"attributeComparator");UA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Cx=/([^&|*=]+)([&|*=]*)/g;a(pl,"parseQuery");wE=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 ME={};Qe(ME,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>GA,snake_case:()=>Dx});function Dx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vA(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 UE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[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[GA]=!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 Tl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Tl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Hr(e,t){let r=new FA.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 DE(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 BA(e){if(typeof e=="string")return t=>DE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=DE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=DE(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 HA,qA,FA,me,we,cs,GA,Re,Lx,Nt,Tl,UE,as=Te(()=>{HA=require("crypto");va();qA=require("../../index"),FA=D(j());hl();di();Sl();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),GA=Symbol("save-updates"),Re=Symbol("stored-record"),Lx={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=Br(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=BA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[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):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,HA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=BA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[cs])return this.constructor.create(this[we],t,this[me]);Hr(this,"post")}static isCollection(t){return t?.[cs]}static coerceId(t){return t}static parseQuery(t){return pl(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&&Lx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:vA(t,this)}}return vA(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,qA._assignPackageExport)("Resource",Nt);a(Dx,"snake_case");Tl=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(vA,"pathToId");UE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(DE,"selectFromObject");a(BA,"transformForSelect")});var vE={};Qe(vE,{loadGQLSchema:()=>Px,start:()=>PE,startOnMainThread:()=>Mx});function PE({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):Ux.includes(S.type)||(0,xA.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,Rl.dirname)(s),S.tableClass):i.set((0,Rl.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,Rl.dirname)(s)+"/"+S.name,A.tableClass)}}}var Rl,xA,Ux,Mx,Px,kA=Te(()=>{Rl=require("path");fe();xA=D(Ze()),Ux=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(PE,"start");Mx=PE,Px=PE({ensureTable:et}).handleFile});async function gl(e){return vx?(Ha||(Ha=Bx(qx)),(await(await Ha).import(e)).namespace):import(e)}async function Bx(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:Hx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,$A.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,VA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}function Hx(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 qx(){return{Resource:Nt,tables:pr}}var VA,$A,vx,Ha,BE=Te(()=>{as();fe();VA=require("fs/promises"),$A=require("path"),vx=!1;a(gl,"secureImport");a(Bx,"getCompartment");a(Hx,"secureOnlyFetch");a(qx,"getGlobalVars")});var qE={};Qe(qE,{handleFile:()=>Fx});async function Fx(e,t,r,s){let n=new Map,i=(0,YA.pathToFileURL)(r).toString(),o=await gl(i);u(o.default)&&s.set((0,HE.dirname)(t),o.default),c(o,(0,HE.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 YA,HE,KA=Te(()=>{YA=require("url");BE();HE=require("path");a(Fx,"handleFile")});var GE={};Qe(GE,{start:()=>Gx});function Gx({resources:e}){e.set("login",FE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FE,WA=Te(()=>{as();a(Gx,"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 kE=T((Tne,JA)=>{"use strict";var{Readable:xx}=require("stream"),kx=1e4;JA.exports={streamAsJSON(e){return new xE({value:e})}};var xE=class extends xx{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),QA)}catch(n){yield QA(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);zA(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>kx?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 zA(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 QA(e){return console.error(e),JSON.stringify(e.toString())}a(QA,"handleError");function zA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(zA,"when")});var uO=T((Ane,cO)=>{"use strict";var VE=require("recursive-iterator"),Vx=require("alasql"),$E=require("clone"),XA=$(),{handleHDBError:jA,hdb_errors:$x}=j(),{HDB_ERROR_MSGS:ZA,HTTP_STATUS_CODES:eO}=$x,{getDatabases:Yx}=(fe(),Z(Ce)),Kx=["DISTINCT_ARRAY"],tO=Symbol("validateTables"),YE=Symbol("validateTable"),gne=Symbol("getAllColumns"),rO=Symbol("validateAllColumns"),Al=Symbol("findColumn"),sO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),KE=Symbol("validateColumn"),nO=Symbol("setColumnsForTable"),iO=Symbol("checkColumnsForAsterisk"),oO=Symbol("validateGroupBy"),aO=Symbol("hasColumns"),WE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[tO](),this[iO](),this[rO]()}[tO](){if(this[aO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[YE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[YE](t.table)})}}[aO](){let t=!1,r=new VE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[YE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Yx();if(!r[t.databaseid])throw jA(new Error,ZA.SCHEMA_NOT_FOUND(t.databaseid),eO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw jA(new Error,ZA.TABLE_NOT_FOUND(t.databaseid,t.tableid),eO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=$E(n);i.table=$E(t),this.attributes.push(i)})}[Al](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)}[iO](){let t=new VE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[nO](r.tableid)}[nO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Vx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[rO](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[oO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new VE(t),n=[];for(let{node:i,path:o}of s)!XA.isEmpty(i)&&!XA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[sO](i):n.push(this[KE](i)));return n}[oO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Kx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=$E(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Al](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[Al](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`}[sO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[KE](t)}[KE](t){let r=this[Al](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]}};cO.exports=WE});var _O=T((Nne,lO)=>{"use strict";var QE=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")}};lO.exports=QE});var fO=T((yne,dO)=>{"use strict";var zE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};dO.exports=zE});var bO={};Qe(bO,{AUDIT_STORE_OPTIONS:()=>OO,createAuditEntry:()=>bl,openAuditStore:()=>Nl,readAuditEntry:()=>Sr,setAuditRetention:()=>Wx,transactionKeyEncoder:()=>AO});function Nl(e){let t=e.auditStore=e.openDB(SO.AUDIT_STORE_NAME,OO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,RO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-JE})){if((n[0]&15)===jE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},JE/10).unref())}),t}function Wx(e){clearTimeout(Fa),Fa=null,JE=e}function bl(e,t,r,s,n,i,o){let c=NO[i],u=1;s&&(s>1?no.setFloat64(0,s):qr.set(th),u=9),f(0),f(t),d(r),no.setFloat64(u,e),u+=8,n?d(n):qr[u++]=0,qr[s?8:0]=c;let l=qr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,io.writeKey)(E,qr,u);let p=u-h-1;p>127?p>16383?(eh.error("Key or username was too large for audit entry",E),u=h+1,qr[h]=0):(qr.copyWithin(h+2,h+1,u),no.setUint16(h,p|32768),u++):qr[h]=p}function f(E){E<128?qr[u++]=E:E<16384?(no.setUint16(u,E|32768),u+=2):E<1056964608?(no.setUint32(u,E|3221225472),u+=4):(qr[u]=255,no.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new ZE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:NO[s&7],tableId:i,get recordId(){return pO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?pO(e,l,d):void 0},getValue(f){return s&XE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return eh.error("Reading audit entry error",e),{}}}function pO(e,t,r){let s=e.subarray(t,r);return(0,io.readKey)(s,0,r-t)}var io,Ol,SO,TO,RO,gO,eh,qr,no,AO,OO,JE,Fa,XE,EO,jE,hO,mO,NO,ZE,oo=Te(()=>{io=require("ordered-binary"),Ol=D(X()),SO=D(ze()),TO=D(b()),RO=D(Ze()),gO=D($());xa();eh=D(G());(0,Ol.initSync)();qr=Buffer.alloc(1024),no=new DataView(qr.buffer,qr.byteOffset,1024),AO={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)}},OO={encoding:"binary",keyEncoder:AO},JE=(0,gO.convertToMS)((0,Ol.get)(TO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Nl,"openAuditStore");a(Wx,"setAuditRetention");XE=16,EO=1,jE=2,hO=3,mO=4,NO={put:EO|XE,[EO]:"put",delete:jE,[jE]:"delete",message:hO|XE,[hO]:"message",invalidate:mO,[mO]:"invalidate"};a(bl,"createAuditEntry");a(Sr,"readAuditEntry");ZE=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(pO,"readKeySafely")});var DO={};Qe(DO,{HAS_EXPIRATION:()=>ah,LAST_TIMESTAMP_PLACEHOLDER:()=>Ga,LOCAL_TIMESTAMP:()=>Qx,METADATA:()=>ka,NO_TIMESTAMP:()=>rh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>th,RecordEncoder:()=>oh,TIMESTAMP_ASSIGN_LAST:()=>Jx,TIMESTAMP_ASSIGN_NEW:()=>wO,TIMESTAMP_ASSIGN_PREVIOUS:()=>CO,TIMESTAMP_PLACEHOLDER:()=>yl,TIMESTAMP_RECORD_PREVIOUS:()=>sh,getUpdateRecord:()=>ch,handleLocalTimeForGets:()=>Cl});function LO(){return co[0]=co[0]^64,zx.getFloat64(0)}function Cl(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=Xx.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=LO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function ch(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?ao=i?.localTime?sh|CO:rh:ao=u?i?.localTime?sh|16384:wO|16384:rh,l>0&&(c|=ah),wl=c,ih=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=nh,A.timestampOffset=nh.start||0))}if(u){let A=_?.user?.username;if(E&&(Il=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,bl(o,t,s,Y,A,d,Il),{ifVersion:p}),S}}r.put(Ga,bl(o,t,s,i?.localTime?1:0,A,d,Il),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var yO,IO,yl,Ga,th,Qx,ka,co,zx,rh,wO,Jx,CO,sh,ah,nh,Il,ao,wl,ih,oh,Xx,fi,xa=Te(()=>{yO=require("msgpackr");oo();IO=D(G()),yl=new Uint8Array([1,1,1,1,4,64,0,0]),Ga=new Uint8Array([1,1,1,1,1,0,0,0]),th=new Uint8Array([1,1,1,1,3,64,0,0]),Qx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),zx=new DataView(co.buffer,0,8),rh=0,wO=0,Jx=1,CO=3,sh=4,ah=16,ao=0,wl=-1,ih=0,oh=class extends yO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(ao||wl>=0){let i=0,o=ao;o&&(i+=8,ao=0);let c=wl,u=ih;c>=0&&(i+=2,wl=-1,u&&(i+=8,ih=0));let _=nh=r.call(this,s,n|2048|i);Il=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(yl[4]=o,yl[5]=o>>8,_.set(yl,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=LO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ah&&(_=(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(LO,"getTimestamp");Xx=Map.prototype.get;a(Cl,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&IO.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(ch,"getUpdateRecord")});var Ll=T((Une,UO)=>{"use strict";var lh=X(),_h=b(),{RecordEncoder:jx}=(xa(),Z(DO));lh.initSync();var Zx=lh.get(_h.CONFIG_PARAMS.STORAGE_COMPRESSION),ek=lh.get(_h.CONFIG_PARAMS.STORAGE_CACHING)!==!1,tk=_h.UPDATES_PROPERTY,uh=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Zx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=ek&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:jx},this.alwaysLazyProperty=s=>s===tk)}};UO.exports=uh});var Ul=T((Pne,PO)=>{"use strict";var uo=X(),Va=b();uo.initSync();var rk=uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||uo.get(Va.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",MO=uo.get(Va.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),sk=uo.get(Va.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Dl=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=rk,this.noFSAccess=!0,MO!==void 0&&(this.overlappingSync=MO),this.noReadAhead=sk}};PO.exports=Dl;Dl.MAX_DBS=1e4});var Ue=T((Bne,$O)=>{"use strict";var fh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Ml=mr(),HO=G(),Qt=dr().LMDB_ERRORS_ENUM,Pl=fO(),Eh=Ll(),qO=Ul(),Mn=ze(),vO=b(),{table:nk,resetDatabases:ik}=(fe(),Z(Ce)),BO=X(),ls=Mn.INTERNAL_DBIS_NAME,FO=Mn.DBI_DEFINITION_NAME,ok="data.mdb",ak="lock.mdb",$a=".mdb",ck="-lock",dh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Mn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Mn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new fh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function vl(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(vl,"pathEnvNameValidation");async function hh(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,ok),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(hh,"validateEnvironmentPath");function Bl(e,t){if(Ml.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Bl,"validateEnvDBIName");async function uk(e,t,r=!1,s=!1){vl(e,t);let n=Tr.basename(e);t=t.toString();let i=BO.get(vO.CONFIG_PARAMS.DATABASES);i||BO.setProperty(vO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await hh(e,t,s),GO(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 qO(s?c:c+$a,!1),_=fh.open(u);_.dbis=Object.create(null);let l=new Eh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=mh(e,t,r);return _[Mn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(uk,"createEnvironment");async function lk(e,t,r,s=!0){vl(e,t),t=t.toString();let n=Tr.join(e,t);return nk({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(lk,"copyEnvironment");async function GO(e,t,r=!1){vl(e,t),t=t.toString();let s=mh(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 hh(e,t),i=Tr.join(e,t+$a),o=n!=i,c=new qO(n,o),u=fh.open(c);u.dbis=Object.create(null);let _=kO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(GO,"openEnvironment");async function _k(e,t,r=!1){vl(e,t),t=t.toString();let s=Tr.join(e,t+$a),n=await hh(e,t);if(global.lmdb_map!==void 0){let i=mh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await xO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+ck:Tr.join(Tr.dirname(n),ak))}a(_k,"deleteEnvironment");async function xO(e){Ml.validateEnv(e);let t=e[Mn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(xO,"closeEnvironment");function mh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mh,"getCachedEnvironmentName");function dk(e){Ml.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 Pl,n)}catch{HO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(dk,"listDBIDefinitions");function kO(e){Ml.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(kO,"listDBIs");function fk(e,t){let s=Fr(e,ls).getEntry(t),n=new Pl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{HO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(fk,"getDBIDefinition");function VO(e,t,r,s=!r){if(Bl(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 Eh(r,s===!0),o=e.openDB(t,i),c=new Pl(r===!0,s);return o[FO]=c,Fr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(VO,"createDBI");function Fr(e,t){if(Bl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=fk(e,t):r=new Pl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new Eh(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[FO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function Ek(e,t){Bl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Ek,"statDBI");async function hk(e,t){try{let r=Tr.join(e,t+$a);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(hk,"environmentDataSize");function mk(e,t){if(Bl(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(mk,"dropDBI");function pk(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)VO(e,i,i!==t,i===t),s=!0;else throw o}}s&&ik()}a(pk,"initializeDBIs");$O.exports={openDBI:Fr,openEnvironment:GO,createEnvironment:uk,listDBIs:kO,listDBIDefinitions:dk,createDBI:VO,dropDBI:mk,statDBI:Ek,deleteEnvironment:_k,initializeDBIs:pk,TransactionCursor:dh,environmentDataSize:hk,copyEnvironment:lk,closeEnvironment:xO}});var KO=T((qne,YO)=>{"use strict";var ph=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};YO.exports=ph});var QO=T((Gne,WO)=>{"use strict";var Sh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};WO.exports=Sh});var JO=T((kne,zO)=>{"use strict";var Th=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};zO.exports=Th});var lo=T((Wne,ZO)=>{"use strict";var Sk=Ue(),Tk=KO(),Rk=QO(),gk=JO(),Ls=mr(),Ya=dr().LMDB_ERRORS_ENUM,Ak=ze(),tn=b(),Ok=$(),Nk=require("uuid"),$ne=require("lmdb"),{handleHDBError:bk,hdb_errors:yk}=j(),{OVERFLOW_MARKER:Yne,MAX_SEARCH_KEY_LENGTH:Kne}=Ak,XO=X();XO.initSync();var Hl=XO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ik(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),gh(e,t,r);let i=new Tk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];jO(_,!0,n);let l=wk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Ah(o,c,s,i,n)}a(Ik,"insertRecords");function wk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Hl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Hl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ei])})}a(wk,"insertRecord");function Ck(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Ck,"removeSkippedRecords");function jO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Rh]))&&(e[Rh]=r||Ls.getNextMonotonicTime()):delete e[Rh]}a(jO,"setTimestamps");function gh(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Sk.initializeDBIs(e,t,r)}a(gh,"initializeTransaction");async function Lk(e,t,r,s,n=Ls.getNextMonotonicTime()){Nh(e,t,r,s),gh(e,t,r);let i=new Rk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Oh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Ah(c,u,s,i,n,o)}a(Lk,"updateRecords");async function Dk(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Nh(e,t,r,s)}catch(u){throw bk(u,u.message,yk.HTTP_STATUS_CODES.BAD_REQUEST)}gh(e,t,r);let i=new gk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Ok.isEmpty(_[t])?(l=Nk.v4(),_[t]=l):l=_[t];let d=Oh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Ah(o,c,s,i,n)}a(Dk,"upsertRecords");async function Ah(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),Ck(r,i),s}a(Ah,"finalizeWrite");function Oh(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(jO(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){Hl&&S.prefetch(I.map(N=>({key:N,value:s})),ql);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){Hl&&S.prefetch(I.map(N=>({key:N,value:s})),ql);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Oh(e,t,r,s,n,i,o))}a(Oh,"updateUpsertRecord");function Uk(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(Ya.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ya.WRITE_ATTRIBUTES_REQUIRED):new Error(Ya.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Uk,"validateBasic");function Nh(e,t,r,s){if(Uk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ya.RECORDS_REQUIRED):new Error(Ya.RECORDS_MUST_BE_ARRAY)}a(Nh,"validateWrite");function ql(){}a(ql,"noop");ZO.exports={insertRecords:Ik,updateRecords:Lk,upsertRecords:Dk}});var hi=T((zne,Mk)=>{Mk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=T((Jne,rN)=>{"use strict";var tN=$(),eN=b(),_o=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Pn={schema_format:{pattern:_o,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Pk=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()).required(),vk=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()),Bk=rn.alternatives(rn.string().min(1).max(Pn.schema_length.maximum).pattern(_o).messages({"string.pattern.base":"{:#label} "+Pn.schema_format.message}),rn.number()).required();function Hk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Pn.schema_length.maximum?`'${e}' maximum of 250 characters`:_o.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Hk,"checkValidTable");function qk(e,t){return tN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(qk,"validateSchemaExists");function Fk(e,t){let r=t.state.ancestors[0].schema;return tN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Fk,"validateTableExists");function Gk(e,t){return e.toLowerCase()===eN.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${eN.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Gk,"validateSchemaName");rN.exports={common_validators:Pn,schema_regex:_o,hdb_schema_table:Pk,validateSchemaExists:qk,validateTableExists:Fk,validateSchemaName:Gk,checkValidTable:Hk,hdb_database:vk,hdb_table:Bk}});var Fl=T((jne,sN)=>{var{common_validators:Us}=Ds(),Wa=Fe(),Ka="is required",tt={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Qa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Qa,"makeAttributesStrings");function xk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(xk,"schema_object");function kk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(kk,"table_object");function Vk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(Vk,"create_table_object");function $k(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($k,"attribute_object");function Yk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Yk,"describe_table");function Kk(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(Kk,"validateTableResidence");sN.exports={schema_object:xk,create_table_object:Vk,table_object:kk,attribute_object:$k,describe_table:Yk,validateTableResidence:Kk}});var iN=T((eie,nN)=>{"use strict";var Wk=require("uuid"),bh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Wk.v4(),this.schema_table=`${this.schema}.${this.table}`}};nN.exports=bh});var Gl=T((rie,oN)=>{"use strict";var Qk=iN(),yh=class extends Qk{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}};oN.exports=yh});var cN=T((nie,aN)=>{"use strict";aN.exports=Jk;var zk="inserted";function Jk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===zk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Jk,"returnObject")});var xl=T((oie,fN)=>{"use strict";var Xk=b(),Ih=Ue(),jk=lo(),{getSystemSchemaPath:Zk,getSchemaPath:eV}=ve(),tV=hi(),rV=Fl(),sV=Gl(),nV=cN(),{handleHDBError:uN,hdb_errors:_N}=j(),lN=$(),{HTTP_STATUS_CODES:iV}=_N,wh=tV.hdb_attribute,dN=[];for(let e=0;e<wh.attributes.length;e++)dN.push(wh.attributes[e].attribute);var oV="inserted";fN.exports=aV;async function aV(e){let t=rV.attribute_object(e);if(t)throw uN(new Error,t.message,_N.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&lN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw uN(new Error,r,iV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=lN.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 sV(e.schema,e.table,e.attribute,e.id);try{let i=await Ih.openEnvironment(eV(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Ih.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ih.openEnvironment(Zk(),Xk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await jk.insertRecords(o,wh.hash_attribute,dN,[n]);return nV(oV,c,{records:[n]},u)}catch(i){throw i}}a(aV,"lmdbCreateAttribute")});var Lh=T((cie,hN)=>{var{hdb_table:cV,hdb_database:EN}=Ds(),uV=Fe(),Ch=require("joi"),lV={undefined:"undefined",null:"null"},_V=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||lV[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"),dV=Ch.object({database:EN,schema:EN,table:cV,records:Ch.array().items(Ch.object().custom(_V)).required()});hN.exports=function(e){return uV.validateBySchema(e,dV)}});var za=T((_ie,pN)=>{"use strict";var sn=$(),mN=G(),lie=Lh(),{getDatabases:fV}=(fe(),Z(Ce)),{ClientError:mi}=j();pN.exports=EV;function EV(e){if(sn.isEmpty(e))throw new mi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new mi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new mi("invalid table specified.");if(!Array.isArray(e.records))throw new mi("records must be an array");let t=fV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw mN.error("a valid hash attribute must be provided with update record:",o),new mi("a valid hash attribute must be provided with update record, check log for more info");if(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw mN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(EV,"insertUpdateValidate")});var Ja=T((fie,SN)=>{"use strict";var hV=b().OPERATIONS_ENUM,Dh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=hV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};SN.exports=Dh});var ec=T((mie,TN)=>{"use strict";var hie=Ja(),kl=b(),Mh=$(),Uh=G(),mV=require("uuid"),{handleHDBError:Xa,hdb_errors:pV}=j(),{HDB_ERROR_MSGS:ja,HTTP_STATUS_CODES:Za}=pV;TN.exports=SV;function SV(e,t,r){for(let n=0;n<t.length;n++)TV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];RV(i,r,e.operation)}}a(SV,"processRows");function TV(e){if(Buffer.byteLength(String(e))>kl.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(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw Xa(new Error,ja.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(TV,"validateAttribute");function RV(e,t,r){if(!e.hasOwnProperty(t)||Mh.isEmptyOrZeroLength(e[t])){if(r===kl.OPERATIONS_ENUM.INSERT||r===kl.OPERATIONS_ENUM.UPSERT){e[t]=mV.v4();return}throw Uh.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]))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Uh.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 Uh.error(e),Xa(new Error,ja.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(RV,"validateHash")});var gN=T((Sie,RN)=>{"use strict";var Ph=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};RN.exports=Ph});var NN=T((Rie,ON)=>{"use strict";var vh=Ue(),gV=G(),AN=dr().LMDB_ERRORS_ENUM;ON.exports=AV;async function AV(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 vh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==AN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await vh.closeEnvironment(global.lmdb_map[s]),await vh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==AN.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){gV.error(t)}}a(AV,"cleanLMDBMap")});var nn=T((Aie,wN)=>{"use strict";var tc=require("crypto"),OV=X(),{CONFIG_PARAMS:NV}=b(),yN="aes-256-cbc",bV=32,yV=16,Bh=64,IN=32,IV=Bh+IN,bN=new Map;wN.exports={encrypt:wV,decrypt:CV,createNatsTableStreamName:LV};function wV(e){let t=tc.randomBytes(bV),r=tc.randomBytes(yV),s=tc.createCipheriv(yN,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(wV,"encrypt");function CV(e){let t=e.substr(0,Bh),r=e.substr(Bh,IN),s=e.substr(IV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=tc.createDecipheriv(yN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(CV,"decrypt");function LV(e,t){let r=OV.get(NV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=bN.get(r);return s||(s=tc.createHash("md5").update(r).digest("hex"),bN.set(r,s)),s}a(LV,"createNatsTableStreamName")});var pi=T((bie,LN)=>{"use strict";var Nie=Gr(),Vl=G(),CN=Fl(),DV=nn(),$l=$(),{handleHDBError:Yl,hdb_errors:UV}=j(),{HDB_ERROR_MSGS:Kl,HTTP_STATUS_CODES:Hh}=UV,MV=X();MV.initSync();var{getDatabases:qh}=(fe(),Z(Ce));LN.exports={describeAll:PV,describeTable:Wl,describeSchema:vV};async function PV(e){try{let t=$l.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=qh(),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 Wl({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 Wl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Vl.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 Vl.error("Got an error in describeAll"),Vl.error(t),Yl(new Error,Kl.DESCRIBE_ALL_ERR)}}a(PV,"describeAll");async function Wl(e,t){$l.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=CN.describe_table(e);if(i)throw i;let c=qh()[r];if(!c)throw Yl(new Error,Kl.SCHEMA_NOT_FOUND(e.schema),Hh.NOT_FOUND);let u=c[s];if(!u)throw Yl(new Error,Kl.TABLE_NOT_FOUND(e.schema,e.table),Hh.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=DV.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){Vl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Wl,"descTable");async function vV(e){$l.transformReq(e);let t=CN.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=qh()[s];if(!i)throw Yl(new Error,Kl.SCHEMA_NOT_FOUND(e.schema),Hh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),$l.isEmpty(u)||u.describe){let _=await Wl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(vV,"describeSchema")});var on=T((Cie,vN)=>{var BV=hi(),{callbackify:UN,promisify:HV}=require("util"),{getDatabases:MN}=(fe(),Z(Ce));vN.exports={setSchemaDataToGlobal:DN,getTableSchema:qV,getSystemSchema:FV,setSchemaDataToGlobalAsync:HV(DN)};var PN=pi(),Iie=UN(PN.describeAll),wie=UN(PN.describeTable);function DN(e){global.hdb_schema=MN(),e&&e()}a(DN,"setSchemaDataToGlobal");function qV(e,t,r){let s=MN()[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(qV,"getTableSchema");function FV(){return BV}a(FV,"getSystemSchema")});var xr=T((Die,FN)=>{"use strict";var zl=Lh(),bt=$(),GV=require("util"),Jl=_s(),xV=on(),BN=G(),{handleHDBError:Si,hdb_errors:kV}=j(),{HTTP_STATUS_CODES:Ti}=kV,VV=GV.promisify(xV.getTableSchema),$V="updated",HN="inserted",qN="upserted";FN.exports={insert:KV,update:WV,upsert:QV,validation:YV,flush:zV};async function YV(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 VV(e.schema,e.table),r=zl(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 BN.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 BN.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(YV,"validation");async function KV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=zl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Jl.createRecords(e);return Ql(HN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(KV,"insertData");async function WV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=zl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Jl.updateRecords(e);return bt.isEmpty(s.existing_rows)?Ql($V,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ql(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(WV,"updateData");async function QV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=zl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Jl.upsertRecords(e);return Ql(qN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(QV,"upsertData");function Ql(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===HN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===qN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ql,"returnObject");function zV(e){return bt.transformReq(e),Jl.flush(e.schema,e.table)}a(zV,"flush")});var Gh=T((Mie,kN)=>{var JV=Fe(),Fh=require("joi"),{hdb_table:XV,hdb_database:GN}=Ds(),xN={schema:GN,database:GN,table:XV},jV={date:Fh.date().iso().required()},ZV={timestamp:Fh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kN.exports=function(e,t){let r=t==="timestamp"?{...xN,...ZV}:{...xN,...jV},s=Fh.object(r);return JV.validateBySchema(e,s)}});var YN=T((Pie,$N)=>{var e$=Fe(),xh=require("joi"),{hdb_table:t$,hdb_database:VN}=Ds(),r$=xh.object({schema:VN,database:VN,table:t$,hash_values:xh.array().required(),ids:xh.array()});$N.exports=function(e){return e$.validateBySchema(e,r$)}});var WN=T((vie,KN)=>{"use strict";var kh=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}},Vh=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}},$h=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};KN.exports={InsertObject:kh,NoSQLSeachObject:Vh,DeleteResponseObject:$h}});var Ai=T((Hie,jN)=>{"use strict";var zN=Gh(),s$=YN(),Ri=$(),QN=require("moment"),JN=G(),{promisify:n$,callbackify:i$}=require("util"),gi=b(),o$=on(),Yh=n$(o$.getTableSchema),Kh=_s(),{DeleteResponseObject:a$}=WN(),{handleHDBError:vn,hdb_errors:c$}=j(),{HDB_ERROR_MSGS:Xl,HTTP_STATUS_CODES:Bn}=c$,u$="records successfully deleted",l$=i$(XN);jN.exports={delete:l$,deleteRecord:XN,deleteFilesBefore:_$,deleteAuditLogsBefore:d$};async function _$(e){let t=zN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!QN(e.date,QN.ISO_8601).isValid())throw vn(new Error,Xl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Xl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await Kh.deleteRecordsBefore(e);if(await Yh(e.schema,e.table),JN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(_$,"deleteFilesBefore");async function d$(e){let t=zN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,Xl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,Xl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await Kh.deleteAuditLogsBefore(e);return await Yh(e.schema,e.table),JN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(d$,"deleteAuditLogsBefore");async function XN(e){e.ids&&(e.hash_values=e.ids);let t=s$(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await Yh(e.schema,e.table);let s=await Kh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${u$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new a$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(XN,"deleteRecord")});var jl=T((Fie,tb)=>{var f$=require("crypto"),ZN=9;function E$(e){let t=m$(ZN),r=eb(e+t);return t+r}a(E$,"createHash");function h$(e,t){let r=e.substr(0,ZN),s=r+eb(t+r);return e===s}a(h$,"validateHash");function m$(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(m$,"generateSalt");function eb(e){return f$.createHash("md5").update(e).digest("hex")}a(eb,"md5");tb.exports={hash:E$,validate:h$}});var sb=T((xie,rb)=>{var Wh=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 p$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Wh.validateObject(e,Bt)}a(p$,"addUserValidation");function S$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Wh.validateObject(e,Bt)}a(S$,"alterUserValidation");function T$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Wh.validateObject(e,Bt)}a(T$,"dropUserValidation");rb.exports={addUserValidation:p$,alterUserValidation:S$,dropUserValidation:T$}});var ke=T(($ie,ib)=>{"use strict";var{platform:Vie}=require("os"),R$="nats-server.zip",Qh="nats-server",g$=process.platform==="win32"?`${Qh}.exe`:Qh,zh="HDB",A$=/^[^\s.,*>]+$/,nb="__request__",O$=a(e=>`${e}.${nb}`,"REQUEST_SUBJECT"),N$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},b$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},y$={HUB:"hub.pid",LEAF:"leaf.pid"},I$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},w$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:zh,deliver_subject:"__HDB__.WORKQUEUE"},C$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:zh,deliver_subject:"HDB.SCHEMAQUEUE"},L$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:zh,deliver_subject:"HDB.USERQUEUE"},D$={SUCCESS:"success",ERROR:"error"},U$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},M$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},P$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},v$={debug:"-D",trace:"-DVV"};ib.exports={NATS_SERVER_ZIP:R$,NATS_SERVER_NAME:Qh,NATS_BINARY_NAME:g$,PID_FILES:y$,NATS_CONFIG_FILES:b$,SERVER_SUFFIX:I$,WORK_QUEUE_CONSUMER_NAMES:w$,SCHEMA_QUEUE_CONSUMER_NAMES:C$,USER_QUEUE_CONSUMER_NAMES:L$,NATS_TERM_CONSTRAINTS_RX:A$,REQUEST_SUFFIX:nb,UPDATE_REMOTE_RESPONSE_STATUSES:D$,CLUSTER_STATUS_STATUSES:U$,REQUEST_SUBJECT:O$,SUBJECT_PREFIXES:M$,MSG_HEADERS:N$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:v$,LOG_LEVEL_HIERARCHY:P$}});var ab=T((Kie,ob)=>{"use strict";var Zl=b(),e_=class{static{a(this,"BaseLicense")}constructor(t=0,r=Zl.RAM_ALLOCATION_ENUM.DEFAULT,s=Zl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Jh=class extends e_{static{a(this,"ExtendedLicense")}constructor(t=0,r=Zl.RAM_ALLOCATION_ENUM.DEFAULT,s=Zl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};ob.exports={BaseLicense:e_,ExtendedLicense:Jh}});var rc=T((Qie,fb)=>{"use strict";var ho=require("fs-extra"),cb=jl(),ub=require("crypto"),B$=require("moment"),H$=require("uuid").v4,Ht=G(),jh=require("path"),q$=$(),Hn=b(),F$=ab().ExtendedLicense,Eo="invalid license key format",G$="061183",x$="mofi25",k$="aes-256-cbc",V$=16,$$=32,lb=X();lb.initSync();var Xh;fb.exports={validateLicense:_b,generateFingerPrint:K$,licenseSearch:db,getLicense:z$};function Zh(){return jh.join(lb.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(Zh,"getLicenseDirPath");function Y$(){let e=Zh();return jh.join(e,Hn.LICENSE_FILE_NAME)}a(Y$,"getLicenseFilePath");function em(){let e=Zh();return jh.join(e,Hn.REG_KEY_FILE_NAME)}a(em,"getFingerPrintFilePath");async function K$(){let e=em();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await W$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(K$,"generateFingerPrint");async function W$(){let e=H$(),t=cb.hash(e),r=em();try{await ho.mkdirp(Zh()),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(W$,"writeFingerprint");function _b(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=em(),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(x$),c=o[1];c=Buffer.concat([Buffer.from(c)],V$);let u=Buffer.concat([Buffer.from(i)],$$),_=ub.createDecipheriv(k$,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=Q$(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<B$().valueOf()&&(r.valid_date=!1),cb.validate(o[1],`${G$}${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(_b,"validateLicense");function Q$(e,t){try{let r=ub.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(Q$,"checkOldLicense");function db(){let e=new F$,t=[];try{t=ho.readFileSync(Y$(),"utf-8").split(Hn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ht.info("no license file found"):Ht.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(q$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=_b(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Xh=e,e}a(db,"licenseSearch");async function z$(){return Xh||await db(),Xh}a(z$,"getLicense")});var gr=T((Zie,Cb)=>{"use strict";var pb="username is required",Sb="nothing to update, must supply active, role or password to update",Tb="password cannot be an empty string",Rb="If role is specified, it cannot be empty.",gb="active must be true or false";Cb.exports={addUser:nY,alterUser:iY,dropUser:aY,getSuperUser:_Y,userInfo:cY,listUsers:r_,listUsersExternal:uY,setUsersToGlobal:po,findAndValidateUser:Ib,getClusterUser:dY,USERNAME_REQUIRED:pb,ALTERUSER_NOTHING_TO_UPDATE:Sb,EMPTY_PASSWORD:Tb,EMPTY_ROLE:Rb,ACTIVE_BOOLEAN:gb};var Ab=xr(),J$=Ai(),sm=jl(),Ob=sb(),Nb=Gr(),nm=an(),Rr=$(),bb=require("validate.js"),_e=G(),{promisify:X$}=require("util"),im=nn(),Eb=b(),hb=ke(),j$=hr(),Jie=X(),Xie=rc(),Z$=hi(),{table:jie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:eY}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:tm,HDB_ERROR_MSGS:mo}=eY,{UserEventMsg:om}=ds(),rm=require("lodash"),{server:am}=(Pr(),Z(to)),tY=G();am.getUser=Ib;var yb={username:!0,active:!0,role:!0,password:!0},mb=new Map,t_=Nb.searchByValue,rY=Nb.searchByHash,sY=X$(J$.delete);async function nY(e){let t=bb.cleanAttributes(e,yb),r=Ob.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await t_(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ms(new Error,mo.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,mo.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=im.encrypt(t.password)),t.password=sm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Ab.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await po()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,mo.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],nm.signalUserChange(new om(process.pid)),`${c.username} successfully added`}a(nY,"addUser");async function iY(e){let t=bb.cleanAttributes(e,yb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(pb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(Sb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Tb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(gb);let r=oY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=im.encrypt(t.password)),t.password=sm.hash(t.password)),t.role==="")throw new Error(Rb);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 t_(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=mo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mo.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Ab.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 nm.signalUserChange(new om(process.pid)),n}a(iY,"alterUser");function oY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(oY,"isClusterUser");async function aY(e){try{let t=Ob.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,mo.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await sY(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 nm.signalUserChange(new om(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(aY,"dropUser");async function cY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=rm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await rY(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(cY,"userInfo");async function uY(){let e;try{e=await r_()}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(uY,"listUsersExternal");async function r_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await t_(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]=rm.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 t_(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=rm.cloneDeep(o),o.role=r[o.role],lY(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(r_,"listUsers");function lY(e){try{if(!e){_e.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(Z$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(lY,"appendSystemTablesToRole");async function po(){try{let e=await r_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(po,"setUsersToGlobal");async function Ib(e,t,r=!0){global.hdb_users||await po();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,tm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,tm.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(mb.get(t)===s.password)return n;if(sm.validate(s.password,t))mb.set(t,s.password);else throw Ms(new Error,tm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ib,"findAndValidateUser");async function _Y(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(_Y,"getSuperUser");async function dY(){let e=await r_(),t=j$.getConfigFromFile(Eb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===Eb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=im.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+hb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+hb.SERVER_SUFFIX.ADMIN,r}a(dY,"getClusterUser");var wb=[];am.invalidateUser=function(e){for(let t of wb)try{t(e)}catch(r){tY.error("Error invalidating user",r)}};am.onInvalidatedUser=function(e){wb.push(e)}});var nc=T((soe,Mb)=>{"use strict";var Oi=G(),Ar=b(),fY=NN(),toe=on(),roe=pi(),EY=gr(),{validateEvent:Lb}=ds(),sc=_s(),hY=require("process"),{resetDatabases:mY}=(fe(),Z(Ce)),pY={[Ar.ITC_EVENT_TYPES.SCHEMA]:SY,[Ar.ITC_EVENT_TYPES.USER]:Ub};async function SY(e){let t=Lb(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await fY(e.message),await TY(e.message)}a(SY,"schemaHandler");async function TY(e){try{sc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=mY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(TY,"syncSchemaMetadata");var Db=[];async function Ub(e){try{try{sc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Lb(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${Ar.HDB_ITC_CLIENT_PREFIX}${hY.pid} received user event:`,e),await EY.setUsersToGlobal();for(let r of Db)r()}catch(t){Oi.error(t)}}a(Ub,"userHandler");Ub.addListener=function(e){Db.push(e)};Mb.exports=pY});var ds=T((uoe,vb)=>{"use strict";var ioe=G(),cm=$(),RY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:ooe,threadId:gY,isMainThread:AY,workerData:aoe}=require("worker_threads"),{onMessageFromWorkers:OY,broadcast:coe,broadcastWithAcknowledgement:NY}=Ze();vb.exports={sendItcEvent:bY,validateEvent:Pb,SchemaEventMsg:yY,UserEventMsg:IY};var s_;OY(async(e,t)=>{s_=s_||nc(),Pb(e),s_[e.type]&&await s_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function bY(e){return!AY&&e.message&&(e.message.originator=gY),NY(e)}a(bY,"sendItcEvent");function Pb(e){if(typeof e!="object")return ic.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||cm.isEmpty(e.type))return ic.MISSING_TYPE;if(!e.hasOwnProperty("message")||cm.isEmpty(e.message))return ic.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||cm.isEmpty(e.message.originator))return ic.MISSING_ORIGIN;if(RY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Pb,"validateEvent");function yY(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(yY,"SchemaEventMsg");function IY(e){this.originator=e}a(IY,"UserEventMsg")});var an=T((doe,Fb)=>{"use strict";var Bb=b(),_oe=$(),n_=G(),Hb=gN(),So,{sendItcEvent:qb}=ds();function wY(e){try{n_.trace("signalSchemaChange called with message:",e),So=So||nc();let t=new Hb(Bb.ITC_EVENT_TYPES.SCHEMA,e);return So.schema(t),qb(t)}catch(t){n_.error(t)}}a(wY,"signalSchemaChange");function CY(e){try{n_.trace("signalUserChange called with message:",e),So=So||nc();let t=new Hb(Bb.ITC_EVENT_TYPES.USER,e);return So.user(t),qb(t)}catch(t){n_.error(t)}}a(CY,"signalUserChange");Fb.exports={signalSchemaChange:wY,signalUserChange:CY}});var i_=T((Eoe,xb)=>{"use strict";var Gb=$(),LY=b(),DY=G(),UY=xl(),MY=Gl(),PY=an(),{SchemaEventMsg:vY}=ds(),BY="already exists in";xb.exports=HY;async function HY(e,t,r){if(Gb.isEmptyOrZeroLength(r))return r;let s=[];Gb.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 qY(e,t.schema,t.name,i)})),n}a(HY,"lmdbCheckForNewAttributes");async function qY(e,t,r,s){let n=new MY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await FY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(BY))DY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(qY,"createNewAttribute");async function FY(e){let t;return t=await UY(e),PY.signalSchemaChange(new vY(process.pid,LY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(FY,"createAttribute")});var To=T((moe,kb)=>{"use strict";var um=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}};kb.exports=um});var $b=T((Soe,Vb)=>{"use strict";var GY=To(),xY=b().OPERATIONS_ENUM,lm=class extends GY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(xY.INSERT,r,s,n,i),this.records=t}};Vb.exports=lm});var Kb=T((Roe,Yb)=>{"use strict";var kY=To(),VY=b().OPERATIONS_ENUM,_m=class extends kY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(VY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};Yb.exports=_m});var Qb=T((Aoe,Wb)=>{"use strict";var $Y=To(),YY=b().OPERATIONS_ENUM,dm=class extends $Y{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(YY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Wb.exports=dm});var Jb=T((Noe,zb)=>{"use strict";var KY=To(),WY=b().OPERATIONS_ENUM,fm=class extends KY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(WY.DELETE,s,n,t,i),this.original_records=r}};zb.exports=fm});var oc=T((Ioe,ey)=>{"use strict";var yoe=require("path"),Xb=Ue(),QY=$b(),zY=Kb(),JY=Qb(),XY=Jb(),Ro=ze(),jb=$(),{CONFIG_PARAMS:jY}=b(),Zb=X();Zb.initSync();var o_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZY}=ve();ey.exports=e1;async function e1(e,t){if(Zb.get(jY.LOGGING_AUDITLOG)===!1)return;let r=ZY(e.schema,e.table),s=await Xb.openEnvironment(r,e.table,!0),n=t1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Xb.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(e1,"writeTransaction");function t1(e,t){let r=jb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===o_.INSERT)return new QY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.UPDATE)return new zY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.UPSERT)return new JY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.DELETE)return new XY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(t1,"createTransactionObject")});var Em=T((Loe,ty)=>{"use strict";var r1=za(),Coe=Ja(),ac=b(),s1=ec(),n1=lo().insertRecords,i1=Ue(),o1=G(),a1=i_(),{getSchemaPath:c1}=ve(),u1=oc();ty.exports=l1;async function l1(e){try{let{schema_table:t,attributes:r}=r1(e);s1(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 a1(e.hdb_auth_header,t,r),n=c1(e.schema,e.table),i=await i1.openEnvironment(n,e.table),o=await n1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await u1(e,o)}catch(c){o1.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(l1,"lmdbCreateRecords")});var ny=T((Uoe,sy)=>{"use strict";var ry=b(),_1=Em(),d1=Ja(),f1=require("fs-extra"),{getSchemaPath:E1}=ve();sy.exports=h1;async function h1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new d1(ry.SYSTEM_SCHEMA_NAME,ry.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await _1(r),await f1.mkdirp(E1(e.schema))}a(h1,"lmdbCreateSchema")});var oy=T((Poe,iy)=>{"use strict";var hm=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}};iy.exports=hm});var ly=T((Foe,uy)=>{"use strict";var ay=Ue(),mm=mr(),pm=dr().LMDB_ERRORS_ENUM,m1=ze(),cy=G(),Boe=$(),p1=require("lmdb"),S1=oy(),T1=b(),{OVERFLOW_MARKER:Hoe,MAX_SEARCH_KEY_LENGTH:qoe}=m1,R1=T1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function g1(e,t,r,s){if(mm.validateEnv(e),t===void 0)throw new Error(pm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(pm.IDS_REQUIRED):new Error(pm.IDS_MUST_BE_ITERABLE);try{let n=ay.listDBIs(e);ay.initializeDBIs(e,t,n);let i=new S1,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[R1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,p1.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=mm.getIndexedValues(N);if(Y)for(let Q=0,F=Y.length;Q<F;Q++)I.remove(Y[Q],o)}catch{cy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){cy.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=mm.getNextMonotonicTime(),i}catch(n){throw n}}a(g1,"deleteRecords");uy.exports={deleteRecords:g1}});var cc=T((xoe,dy)=>{"use strict";var go=$(),A1=ly(),O1=Ue(),{getSchemaPath:N1}=ve(),b1=oc(),y1=G();dy.exports=I1;async function I1(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 _y([],[]);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=N1(e.schema,e.table),i=await O1.openEnvironment(n,e.table),o=await A1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await b1(e,o)}catch(c){y1.error(`unable to write transaction due to ${c.message}`)}return _y(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(I1,"lmdbDeleteRecords");function _y(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(_y,"createDeleteResponse")});var Tm=T(($oe,fy)=>{"use strict";var w1=b(),Voe=mr();function Sm(e,t){let r=Object.create(null);if(t.length===1&&w1.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(Sm,"parseRow");function C1(e,t,r,s){let n=Sm(r,e);s.push(n)}a(C1,"searchAll");function L1(e,t,r,s){let n=Sm(r,e);s[t]=n}a(L1,"searchAllToMap");function D1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(D1,"iterateDBI");function Ni(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ni,"pushResults");function U1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(U1,"endsWith");function M1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(M1,"contains");function P1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(P1,"greaterThanCompare");function v1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(v1,"greaterThanEqualCompare");function B1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(B1,"lessThanCompare");function H1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(H1,"lessThanEqualCompare");fy.exports={parseRow:Sm,searchAll:C1,searchAllToMap:L1,iterateDBI:D1,endsWith:U1,contains:M1,greaterThanCompare:P1,greaterThanEqualCompare:v1,lessThanCompare:B1,lessThanEqualCompare:H1,pushResults:Ni}});var Ao=T((zoe,Ry)=>{"use strict";var qn=Ue(),Koe=G(),Or=mr(),a_=ze(),Je=dr().LMDB_ERRORS_ENUM,Woe=$(),q1=b(),c_=Tm(),{parseRow:F1}=c_,Qoe=require("lmdb"),{OVERFLOW_MARKER:Ey,MAX_SEARCH_KEY_LENGTH:G1}=a_;function hy(e,t,r,s=!1,n=void 0,i=void 0){return bi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(hy,"iterateFullIndex");function uc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(uc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=qn.openDBI(n,r);i[a_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&qn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(bi,"setupTransaction");function my(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(Ey)){if(!n)if(r)n=qn.openDBI(e,r);else{let u=qn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=qn.openDBI(e,u[_]),!n[a_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(my,"getOverflowCheck");function x1(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return bi(e,t,t,(o,c,u)=>(u_(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(_=>F1(_.value,r))))}a(x1,"searchAll");function k1(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);u_(r),r=lc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of hy(e,t,t,s,n,i))o.set(c,c_.parseRow(u,r));return o}a(k1,"searchAllToMap");function V1(e,t,r=!1,s=void 0,n=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=hy(e,void 0,t,r,s,n),c=o.transaction,u=my(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(V1,"iterateDBI");function $1(e,t){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return qn.statDBI(e,t).entryCount}a($1,"countAll");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){return Fn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=Or.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(Y1,"equals");function K1(e,t,r){return Fn(e,t,r),qn.openDBI(e,t).getValuesCount(r)}a(K1,"count");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){return Fn(e,r,s),bi(e,null,r,(c,u)=>{s=Or.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(W1,"startsWith");function Q1(e,t,r,s,n=!1,i=void 0,o=void 0){return py(e,t,r,s,n,i,o,!0)}a(Q1,"endsWith");function py(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Fn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=my(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(Ey)?_.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))?_[a_.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(py,"contains");function z1(e,t,r,s,n=!1,i=void 0,o=void 0){Fn(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(z1,"greaterThan");function J1(e,t,r,s,n=!1,i=void 0,o=void 0){Fn(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(J1,"greaterThanEqual");function X1(e,t,r,s,n=!1,i=void 0,o=void 0){Fn(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(X1,"lessThan");function j1(e,t,r,s,n=!1,i=void 0,o=void 0){Fn(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 Z1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Or.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=Or.convertKeyValueToWrite(s),n=Or.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(Z1,"between");function eK(e,t,r,s){Or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(u_(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=c_.parseRow(c,r)),o}a(eK,"searchByHash");function tK(e,t,r){Or.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(tK,"checkHashExists");function rK(e,t,r,s,n=[]){return Ty(e,t,r,s,n),Sy(e,t,r,s,n).map(i=>i[1])}a(rK,"batchSearchByHash");function sK(e,t,r,s,n=[]){Ty(e,t,r,s,n);let i=new Map;for(let[o,c]of Sy(e,t,r,s,n))i.set(o,c);return i}a(sK,"batchSearchByHashToMap");function Sy(e,t,r,s,n=[]){return bi(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[_,c_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Sy,"batchHashSearch");function Ty(e,t,r,s,n){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(u_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(Ty,"initializeBatchSearchByHash");function u_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(u_,"validateFetchAttributes");function Fn(e,t,r){if(Or.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>G1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(Fn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&q1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Ry.exports={searchAll:x1,searchAllToMap:k1,count:K1,countAll:$1,equals:Y1,startsWith:W1,endsWith:Q1,contains:py,searchByHash:eK,setGetWholeRowAttributes:lc,batchSearchByHash:rK,batchSearchByHashToMap:sK,checkHashExists:tK,iterateDBI:V1,greaterThan:z1,greaterThanEqual:J1,lessThan:X1,lessThanEqual:j1,between:Z1}});var Oo=T((Xoe,by)=>{var gy=require("lodash"),Ay=Fe(),Be=require("joi"),nK=$(),{hdb_schema_table:l_,checkValidTable:Oy,hdb_table:Ny,hdb_database:__}=Ds(),{handleHDBError:iK,hdb_errors:oK}=j(),{getDatabases:aK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:cK}=oK,uK=Be.object({database:__,schema:__,table:Ny,search_attribute:l_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(l_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),lK=Be.object({database:__,schema:__,table:Ny,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(l_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:l_,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()});by.exports=function(e,t){let r=null;switch(t){case"value":r=Ay.validateBySchema(e,uK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Oy("database",e.schema)),i(Oy("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=Ay.validateBySchema(e,lK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=nK.checkGlobalSchemaTable(e.schema,e.table);if(n)return iK(new Error,n,cK.NOT_FOUND);let o=aK()[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=gy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!gy.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 Rm=T((Zoe,yy)=>{"use strict";var _K=Ue(),dK=Oo(),{getSchemaPath:fK}=ve();yy.exports=EK;function EK(e){let t=dK(e,"hashes");if(t)throw t;let r=fK(e.schema,e.table);return _K.openEnvironment(r,e.table)}a(EK,"initialize")});var gm=T((tae,Iy)=>{"use strict";var hK=Ao(),mK=Rm();Iy.exports=pK;async function pK(e){let t=await mK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return hK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(pK,"lmdbGetDataByHash")});var No=T((sae,wy)=>{"use strict";var Am=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};wy.exports=Am});var Ly=T((oae,Cy)=>{"use strict";var iae=No(),SK=Ao(),TK=Rm();Cy.exports=RK;async function RK(e){let t=await TK(e),r=global.hdb_schema[e.schema][e.table];return SK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(RK,"lmdbSearchByHash")});var vs=T((cae,Dy)=>{"use strict";var Om=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}};Dy.exports=Om});var d_=T((lae,Hy)=>{"use strict";var qt=Ao(),gK=Ue(),AK=$(),oe=ze(),yi=b(),OK=hi(),Uy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:NK}=ve(),cn=yi.SEARCH_WILDCARDS;async function bK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=OK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=By(e,s.hash_attribute,r,t);return Py(e,n,s.hash_attribute,r)}a(bK,"prepSearch");async function Py(e,t,r,s){let n=NK(e.schema,e.table),i=await gK.openEnvironment(n,e.table),o=vy(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(yK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?My(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?My(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(Py,"executeSearch");function vy(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(vy,"searchByType");function My(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(My,"createMapFromIterable");function yK(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(yK,"checkToFetchMore");function By(e,t,r,s){if(AK.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),cn.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[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(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Uy.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Uy.UNKNOWN_SEARCH_TYPE)}}a(By,"createSearchTypeFromSearchObject");Hy.exports={executeSearch:Py,createSearchTypeFromSearchObject:By,prepSearch:bK,searchByType:vy}});var Fy=T((fae,qy)=>{"use strict";var dae=vs(),IK=Oo(),wK=$(),CK=b(),LK=d_();qy.exports=DK;function DK(e,t){if(!wK.isEmpty(t)&&CK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=IK(e,"value");if(s)throw s;let n=!0;return LK.prepSearch(e,t,n)}a(DK,"lmdbGetDataByValue")});var _c=T((mae,Gy)=>{"use strict";var hae=vs(),UK=Oo(),MK=$(),PK=b(),vK=d_();Gy.exports=BK;async function BK(e,t){if(!MK.isEmpty(t)&&PK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=UK(e,"value");if(s)throw s;return vK.prepSearch(e,t,!1)}a(BK,"lmdbSearchByValue")});var ky=T((Tae,xy)=>{"use strict";var Sae=ze(),Nm=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}},bm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ym=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};xy.exports={SearchByConditionsObject:Nm,SearchCondition:bm,SortAttribute:ym}});var Wy=T((Oae,Ky)=>{"use strict";var gae=ky().SearchByConditionsObject,HK=vs(),qK=Oo(),Im=Ao(),f_=ze(),{Resource:Aae}=(as(),Z(ME)),Yy=d_(),FK=Tm(),GK=require("lodash"),{getSchemaPath:xK}=ve(),Vy=Ue(),{handleHDBError:kK,hdb_errors:VK}=j(),{HTTP_STATUS_CODES:$K}=VK,YK=1e8;Ky.exports=KK;async function KK(e){let t=qK(e,"conditions");if(t)throw kK(t,t.message,$K.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=xK(e.schema,e.table),s=await Vy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Vy.openDBI(s,_.search_attribute);let i=GK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===f_.SEARCH_TYPES.EQUALS?_.estimated_count=Im.count(s,_.search_attribute,_.search_value):l===f_.SEARCH_TYPES.CONTAINS||l===f_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=YK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await $y(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(Yy.filterByType),d=l.length,f=Im.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=>FK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await $y(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=Im.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(KK,"lmdbSearchByConditions");async function $y(e,t,r,s){let n=new HK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===f_.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Yy.searchByType(e,n,i,s).map(o=>o.value)}a($y,"executeConditionSearch")});var dc=T((bae,Qy)=>{"use strict";var WK=b().OPERATIONS_ENUM,wm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=WK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Qy.exports=wm});var Cm=T((Iae,rI)=>{"use strict";var jy=vs(),Zy=dc(),eI=_c(),tI=cc(),zt=b(),zy=$(),Jy=Ue(),{getTransactionAuditStorePath:QK,getSchemaPath:zK}=ve(),Xy=G();rI.exports=JK;async function JK(e){try{if(zy.isEmpty(global.hdb_schema[e.schema])||zy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await XK(e),await jK(e);let t=zK(e.schema,e.table);try{await Jy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Xy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=QK(e.schema,e.table);await Jy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Xy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(JK,"lmdbDropTable");async function XK(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 eI(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await tI(n)}a(XK,"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 eI(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Zy(zt.SYSTEM_SCHEMA_NAME,zt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await tI(n)}catch(i){throw i}}a(jK,"dropTableFromSystem")});var nI=T((Cae,sI)=>{"use strict";var ZK=require("fs-extra"),eW=vs(),tW=No(),rW=dc(),sW=Cm(),nW=cc(),iW=gm(),oW=_c(),un=b(),{getSchemaPath:aW}=ve(),{handleHDBError:cW,hdb_errors:uW}=j(),{HDB_ERROR_MSGS:lW,HTTP_STATUS_CODES:_W}=uW;sI.exports=dW;async function dW(e){let t;try{t=await fW(e.schema);let r=new eW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await oW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await sW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new rW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await nW(n);let i=aW(t);await ZK.remove(i)}catch(r){throw r}}a(dW,"lmdbDropSchema");async function fW(e){let t=new tW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await iW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw cW(new Error,lW.SCHEMA_NOT_FOUND(e),_W.NOT_FOUND,void 0,void 0,!0);return s}a(fW,"validateDropSchema")});var Dm=T((Dae,iI)=>{"use strict";var Lm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};iI.exports=Lm});var aI=T((Pae,oI)=>{"use strict";var EW=require("fs-extra"),E_=Ue(),{getTransactionAuditStorePath:hW}=ve(),Um=ze(),Mae=Dm();oI.exports=mW;async function mW(e){let t;try{let r=hW(e.schema,e.table);await EW.mkdirp(r),t=await E_.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{E_.createDBI(t,Um.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),E_.createDBI(t,Um.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),E_.createDBI(t,Um.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(mW,"createTransactionsAuditEnvironment")});var _I=T((Bae,lI)=>{"use strict";var Mm=b(),cI=Ue(),pW=lo(),{getSystemSchemaPath:SW,getSchemaPath:TW}=ve(),RW=hi(),gW=xl(),Pm=Gl(),AW=G(),OW=aI(),Bm=RW.hdb_table,uI=[];for(let e=0;e<Bm.attributes.length;e++)uI.push(Bm.attributes[e].attribute);lI.exports=NW;async function NW(e,t){let r=TW(t.schema,t.table),s=new Pm(t.schema,t.table,Mm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Pm(t.schema,t.table,Mm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Pm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await cI.createEnvironment(r,t.table),e!==void 0){let o=await cI.openEnvironment(SW(),Mm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await pW.insertRecords(o,Bm.hash_attribute,uI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await vm(s),await vm(n),await vm(i)}await OW(t)}catch(o){throw o}}a(NW,"lmdbCreateTable");async function vm(e){try{await gW(e)}catch(t){AW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(vm,"createAttribute")});var fI=T((qae,dI)=>{"use strict";var bW=za(),yW=ec(),IW=i_(),fc=b(),wW=lo().updateRecords,CW=Ue(),{getSchemaPath:LW}=ve(),DW=oc(),UW=G();dI.exports=MW;async function MW(e){try{let{schema_table:t,attributes:r}=bW(e);yW(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 IW(e.hdb_auth_header,t,r),n=LW(e.schema,e.table),i=await CW.openEnvironment(n,e.table),o=await wW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await DW(e,o)}catch(c){UW.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(MW,"lmdbUpdateRecords")});var hI=T((Gae,EI)=>{"use strict";var PW=b().OPERATIONS_ENUM,Hm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=PW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};EI.exports=Hm});var pI=T((Vae,mI)=>{"use strict";var kae=hI(),vW=za(),BW=ec(),HW=i_(),Ec=b(),qW=lo().upsertRecords,FW=Ue(),{getSchemaPath:GW}=ve(),xW=oc(),kW=G(),{handleHDBError:VW,hdb_errors:$W}=j();mI.exports=YW;async function YW(e){let t;try{t=vW(e)}catch(u){throw VW(u,u.message,$W.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;BW(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 HW(e.hdb_auth_header,r,s),i=GW(e.schema,e.table),o=await FW.openEnvironment(i,e.table),c=await qW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await xW(e,c)}catch(u){kW.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(YW,"lmdbUpsertRecords")});var TI=T((Yae,SI)=>{"use strict";var qm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};SI.exports=qm});var gI=T((Wae,RI)=>{"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}};RI.exports=Fm});var NI=T((Jae,OI)=>{"use strict";var Gm=Ue(),{getTransactionAuditStorePath:KW}=ve(),zae=TI(),hc=ze(),WW=$(),AI=gI(),QW=require("util").promisify,zW=QW(setTimeout),JW=1e4,XW=100;OI.exports=jW;async function jW(e){let t=KW(e.schema,e.table),r=await Gm.openEnvironment(t,e.table,!0),s=Gm.listDBIs(r);Gm.initializeDBIs(r,hc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new AI;do n=await ZW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await zW(XW);while(n.transactions_deleted>0);return i}a(jW,"deleteAuditLogsBefore");async function ZW(e,t){let r=new AI;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];WW.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>JW)break}return await n,r}catch(s){throw s}}a(ZW,"deleteTransactions")});var yI=T((jae,bI)=>{"use strict";var xm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};bI.exports=xm});var wI=T((tce,II)=>{"use strict";var eQ=vs(),tQ=dc(),ece=yI(),Bs=b(),rQ=$(),km=Ue(),sQ=hi(),nQ=_c(),iQ=cc(),{getSchemaPath:oQ}=ve();II.exports=aQ;async function aQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=sQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await uQ(e),n=oQ(e.schema,e.table),i=await km.openEnvironment(n,e.table);return t===!0&&await cQ(e,i,r.hash_attribute),km.dropDBI(i,e.attribute),s}a(aQ,"lmdbDropAttribute");async function cQ(e,t,r){let s=km.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(cQ,"removeAttributeFromAllObjects");async function uQ(e){let t=new eQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await nQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(rQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new tQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return iQ(i)}a(uQ,"dropAttributeFromSystem")});var PI=T((nce,MI)=>{"use strict";var Vm=Ue(),bo=ze(),sce=mr(),$m=b(),CI=$(),{getTransactionAuditStorePath:lQ}=ve(),_Q=Ao(),h_=To(),dQ=G();MI.exports=fQ;async function fQ(e){let t=lQ(e.schema,e.table),r=await Vm.openEnvironment(t,e.table,!0),s=Vm.listDBIs(r);Vm.initializeDBIs(r,bo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case $m.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return LI(r,e.search_values);case $m.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,hQ(r,e.search_values,n);case $m.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return EQ(r,e.search_values);default:return LI(r)}}a(fQ,"readAuditLog");function LI(e,t=[0,Date.now()]){CI.isEmpty(t[0])&&(t[0]=0),CI.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 h_,n))}a(LI,"searchTransactionsByTimestamp");function EQ(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,UI(e,i))}return Object.fromEntries(r)}a(EQ,"searchTransactionsByUsername");function hQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=_Q.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=UI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);DI(u,"records",r,l,o),DI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(hQ,"searchTransactionsByHashValues");function DI(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 h_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new h_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(DI,"loopRecords");function UI(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 h_,i);r.push(o)}}catch(i){dQ.warn(i)}return r}catch(s){throw s}}a(UI,"batchSearchTransactions")});var BI=T((cce,vI)=>{"use strict";var{getSchemaPath:oce}=ve(),ace=Ue(),{database:mQ}=(fe(),Z(Ce));vI.exports={writeTransaction:pQ};async function pQ(e,t,r){return mQ({database:e,table:t}).transaction(r)}a(pQ,"writeTransaction")});var GI=T((lce,FI)=>{"use strict";var{getSchemaPath:HI}=ve(),qI=Ue();FI.exports={flush:SQ,resetReadTxn:TQ};async function SQ(e,t){return(await qI.openEnvironment(HI(e,t),t.toString())).flushed}a(SQ,"flush");async function TQ(e,t){try{(await qI.openEnvironment(HI(e,t),t.toString())).resetReadTxn()}catch{}}a(TQ,"resetReadTxn")});var $I=T((dce,VI)=>{"use strict";var{Readable:RQ}=require("stream"),{getDatabases:gQ}=(fe(),Z(Ce)),{readSync:AQ,openSync:OQ,createReadStream:xI}=require("fs"),{open:NQ}=require("lmdb"),kI=Ll(),bQ=Ul(),{AUDIT_STORE_OPTIONS:yQ}=(oo(),Z(bO)),{INTERNAL_DBIS_NAME:IQ,AUDIT_STORE_NAME:wQ}=ze();VI.exports=LQ;var Ym=32768,CQ=100;async function LQ(e){let t=e.database||e.schema||"data",r=gQ()[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=NQ({noSync:!0,maxDbs:bQ.MAX_DBS}),f,E=d.openDB(IQ,new kI(!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++%CQ===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 kI(!Q,Q);await S(I,F)}e.include_audit&&await S(wQ,Object.assign({},yQ)),await f;let A=xI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=OQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ym);AQ(c,_,0,Ym),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=xI(null,{fd:c,start:Ym}),f=new RQ.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(LQ,"getBackup")});var WI=T((Ece,KI)=>{"use strict";var DQ=G(),{handleHDBError:UQ}=j(),MQ=_O(),PQ=xl(),vQ=Em(),BQ=ny(),HQ=cc(),qQ=gm(),FQ=Ly(),GQ=Fy(),xQ=_c(),kQ=Wy(),VQ=nI(),$Q=_I(),YQ=fI(),KQ=pI(),WQ=NI(),QQ=Cm(),zQ=wI(),JQ=PI(),XQ=BI(),YI=GI(),jQ=$I(),Km=class extends MQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return kQ(t)}async getDataByHash(t){return await qQ(t)}async searchByHash(t){return await FQ(t)}async getDataByValue(t,r){return await GQ(t,r)}async searchByValue(t){return await xQ(t)}async createSchema(t){return await BQ(t)}async dropSchema(t){return await VQ(t)}async createTable(t,r){return await $Q(t,r)}async dropTable(t){return await QQ(t)}async createAttribute(t){return await PQ(t)}async createRecords(t){return await vQ(t)}async updateRecords(t){return await YQ(t)}async upsertRecords(t){try{return await KQ(t)}catch(r){throw UQ(r,null,null,DQ.ERR,r)}}async deleteRecords(t){return await HQ(t)}async dropAttribute(t){return await zQ(t)}async deleteAuditLogsBefore(t){return await WQ(t)}async readAuditLog(t){return await JQ(t)}writeTransaction(t,r,s){return XQ.writeTransaction(t,r,s)}flush(t,r){return YI.flush(t,r)}resetReadTxn(t,r){return YI.resetReadTxn(t,r)}getBackup(t){return jQ(t)}};KI.exports=Km});var rw={};Qe(rw,{ResourceBridge:()=>zm});function Jm({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 zI(e,t){let r=Hs(e),s=Jm(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&&El(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||ez,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,ZQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JI(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*XI(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,m_,Es,ZI,ew,ms,Wm,Qm,tw,ZQ,ez,tz,rz,QI,zm,sw=Te(()=>{"use strict";jI=D(WI()),m_=D(Oo()),Es=D(j());fe();ZI=D(za()),ew=D(ec()),ms=D(b()),Wm=D(an()),Qm=D(ds()),tw=D($());di();hl();({HDB_ERROR_MSGS:ZQ}=Es.hdb_errors),ez="data",tz=1e4,rz=10,zm=class extends jI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QI=this}async searchByConditions(t){let r=(0,m_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Jm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Wm.signalSchemaChange(new Qm.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Xm(t.schema),Wm.signalSchemaChange(new Qm.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,QI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,ZI.default)(t);(0,ew.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=El(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 JI(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,tw.async_set_timeout)(rz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%tz===0&&await _();return u.length>0&&await _(),n?JI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,m_.default)(t,"hashes");if(r)throw r;return zI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of zI(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,m_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Jm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of XI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return XI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Jm,"getSelect");a(zI,"getRecords");a(Hs,"getTable");a(JI,"createDeleteResponse");a(XI,"groupRecordsInHistory")});var _s=T((Rce,nw)=>{"use strict";var{ResourceBridge:sz}=(sw(),Z(rw)),nz=X();nz.initSync();var p_;function iz(){return p_||(p_=new sz,p_)}a(iz,"getBridge");nw.exports=iz()});var cw=T((Ace,aw)=>{"use strict";var iw=require("lodash"),pc=require("mathjs"),oz=require("jsonata"),ow=$();aw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?iw.uniqWith(e,iw.isEqual):e,searchJSON:az,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 az(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(ow.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ow.isEmpty(this.__ala__.res[r])){let s=oz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(az,"searchJSON")});var lw=T((Nce,uw)=>{"use strict";var rt=require("moment"),jm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;uw.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 Ew=T((bce,fw)=>{"use strict";var cz=require("@turf/area"),uz=require("@turf/length"),lz=require("@turf/circle"),_z=require("@turf/difference"),dz=require("@turf/distance"),fz=require("@turf/boolean-contains"),Ez=require("@turf/boolean-equal"),hz=require("@turf/boolean-disjoint"),mz=require("@turf/helpers"),_w=b(),de=$();fw.exports={geoArea:pz,geoLength:Sz,geoCircle:Tz,geoDifference:Rz,geoDistance:dw,geoNear:gz,geoContains:Az,geoEqual:Oz,geoCrosses:Nz,geoConvert:bz};var Zm="geo1 is required",ep="geo2 is required";function pz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),cz.default(e)}a(pz,"geoArea");function Sz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),uz.default(e,{units:t||"kilometers"})}a(Sz,"geoLength");function Tz(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)),lz.default(e,t,{units:r||"kilometers"})}a(Tz,"geoCircle");function Rz(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)),_z(e,t)}a(Rz,"geoDifference");function dw(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)),dz.default(e,t,{units:r||"kilometers"})}a(dw,"geoDistance");function gz(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 dw(e,t,s)<=r}a(gz,"geoNear");function Az(e,t){if(de.isEmpty(e))throw new Error(Zm);if(de.isEmpty(e))throw new Error(ep);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),fz.default(e,t)}a(Az,"geoContains");function Oz(e,t){if(de.isEmpty(e))throw new Error(Zm);if(de.isEmpty(e))throw new Error(ep);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),Ez.default(e,t)}a(Oz,"geoEqual");function Nz(e,t){if(de.isEmpty(e))throw new Error(Zm);if(de.isEmpty(e))throw new Error(ep);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!hz.default(e,t)}a(Nz,"geoCrosses");function bz(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(_w.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(_w.GEO_CONVERSION_ENUM).join(",")}`);return mz[t](e,r)}a(bz,"geoConvert")});var S_=T((Ice,hw)=>{var Ii=cw(),Nr=lw(),qs=Ew();hw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Nr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Nr.current_time,e.fn.extract=e.fn.EXTRACT=Nr.extract,e.fn.date=e.fn.DATE=Nr.date,e.fn.date_format=e.fn.DATE_FORMAT=Nr.date_format,e.fn.date_add=e.fn.DATE_ADD=Nr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Nr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Nr.date_diff,e.fn.now=e.fn.NOW=Nr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Nr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Nr.get_server_time,e.fn.getdate=e.fn.GETDATE=Nr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Nr.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 Tw=T((wce,Sw)=>{"use strict";var Tc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var yz=S_(),mw=require("clone"),T_=require("recursive-iterator"),re=G(),ue=$(),yo=_s(),Iz=b(),{hdb_errors:wz}=j(),{getDatabases:pw}=(fe(),Z(Ce)),Cz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";yz(Jt);var tp=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 T_(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(mw(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=pw()[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 T_(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 T_(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(Iz.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(mw(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(Cz)>-1&&this.tables.forEach(n=>{let i={columnid:pw()[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 T_(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(wz.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)}};Sw.exports=tp});var Gr=T((Lce,Rw)=>{"use strict";var Lz=uO();Rw.exports={searchByConditions:Uz,searchByHash:Mz,searchByValue:Pz,search:vz};var rp=_s(),{transformReq:sp}=$(),Dz=Tw();async function Uz(e){return sp(e),rp.searchByConditions(e)}a(Uz,"searchByConditions");async function Mz(e){sp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of rp.searchByHash(e))r&&t.push(r);return t}a(Mz,"searchByHash");async function Pz(e){sp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of rp.searchByValue(e))t.push(r);return t}a(Pz,"searchByValue");function vz(e,t){try{let r=new Lz(e);r.validate(),new Dz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(vz,"search")});var R_=T((Uce,gw)=>{"use strict";var Bz=_s();gw.exports={writeTransaction:Hz};function Hz(e,t,r){return Bz.writeTransaction(e,t,r)}a(Hz,"writeTransaction")});var bw=T((vce,Nw)=>{"use strict";var qz=Gr(),Fz=on(),Aw=G(),Gz=xr(),Pce=R_(),xz=require("clone"),ip=require("alasql"),kz=S_(),Ow=require("util"),Vz=Ow.promisify(Fz.getTableSchema),$z=Ow.promisify(qz.search),Yz=b(),np=$();kz(ip);Nw.exports={update:Wz};var Kz="There was a problem performing this update. Please check the logs and try again.";async function Wz({statement:e,hdb_user:t}){let r=await Vz(e.table.databaseid,e.table.tableid),s=Qz(e.columns);np.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=xz(n),c=np.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=ip.parse(u).statements[0],l=await $z(_),d=zz(s,l);return Jz(o,d,t)}a(Wz,"update");function Qz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=ip.compile(`SELECT ${r.expression.toString()} AS [${Yz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Aw.error(t),new Error(Kz)}}a(Qz,"createUpdateRecord");function zz(e,t){return np.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(zz,"buildUpdateRecords");async function Jz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Gz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Aw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Jz,"updateRecords")});var Iw=T((Fce,yw)=>{var Xz=require("alasql"),jz=Gr(),Zz=G(),eJ=_s(),ap=require("util"),op=$(),tJ=b(),rJ=on(),Hce=R_(),qce=xr(),sJ="record",nJ="successfully deleted",iJ=ap.callbackify(uJ),oJ=ap.promisify(jz.search),aJ=ap.promisify(rJ.getTableSchema);yw.exports={convertDelete:iJ};function cJ(e){return`${e.deleted_hashes.length} ${sJ}${e.deleted_hashes.length===1?"":"s"} ${nJ}`}a(cJ,"generateReturnMessage");async function uJ({statement:e,hdb_user:t}){let r=await aJ(e.table.databaseid,e.table.tableid);op.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=op.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Xz.parse(o).statements[0],u={operation:tJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await oJ(c);let _=await eJ.deleteRecords(u);return op.isEmptyOrZeroLength(_.message)&&(_.message=cJ(_)),delete _.txn_time,_}catch(_){throw Zz.error(_),_.hdb_code?_.message:_}}a(uJ,"convertDelete")});var Uw=T((xce,Dw)=>{"use strict";var lJ=pi(),{hdb_errors:ww}=j(),{getDatabases:Cw}=(fe(),Z(Ce));Dw.exports={checkSchemaExists:Lw,checkSchemaTableExists:_J,schema_describe:lJ};async function Lw(e){if(!Cw()[e])return ww.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Lw,"checkSchemaExists");async function _J(e,t){let r=await Lw(e);if(r)return r;if(!Cw()[e][t])return ww.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(_J,"checkSchemaTableExists")});var Rc=T((Vce,dJ)=>{dJ.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 N_={};Qe(N_,{addAnalyticsListener:()=>Oc,recordAction:()=>br,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>fJ});function fJ(e){kw=e}function br(e,t,r,s,n){if(!kw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=O_.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},O_.set(i,o)}g_||EJ()}function kr(e,t,r,s,n){br(!!e,t,r,s,n)}function Oc(e){Yw.push(e)}function EJ(){g_=performance.now(),setTimeout(async()=>{let e=performance.now()-g_;g_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of O_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of Kw){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await Ww()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of Yw)n(t);O_=new Map,wi.parentPort?wi.parentPort.postMessage({type:$w,report:r}):Jw({report:r})},Vw).unref()}async function hJ(e,t=6e4){let r=lp(),s=Qw(),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 Ww()}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 Kw){let At=A*Pe;for(;N<At;)Q=p[Y++],N+=Q.count,Y===1&&N--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-es.value)*(N-At)/Q.count)}let[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,A_.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,A_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Mw,active:E-Pw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Mw=f,Pw=E}async function vw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function lp(){return Bw||(Bw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Qw(){return Hw||(Hw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function SJ(){zw=!0;let e=(0,Ac.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await hJ(Vw,e),await vw(lp(),mJ),await vw(Qw(),pJ)},Math.min(e/2,2147483647)).unref()}function Jw(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(qw+=s.mean*s.count);r.totalBytesProcessed=qw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Fw.get(t))}),Fw.set(t,t.performance.eventLoopUtilization())),r.id=(0,A_.getNextMonotonicTime)(),lp().primaryStore.put(r.id,r),zw||SJ(),TJ&&(Xw=gJ(r))}async function gJ(e){if(await Xw,!Gn){let r=(0,gc.dirname)((0,xw.getLogFilePath)());try{Gn=await(0,cp.open)((0,gc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,cp.open)((0,gc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>RJ){let r=Buffer.alloc(t);await Gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gn.write(r,{position:0}),await Gn.truncate(r.length),t=r.length}await Gn.write(JSON.stringify(e)+`
|
|
8
|
-
`,t)}var
|
|
6
|
+
`)},aG="certificate.pem",cG="privateKey.pem",uG="ca.pem";Qg.exports={CERTIFICATE_VALUES:oG,CERTIFICATE_PEM_NAME:aG,PRIVATEKEY_PEM_NAME:cG,CA_PEM_NAME:uG}});var qe=T((yse,Jg)=>{"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};Jg.exports={validateObject:lG,validateObjectAsync:_G,validateBySchema:dG};function lG(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(lG,"validateObject");async function _G(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(_G,"validateObjectAsync");function dG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(dG,"validateBySchema")});var TE=T((Cse,tA)=>{"use strict";var eA=require("fs-extra"),ce=require("joi"),fG=require("os"),{boolean:Ie,string:Is,number:Ot,array:SE}=ce.types(),{totalmem:Xg}=require("os"),to=require("path"),EG=F(),tl=$(),wse=zg(),jg=b(),hG=qe(),Zg="log",mG="components",pG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",SG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",TG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",RG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",gG="rootPath config parameter is undefined",AG="clustering.enabled config parameter is undefined",ci=Ot.min(0).required(),rl=SE.items({host:Is.required(),port:ci}).empty(null),Zs;tA.exports={configValidator:OG,routesValidator:CG,route_constraints:rl};function OG(e){if(Zs=e.rootPath,tl.isEmpty(Zs))throw gG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(wG),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ce.string().empty(null).default(el),c=ce.custom(bG).empty(null).default(el),u=e.clustering?.enabled;if(tl.isEmpty(u))throw AG;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:Is.optional().empty(null)}).required():_=ce.object({enabled:t,tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ce.object({authentication:ce.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ce.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ce.object({enabled:t}).required(),logging:ce.object({auditAuthEvents:ce.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ce.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ce.object({enabled:Ie.optional(),compress:Ie.optional(),interval:Is.custom(IG).optional().empty(null),maxSize:Is.custom(yG).optional().empty(null),path:Is.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:SE.optional(),headersTimeout:Ot.min(1).optional(),keepAliveTimeout:Ot.min(1).optional(),port:Ot.optional().empty(null),securePort:Ot.optional().empty(null),timeout:Ot.min(1).optional()}).optional(),tls:ce.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ce.object({network:ce.object({port:ci,securePort:ci}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ce.object({compressionThreshold:Ot.optional(),cors:Ie.optional(),corsAccessList:SE.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(OG,"configValidator");function NG(e){return eA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(NG,"doesPathExist");function bG(e,t){ce.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=NG(e);if(r)return t.message(r)}a(bG,"validatePath");function yG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(pG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(TG):e}a(yG,"validateRotationMaxSize");function IG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(SG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(RG):e}a(IG,"validateRotationInterval");function wG(e,t){let r=t.state.path.join("."),s=fG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Xg();return i=Math.round(Math.min(i,Xg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),EG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(wG,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(Zs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return to.join(Zs,mG);case"logging.root":return to.join(Zs,Zg);case"clustering.leafServer.streams.path":return to.join(Zs,"clustering","leaf");case"storage.path":let s=to.join(Zs,jg.LEGACY_DATABASES_DIR_NAME);return eA.existsSync(s)?s:to.join(Zs,jg.DATABASES_DIR_NAME);case"logging.rotation.path":return to.join(Zs,Zg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function CG(e){let t=ce.object({routes:rl});return hG.validateBySchema({routes:e},t)}a(CG,"routesValidator")});var ro={};Qe(ro,{server:()=>lt});var rA,lt,Pr=Te(()=>{rA=require("../../index"),lt={};(0,rA._assignPackageExport)("server",lt)});var hr=T((Use,_A)=>{"use strict";var Er=b(),pt=$(),_t=F(),{configValidator:LG,routesValidator:sA}=TE(),Kt=require("fs-extra"),DG=require("yaml"),rs=require("path"),UG=require("is-number"),iA=require("properties-reader"),MG=require("lodash"),{handleHDBError:PG}=j(),{HTTP_STATUS_CODES:vG,HDB_ERROR_MSGS:sl}=dr(),Dse=require("minimist"),{server:BG}=(Pr(),Z(ro)),{DATABASES_PARAM_CONFIG:wa,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,HG="Unable to get config value because config is uninitialized",FG="Config successfully initialized",qG="Error backing up config file",GG="Empty parameter sent to getConfigValue",oA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),xG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",nA={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,dt,il;_A.exports={createConfigFile:kG,getDefaultConfig:VG,getConfigValue:cA,initConfig:gE,flattenConfig:so,updateConfigValue:uA,updateConfigObject:YG,getConfiguration:QG,setConfiguration:zG,readConfigFile:OE,getClusteringRoutes:JG,initOldConfig:lA,getConfigFromFile:XG,getConfigFilePath:ui,addConfig:jG,deleteConfigFromFile:ZG,getConfigObj:ex};function kG(e){let t=Un(oA);nl=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("_"),_=RE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){_t.error(l)}}}r&&aA(t,r),AE(t);let s=t.toJSON();dt=so(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Kt.createFileSync(i),Kt.writeFileSync(i,String(t)),_t.trace(`Config file written to ${i}`)}a(kG,"createConfigFile");function aA(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){_t.error("Error parsing schemas CLI/env config arguments",s)}}a(aA,"setSchemasConfig");function VG(e){if(nl===void 0){let r=Un(oA);nl=so(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(VG,"getDefaultConfig");function cA(e){if(e==null){_t.error(GG);return}if(dt===void 0){_t.trace(HG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return dt[t.toLowerCase()]}a(cA,"getConfigValue");function ui(e=pt.getPropsFilePath()){let t=pt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):iA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ui,"getConfigFilePath");function gE(e=!1){if(dt===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 _t.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{lA(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){_t.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 _t.error(i),new Error(`Error reading HarperDB config file at ${r}`)}$G(s,r),AE(s);let n=s.toJSON();if(BG.config=n,dt=so(n),dt.logging_rotation_rotate)for(let i in nA)dt[i]&&_t.error(`Config ${nA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_t.trace(FG)}}a(gE,"initConfig");function $G(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&&(_t.trace("Updating config file with missing config params"),Kt.writeFileSync(t,String(e)))}a($G,"checkForUpdatedConfig");function AE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=LG(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(AE,"validateConfig");function YG(e,t){dt===void 0&&(dt={});let r=ss[e.toLowerCase()];if(r===void 0){_t.trace(`Unable to update config object because config param '${e}' does not exist`);return}dt[r.toLowerCase()]=t}a(YG,"updateConfigObject");function uA(e,t,r=void 0,s=!1,n=!1,i=!1){dt===void 0&&gE();let o=cA(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=RE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===fr.HTTP_SECUREPORT&&r[f]===dt[fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===dt[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=RE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){_t.error(A)}}}_&&aA(u,_),AE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&KG(c,l),Kt.writeFileSync(d,String(u)),n&&(dt=so(u.toJSON())),_t.trace(`Config parameter: ${e} updated with value: ${t}`)}a(uA,"updateConfigValue");function KG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Kt.copySync(e,r),_t.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_t.error(qG),_t.error(r)}}a(KG,"backupConfigFile");var WG=["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)),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])&&!WG.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 RE(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(UG(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(RE,"castConfigValue");function QG(){let e=pt.getPropsFilePath(),t=ui(e);return Un(t).toJSON()}a(QG,"getConfiguration");async function zG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return uA(void 0,void 0,n,!0),xG}catch(i){throw typeof i=="string"||i instanceof String?PG(i,i,vG.BAD_REQUEST,void 0,void 0,!0):i}}a(zG,"setConfiguration");function OE(){let e=pt.getPropsFilePath();try{Kt.accessSync(e,Kt.constants.F_OK|Kt.constants.R_OK)}catch(s){if(!pt.noBootFile())throw _t.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ui(e);return Un(t).toJSON()}a(OE,"readConfigFile");function Un(e){return DG.parseDocument(Kt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Un,"parseYamlDoc");function JG(){let e=OE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=pt.isEmptyOrZeroLength(t)?[]:t;let r=sA(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=pt.isEmptyOrZeroLength(s)?[]:s;let n=sA(s);if(n)throw sl.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 sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JG,"getClusteringRoutes");function lA(e){let t=iA(e);dt={};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?dt[n]=rs.dirname(s):dt[n]=s}return dt}a(lA,"initOldConfig");function XG(e){let t=OE();return MG.get(t,e.replaceAll("_","."))}a(XG,"getConfigFromFile");async function jG(e,t){let r=Un(ui());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Kt.writeFile(ui(),String(r))}a(jG,"addConfig");function ZG(e){let t=ui(pt.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(ZG,"deleteConfigFromFile");function ex(){return il||(gE(),il)}a(ex,"getConfigObj")});var X=T((Pse,EA)=>{"use strict";var NE=require("fs-extra"),ns=require("path"),dA=require("os"),tx=require("properties-reader"),Ca=F(),li=$(),ee=b(),ol=hr(),rx="Error initializing environment manager",al="BOOT_PROPS_FILE_PATH",fA=!1,sx={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},en={};EA.exports={BOOT_PROPS_FILE_PATH:al,getHdbBasePath:nx,setHdbBasePath:ix,get:ox,initSync:cx,setProperty:he,initTestEnvironment:ux};function nx(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nx,"getHdbBasePath");function ix(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(ix,"setHdbBasePath");function ox(e){let t=ol.getConfigValue(e);return t===void 0?en[e]:t}a(ox,"get");function he(e,t){sx[e]&&(en[e]=t),ol.updateConfigObject(e,t)}a(he,"setProperty");function ax(){let e;try{e=li.getPropsFilePath(),NE.accessSync(e,NE.constants.F_OK|NE.constants.R_OK),fA=!0;let t=tx(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[al]=e,!0}catch{return Ca.trace(`Environment manager found no properties file at ${e}`),!1}}a(ax,"doesPropFileExist");function cx(e=!1){try{(fA||ax()||li.noBootFile())&&(ol.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=ol.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ca.error(rx),Ca.error(t),console.error(t),process.exit(1)}}a(cx,"initSync");function ux(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ns.join(__dirname,"../../","unitTests");en[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,dA.userInfo()?dA.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`;Ca.fatal(r),Ca.error(t)}}a(ux,"initTestEnvironment")});var ve=T((Bse,gA)=>{"use strict";var Pa=b(),lx=$(),Wt=X(),va=require("path"),_x=require("minimist"),hA=require("fs-extra"),mA=require("lodash");Wt.initSync();var{CONFIG_PARAMS:Mn,DATABASES_PARAM_CONFIG:La,SYSTEM_SCHEMA_NAME:cl}=Pa,Da,Ua,Ma;function pA(){if(Da!==void 0)return Da;if(Wt.getHdbBasePath()!==void 0)return Da=Wt.get(Mn.STORAGE_PATH)||va.join(Wt.getHdbBasePath(),Pa.DATABASES_DIR_NAME),Da}a(pA,"getBaseSchemaPath");function SA(){if(Ua!==void 0)return Ua;if(Wt.getHdbBasePath()!==void 0)return Ua=RA(cl),Ua}a(SA,"getSystemSchemaPath");function TA(){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(TA,"getTransactionAuditStoreBasePath");function dx(e,t){let r=Wt.get(Mn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||va.join(TA(),e.toString())}a(dx,"getTransactionAuditStorePath");function RA(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(pA(),e)}a(RA,"getSchemaPath");function fx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,_x(process.argv));let s=r[Mn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!lx.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]?.[La.PATH];if(_)return mA.set(u,[cl,La.TABLES,t,La.PATH],_),Wt.setProperty(Mn.DATABASES,u),_;let l=c?.[La.PATH];if(l)return mA.set(u,[cl,La.PATH],l),Wt.setProperty(Mn.DATABASES,u),l}}let n=r[Mn.STORAGE_PATH.toUpperCase()];if(n){if(!hA.pathExistsSync(n))throw new Error(n+" does not exist");let i=va.join(n,e);return hA.mkdirsSync(i),Wt.setProperty(Mn.STORAGE_PATH,n),i}return SA()}a(fx,"initSystemSchemaPaths");function Ex(){Da=void 0,Ua=void 0,Ma=void 0}a(Ex,"resetPaths");gA.exports={getBaseSchemaPath:pA,getSystemSchemaPath:SA,getTransactionAuditStorePath:dx,getTransactionAuditStoreBasePath:TA,getSchemaPath:RA,initSystemSchemaPaths:fx,resetPaths:Ex}});var mr=T((Gse,yA)=>{"use strict";var hx=dr().LMDB_ERRORS_ENUM,Fse=require("lmdb"),mx=ze(),qse=require("buffer").Buffer,{OVERFLOW_MARKER:AA,MAX_SEARCH_KEY_LENGTH:ul}=mx,OA=["number","string","symbol","boolean","bigint"];function px(e){if(e=e?.primaryStore||e,!e)throw new Error(hx.ENV_REQUIRED)}a(px,"validateEnv");function Sx(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(Sx,"stringifyData");function Tx(e){return e instanceof Date?e.valueOf():e}a(Tx,"convertKeyValueToWrite");function Rx(e){if(e==null)return;if(OA.includes(typeof e))return e.length>ul?[e.slice(0,ul)+AA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(OA.includes(typeof n))n.length>ul?t.push(n.slice(0,ul)+AA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Rx,"getIndexedValues");var ll=0,NA=0;function bA(){NA=Date.now()-performance.now()}a(bA,"adjustStartTime");bA();var gx=6e4;setInterval(bA,gx).unref();function Ax(){let e=performance.now()+NA;return e>ll?(ll=e,e):(ll+=488e-6,ll)}a(Ax,"getNextMonotonicTime");yA.exports={validateEnv:px,stringifyData:Sx,convertKeyValueToWrite:Tx,getNextMonotonicTime:Ax,getIndexedValues:Rx}});var IA,is,bE,Ba=Te(()=>{IA=require("events"),is=class extends IA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new bE;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)}},bE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function vr(e){return e[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}`);vr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a number, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a boolean, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new os.ClientError(`${c} must be a Date, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);vr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){vr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be an object, attempt to assign ${l}`);vr(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=wA(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");vr(this)[o]=c}),i("deleteProperty",function(o){vr(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 wA(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=wA(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 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 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(vr,"getChanges");a(El,"assignTrackedAccessors");a(wA,"trackObject");_l=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};El(_l,{});a(hl,"collapseData");a(Ha,"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 yx(){bx=setInterval(function(){for(let e of yE)if(e.stale){let t=e[me]?.url;CA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Nx).unref()}var IE,CA,Ox,yE,di,pl,Nx,bx,wE=Te(()=>{IE=D(mr()),CA=D(F());as();Ox=100,yE=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(),yE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(yE.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,IE.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<Ox>>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,IE.getNextMonotonicTime)())}getReadTxn(){}},Nx=3e4;a(yx,"startMonitoringTxns");yx()});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 LA,fi=Te(()=>{LA=require("../../index");as();wE();a(Ge,"transaction");(0,LA._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 LE(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(MA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case St.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new 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=DE(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:UA.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 DE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),MA[t]||t){case St.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case St.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case St.SEARCH_TYPES.ENDS_WITH:case St.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case St.SEARCH_TYPES.STARTS_WITH:case St.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case St.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case St.SEARCH_TYPES.GREATER_THAN:case St.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case St.SEARCH_TYPES.GREATER_THAN_EQUAL:case St.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case St.SEARCH_TYPES.LESS_THAN:case"lt":case St.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case St.SEARCH_TYPES.LESS_THAN_EQUAL:case St.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new no.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Sl(e){if(!e)return;let t=new CE,r,s,n,i,o,c=DA;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=Ix[_],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?wx:DA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var no,St,Cs,UA,Ix,MA,DA,wx,CE,Tl=Te(()=>{no=D(j()),St=D(ze()),Cs=require("ordered-binary"),UA=require("lmdb"),Ix={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(LE,"idsForCondition");MA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(DE,"filterByType");a(ws,"attributeComparator");DA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,wx=/([^&|*=]+)([&|*=]*)/g;a(Sl,"parseQuery");CE=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 PE={};Qe(PE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>qA,snake_case:()=>Lx});function Lx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function PA(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 ME(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Br(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[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 Hr(e,t){let r=new FA.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 UE(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 vA(e){if(typeof e=="string")return t=>UE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=UE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=UE(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 BA,HA,FA,me,we,cs,qA,Re,Cx,Nt,Rl,ME,as=Te(()=>{BA=require("crypto");Ba();HA=require("../../index"),FA=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"),Cx={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=Br(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=vA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Br(function(t,r,s,n){if(Array.isArray(n)&&t[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):Hr(t,"put")},{hasContent:!0,type:"update"});static delete=Br(function(t,r,s,n){return t.delete?t.delete(r):Hr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,BA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Hr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Br(function(t,r,s,n){return t.invalidate?t.invalidate(r):Hr(t,"delete")},{hasContent:!1,type:"update"});static post=Br(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Br(function(t,r,s,n){return t.connect?t.connect(n,r):Hr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Br(function(t,r,s,n){return t.subscribe?t.subscribe(r):Hr(t,"subscribe")},{type:"read"});static publish=Br(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):Hr(t,"publish")},{hasContent:!0,type:"create"});static search=Br(function(t,r,s,n){let i=t.search?t.search(r):Hr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=vA(o);return i.map(c)}return i},{type:"read"});static query=Br(function(t,r,s,n){return t.search?t.search(n,r):Hr(t,"search")},{hasContent:!0,type:"read"});static copy=Br(function(t,r,s,n){return t.copy?t.copy(n,r):Hr(t,"copy")},{type:"create"});static move=Br(function(t,r,s,n){return t.move?t.move(n,r):Hr(t,"move")},{type:"delete"});post(t){if(this[cs])return this.constructor.create(this[we],t,this[me]);Hr(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&&Cx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:PA(t,this)}}return PA(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,HA._assignPackageExport)("Resource",Nt);a(Lx,"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(PA,"pathToId");ME=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Br,"transactional");a(Hr,"missingMethod");a(UE,"selectFromObject");a(vA,"transformForSelect")});var BE={};Qe(BE,{loadGQLSchema:()=>Mx,start:()=>vE,startOnMainThread:()=>Ux});function vE({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):Dx.includes(S.type)||(0,GA.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,GA,Dx,Ux,Mx,xA=Te(()=>{gl=require("path");fe();GA=D(Ze()),Dx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(vE,"start");Ux=vE,Mx=vE({ensureTable:et}).handleFile});async function Al(e){return Px?(Fa||(Fa=vx(Hx)),(await(await Fa).import(e)).namespace):import(e)}async function vx(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:Bx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,VA.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,kA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Fa}function Bx(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 Hx(){return{Resource:Nt,tables:pr}}var kA,VA,Px,Fa,HE=Te(()=>{as();fe();kA=require("fs/promises"),VA=require("path"),Px=!1;a(Al,"secureImport");a(vx,"getCompartment");a(Bx,"secureOnlyFetch");a(Hx,"getGlobalVars")});var qE={};Qe(qE,{handleFile:()=>Fx});async function Fx(e,t,r,s){let n=new Map,i=(0,$A.pathToFileURL)(r).toString(),o=await Al(i);u(o.default)&&s.set((0,FE.dirname)(t),o.default),c(o,(0,FE.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 $A,FE,YA=Te(()=>{$A=require("url");HE();FE=require("path");a(Fx,"handleFile")});var xE={};Qe(xE,{start:()=>qx});function qx({resources:e}){e.set("login",GE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var GE,KA=Te(()=>{as();a(qx,"start");GE=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 VE=T((Sne,zA)=>{"use strict";var{Readable:Gx}=require("stream"),xx=1e4;zA.exports={streamAsJSON(e){return new kE({value:e})}};var kE=class extends Gx{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),WA)}catch(n){yield WA(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);QA(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>xx?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 QA(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 WA(e){return console.error(e),JSON.stringify(e.toString())}a(WA,"handleError");function QA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(QA,"when")});var cO=T((gne,aO)=>{"use strict";var $E=require("recursive-iterator"),kx=require("alasql"),YE=require("clone"),JA=$(),{handleHDBError:XA,hdb_errors:Vx}=j(),{HDB_ERROR_MSGS:jA,HTTP_STATUS_CODES:ZA}=Vx,{getDatabases:$x}=(fe(),Z(Ce)),Yx=["DISTINCT_ARRAY"],eO=Symbol("validateTables"),KE=Symbol("validateTable"),Rne=Symbol("getAllColumns"),tO=Symbol("validateAllColumns"),Ol=Symbol("findColumn"),rO=Symbol("validateOrderBy"),qa=Symbol("validateSegment"),WE=Symbol("validateColumn"),sO=Symbol("setColumnsForTable"),nO=Symbol("checkColumnsForAsterisk"),iO=Symbol("validateGroupBy"),oO=Symbol("hasColumns"),QE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eO](),this[nO](),this[tO]()}[eO](){if(this[oO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[KE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[KE](t.table)})}}[oO](){let t=!1,r=new $E(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[KE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=$x();if(!r[t.databaseid])throw XA(new Error,jA.SCHEMA_NOT_FOUND(t.databaseid),ZA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XA(new Error,jA.TABLE_NOT_FOUND(t.databaseid,t.tableid),ZA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=YE(n);i.table=YE(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)}[nO](){let t=new $E(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sO](r.tableid)}[sO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new kx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tO](){this[qa](this.statement.columns,!1),this[qa](this.statement.joins,!1),this[qa](this.statement.where,!1),this[iO](this.statement.group,!1),this[qa](this.statement.order,!0)}[qa](t,r){if(!t)return;let s=new $E(t),n=[];for(let{node:i,path:o}of s)!JA.isEmpty(i)&&!JA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rO](i):n.push(this[WE](i)));return n}[iO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Yx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=YE(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`}[rO](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[WE](t)}[WE](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]}};aO.exports=QE});var lO=T((One,uO)=>{"use strict";var zE=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")}};uO.exports=zE});var dO=T((bne,_O)=>{"use strict";var JE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_O.exports=JE});var NO={};Qe(NO,{AUDIT_STORE_OPTIONS:()=>AO,createAuditEntry:()=>yl,openAuditStore:()=>bl,readAuditEntry:()=>Sr,setAuditRetention:()=>Kx,transactionKeyEncoder:()=>gO});function bl(e){let t=e.auditStore=e.openDB(pO.AUDIT_STORE_NAME,AO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,TO.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()-XE})){if((n[0]&15)===ZE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},XE/10).unref())}),t}function Kx(e){clearTimeout(Ga),Ga=null,XE=e}function yl(e,t,r,s,n,i,o){let c=OO[i],u=1;s&&(s>1?io.setFloat64(0,s):Fr.set(rh),u=9),f(0),f(t),d(r),io.setFloat64(u,e),u+=8,n?d(n):Fr[u++]=0,Fr[s?8:0]=c;let l=Fr.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,Fr,u);let p=u-h-1;p>127?p>16383?(th.error("Key or username was too large for audit entry",E),u=h+1,Fr[h]=0):(Fr.copyWithin(h+2,h+1,u),io.setUint16(h,p|32768),u++):Fr[h]=p}function f(E){E<128?Fr[u++]=E:E<16384?(io.setUint16(u,E|32768),u+=2):E<1056964608?(io.setUint32(u,E|3221225472),u+=4):(Fr[u]=255,io.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new eh(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:OO[s&7],tableId:i,get recordId(){return mO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?mO(e,l,d):void 0},getValue(f){return s&jE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return th.error("Reading audit entry error",e),{}}}function mO(e,t,r){let s=e.subarray(t,r);return(0,oo.readKey)(s,0,r-t)}var oo,Nl,pO,SO,TO,RO,th,Fr,io,gO,AO,XE,Ga,jE,fO,ZE,EO,hO,OO,eh,ao=Te(()=>{oo=require("ordered-binary"),Nl=D(X()),pO=D(ze()),SO=D(b()),TO=D(Ze()),RO=D($());ka();th=D(F());(0,Nl.initSync)();Fr=Buffer.alloc(1024),io=new DataView(Fr.buffer,Fr.byteOffset,1024),gO={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)}},AO={encoding:"binary",keyEncoder:gO},XE=(0,RO.convertToMS)((0,Nl.get)(SO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Ga=null;a(bl,"openAuditStore");a(Kx,"setAuditRetention");jE=16,fO=1,ZE=2,EO=3,hO=4,OO={put:fO|jE,[fO]:"put",delete:ZE,[ZE]:"delete",message:EO|jE,[EO]:"message",invalidate:hO,[hO]:"invalidate"};a(yl,"createAuditEntry");a(Sr,"readAuditEntry");eh=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(mO,"readKeySafely")});var LO={};Qe(LO,{HAS_EXPIRATION:()=>ch,LAST_TIMESTAMP_PLACEHOLDER:()=>xa,LOCAL_TIMESTAMP:()=>Wx,METADATA:()=>Va,NO_TIMESTAMP:()=>sh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>rh,RecordEncoder:()=>ah,TIMESTAMP_ASSIGN_LAST:()=>zx,TIMESTAMP_ASSIGN_NEW:()=>IO,TIMESTAMP_ASSIGN_PREVIOUS:()=>wO,TIMESTAMP_PLACEHOLDER:()=>Il,TIMESTAMP_RECORD_PREVIOUS:()=>nh,getUpdateRecord:()=>uh,handleLocalTimeForGets:()=>Ll});function CO(){return uo[0]=uo[0]^64,Qx.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?.[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=Jx.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=CO())}}}}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 uh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?co=i?.localTime?nh|wO:sh:co=u?i?.localTime?nh|16384:IO|16384:sh,l>0&&(c|=ch),Cl=c,oh=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=ih,A.timestampOffset=ih.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(xa,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 bO,yO,Il,xa,rh,Wx,Va,uo,Qx,sh,IO,zx,wO,nh,ch,ih,wl,co,Cl,oh,ah,Jx,Ei,ka=Te(()=>{bO=require("msgpackr");ao();yO=D(F()),Il=new Uint8Array([1,1,1,1,4,64,0,0]),xa=new Uint8Array([1,1,1,1,1,0,0,0]),rh=new Uint8Array([1,1,1,1,3,64,0,0]),Wx=Symbol("local-timestamp"),Va=Symbol("metadata"),uo=new Uint8Array(8),Qx=new DataView(uo.buffer,0,8),sh=0,IO=0,zx=1,wO=3,nh=4,ch=16,co=0,Cl=-1,oh=0,ah=class extends bO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(co||Cl>=0){let i=0,o=co;o&&(i+=8,co=0);let c=Cl,u=oh;c>=0&&(i+=2,Cl=-1,u&&(i+=8,oh=0));let _=ih=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(uo,0,c),c+=8;else for(let d=0;d<8;d++)uo[d]=t[c++];u=CO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&ch&&(_=(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(CO,"getTimestamp");Jx=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&&yO.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(uh,"getUpdateRecord")});var Dl=T((Dne,DO)=>{"use strict";var _h=X(),dh=b(),{RecordEncoder:Xx}=(ka(),Z(LO));_h.initSync();var jx=_h.get(dh.CONFIG_PARAMS.STORAGE_COMPRESSION),Zx=_h.get(dh.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ek=dh.UPDATES_PROPERTY,lh=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=Zx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Xx},this.alwaysLazyProperty=s=>s===ek)}};DO.exports=lh});var Ml=T((Mne,MO)=>{"use strict";var lo=X(),$a=b();lo.initSync();var tk=lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||lo.get($a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",UO=lo.get($a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),rk=lo.get($a.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=tk,this.noFSAccess=!0,UO!==void 0&&(this.overlappingSync=UO),this.noReadAhead=rk}};MO.exports=Ul;Ul.MAX_DBS=1e4});var Ue=T((vne,VO)=>{"use strict";var Eh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Pl=mr(),BO=F(),Qt=dr().LMDB_ERRORS_ENUM,vl=dO(),hh=Dl(),HO=Ml(),Pn=ze(),PO=b(),{table:sk,resetDatabases:nk}=(fe(),Z(Ce)),vO=X(),ls=Pn.INTERNAL_DBIS_NAME,FO=Pn.DBI_DEFINITION_NAME,ik="data.mdb",ok="lock.mdb",Ya=".mdb",ak="-lock",fh=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 Eh.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 mh(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,ik),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(mh,"validateEnvironmentPath");function Hl(e,t){if(Pl.validateEnv(e),t===void 0)throw new Error(Qt.DBI_NAME_REQUIRED)}a(Hl,"validateEnvDBIName");async function ck(e,t,r=!1,s=!1){Bl(e,t);let n=Tr.basename(e);t=t.toString();let i=vO.get(PO.CONFIG_PARAMS.DATABASES);i||vO.setProperty(PO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await mh(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 HO(s?c:c+Ya,!1),_=Eh.open(u);_.dbis=Object.create(null);let l=new hh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=ph(e,t,r);return _[Pn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ck,"createEnvironment");async function uk(e,t,r,s=!0){Bl(e,t),t=t.toString();let n=Tr.join(e,t);return sk({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uk,"copyEnvironment");async function qO(e,t,r=!1){Bl(e,t),t=t.toString();let s=ph(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 mh(e,t),i=Tr.join(e,t+Ya),o=n!=i,c=new HO(n,o),u=Eh.open(c);u.dbis=Object.create(null);let _=xO(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 lk(e,t,r=!1){Bl(e,t),t=t.toString();let s=Tr.join(e,t+Ya),n=await mh(e,t);if(global.lmdb_map!==void 0){let i=ph(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await GO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+ak:Tr.join(Tr.dirname(n),ok))}a(lk,"deleteEnvironment");async function GO(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(GO,"closeEnvironment");function ph(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(ph,"getCachedEnvironmentName");function _k(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{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(_k,"listDBIDefinitions");function xO(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(xO,"listDBIs");function dk(e,t){let s=qr(e,ls).getEntry(t),n=new vl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{BO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(dk,"getDBIDefinition");function kO(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 hh(r,s===!0),o=e.openDB(t,i),c=new vl(r===!0,s);return o[FO]=c,qr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(kO,"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=dk(e,t):r=new vl,r===void 0)throw new Error(Qt.DBI_DOES_NOT_EXIST);let s;try{let n=new hh(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[FO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function fk(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(fk,"statDBI");async function Ek(e,t){try{let r=Tr.join(e,t+Ya);return(await us.stat(r)).size}catch{throw new Error(Qt.INVALID_ENVIRONMENT)}}a(Ek,"environmentDataSize");function hk(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(hk,"dropDBI");function mk(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)kO(e,i,i!==t,i===t),s=!0;else throw o}}s&&nk()}a(mk,"initializeDBIs");VO.exports={openDBI:qr,openEnvironment:qO,createEnvironment:ck,listDBIs:xO,listDBIDefinitions:_k,createDBI:kO,dropDBI:hk,statDBI:fk,deleteEnvironment:lk,initializeDBIs:mk,TransactionCursor:fh,environmentDataSize:Ek,copyEnvironment:uk,closeEnvironment:GO}});var YO=T((Hne,$O)=>{"use strict";var Sh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};$O.exports=Sh});var WO=T((qne,KO)=>{"use strict";var Th=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}};KO.exports=Th});var zO=T((xne,QO)=>{"use strict";var Rh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};QO.exports=Rh});var _o=T((Kne,jO)=>{"use strict";var pk=Ue(),Sk=YO(),Tk=WO(),Rk=zO(),Ls=mr(),Ka=dr().LMDB_ERRORS_ENUM,gk=ze(),tn=b(),Ak=$(),Ok=require("uuid"),Vne=require("lmdb"),{handleHDBError:Nk,hdb_errors:bk}=j(),{OVERFLOW_MARKER:$ne,MAX_SEARCH_KEY_LENGTH:Yne}=gk,JO=X();JO.initSync();var Fl=JO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,hi=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function yk(e,t,r,s,n=Ls.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new Sk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];XO(_,!0,n);let l=Ik(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Oh(o,c,s,i,n)}a(yk,"insertRecords");function Ik(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){Fl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Fl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[hi])})}a(Ik,"insertRecord");function wk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(wk,"removeSkippedRecords");function XO(e,t,r){let s=r>0;(s||!Number.isInteger(e[hi]))&&(e[hi]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[gh]))&&(e[gh]=r||Ls.getNextMonotonicTime()):delete e[gh]}a(XO,"setTimestamps");function Ah(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),pk.initializeDBIs(e,t,r)}a(Ah,"initializeTransaction");async function Ck(e,t,r,s,n=Ls.getNextMonotonicTime()){bh(e,t,r,s),Ah(e,t,r);let i=new Tk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Nh(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Oh(c,u,s,i,n,o)}a(Ck,"updateRecords");async function Lk(e,t,r,s,n=Ls.getNextMonotonicTime()){try{bh(e,t,r,s)}catch(u){throw Nk(u,u.message,bk.HTTP_STATUS_CODES.BAD_REQUEST)}Ah(e,t,r);let i=new Rk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Ak.isEmpty(_[t])?(l=Ok.v4(),_[t]=l):l=_[t];let d=Nh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Oh(o,c,s,i,n)}a(Lk,"upsertRecords");async function Oh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),wk(r,i),s}a(Oh,"finalizeWrite");function Nh(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(XO(r,!l,o),Number.isInteger(r[hi])&&_[hi]>r[hi])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){Fl&&S.prefetch(I.map(N=>({key:N,value:s})),ql);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){Fl&&S.prefetch(I.map(N=>({key:N,value:s})),ql);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:Nh(e,t,r,s,n,i,o))}a(Nh,"updateUpsertRecord");function Dk(e,t,r){if(Ls.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(Dk,"validateBasic");function bh(e,t,r,s){if(Dk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ka.RECORDS_REQUIRED):new Error(Ka.RECORDS_MUST_BE_ARRAY)}a(bh,"validateWrite");function ql(){}a(ql,"noop");jO.exports={insertRecords:yk,updateRecords:Ck,upsertRecords:Lk}});var mi=T((Qne,Uk)=>{Uk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=T((zne,tN)=>{"use strict";var eN=$(),ZO=b(),fo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),vn={schema_format:{pattern:fo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Mk=rn.alternatives(rn.string().min(1).max(vn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),rn.number()).required(),Pk=rn.alternatives(rn.string().min(1).max(vn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),rn.number()),vk=rn.alternatives(rn.string().min(1).max(vn.schema_length.maximum).pattern(fo).messages({"string.pattern.base":"{:#label} "+vn.schema_format.message}),rn.number()).required();function Bk(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`:fo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Bk,"checkValidTable");function Hk(e,t){return eN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Hk,"validateSchemaExists");function Fk(e,t){let r=t.state.ancestors[0].schema;return eN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Fk,"validateTableExists");function qk(e,t){return e.toLowerCase()===ZO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${ZO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(qk,"validateSchemaName");tN.exports={common_validators:vn,schema_regex:fo,hdb_schema_table:Mk,validateSchemaExists:Hk,validateTableExists:Fk,validateSchemaName:qk,checkValidTable:Bk,hdb_database:Pk,hdb_table:vk}});var Gl=T((Xne,rN)=>{var{common_validators:Us}=Ds(),Qa=qe(),Wa="is required",tt={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function 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 Gk(e){return e=za(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(Gk,"schema_object");function xk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a(xk,"table_object");function kk(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,Qa.validateObject(e,tt)}a(kk,"create_table_object");function Vk(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(Vk,"attribute_object");function $k(e){return e=za(e),tt.table.presence={message:Wa},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Qa.validateObject(e,tt)}a($k,"describe_table");function Yk(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(Yk,"validateTableResidence");rN.exports={schema_object:Gk,create_table_object:kk,table_object:xk,attribute_object:Vk,describe_table:$k,validateTableResidence:Yk}});var nN=T((Zne,sN)=>{"use strict";var Kk=require("uuid"),yh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Kk.v4(),this.schema_table=`${this.schema}.${this.table}`}};sN.exports=yh});var xl=T((tie,iN)=>{"use strict";var Wk=nN(),Ih=class extends Wk{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}};iN.exports=Ih});var aN=T((sie,oN)=>{"use strict";oN.exports=zk;var Qk="inserted";function zk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Qk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(zk,"returnObject")});var kl=T((iie,dN)=>{"use strict";var Jk=b(),wh=Ue(),Xk=_o(),{getSystemSchemaPath:jk,getSchemaPath:Zk}=ve(),eV=mi(),tV=Gl(),rV=xl(),sV=aN(),{handleHDBError:cN,hdb_errors:lN}=j(),uN=$(),{HTTP_STATUS_CODES:nV}=lN,Ch=eV.hdb_attribute,_N=[];for(let e=0;e<Ch.attributes.length;e++)_N.push(Ch.attributes[e].attribute);var iV="inserted";dN.exports=oV;async function oV(e){let t=tV.attribute_object(e);if(t)throw cN(new Error,t.message,lN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&uN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw cN(new Error,r,nV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=uN.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 rV(e.schema,e.table,e.attribute,e.id);try{let i=await wh.openEnvironment(Zk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);wh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await wh.openEnvironment(jk(),Jk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Xk.insertRecords(o,Ch.hash_attribute,_N,[n]);return sV(iV,c,{records:[n]},u)}catch(i){throw i}}a(oV,"lmdbCreateAttribute")});var Dh=T((aie,EN)=>{var{hdb_table:aV,hdb_database:fN}=Ds(),cV=qe(),Lh=require("joi"),uV={undefined:"undefined",null:"null"},lV=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||uV[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"),_V=Lh.object({database:fN,schema:fN,table:aV,records:Lh.array().items(Lh.object().custom(lV)).required()});EN.exports=function(e){return cV.validateBySchema(e,_V)}});var Ja=T((lie,mN)=>{"use strict";var sn=$(),hN=F(),uie=Dh(),{getDatabases:dV}=(fe(),Z(Ce)),{ClientError:pi}=j();mN.exports=fV;function fV(e){if(sn.isEmpty(e))throw new pi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new pi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new pi("invalid table specified.");if(!Array.isArray(e.records))throw new pi("records must be an array");let t=dV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new pi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw hN.error("a valid hash attribute must be provided with update record:",o),new pi("a valid hash attribute must be provided with update record, check log for more info");if(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw hN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new pi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(fV,"insertUpdateValidate")});var Xa=T((die,pN)=>{"use strict";var EV=b().OPERATIONS_ENUM,Uh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=EV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};pN.exports=Uh});var tc=T((hie,SN)=>{"use strict";var Eie=Xa(),Vl=b(),Ph=$(),Mh=F(),hV=require("uuid"),{handleHDBError:ja,hdb_errors:mV}=j(),{HDB_ERROR_MSGS:Za,HTTP_STATUS_CODES:ec}=mV;SN.exports=pV;function pV(e,t,r){for(let n=0;n<t.length;n++)SV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];TV(i,r,e.operation)}}a(pV,"processRows");function SV(e){if(Buffer.byteLength(String(e))>Vl.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(Ph.isEmptyOrZeroLength(e)||Ph.isEmpty(e.trim()))throw ja(new Error,Za.ATTR_NAME_NULLISH_ERR,ec.BAD_REQUEST,void 0,void 0,!0)}a(SV,"validateAttribute");function TV(e,t,r){if(!e.hasOwnProperty(t)||Ph.isEmptyOrZeroLength(e[t])){if(r===Vl.OPERATIONS_ENUM.INSERT||r===Vl.OPERATIONS_ENUM.UPSERT){e[t]=hV.v4();return}throw Mh.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]))>Vl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Mh.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 Mh.error(e),ja(new Error,Za.INVALID_FORWARD_SLASH_IN_HASH_ERR,ec.BAD_REQUEST,void 0,void 0,!0)}a(TV,"validateHash")});var RN=T((pie,TN)=>{"use strict";var vh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};TN.exports=vh});var ON=T((Tie,AN)=>{"use strict";var Bh=Ue(),RV=F(),gN=dr().LMDB_ERRORS_ENUM;AN.exports=gV;async function gV(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 Bh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==gN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Bh.closeEnvironment(global.lmdb_map[s]),await Bh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==gN.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){RV.error(t)}}a(gV,"cleanLMDBMap")});var nn=T((gie,IN)=>{"use strict";var rc=require("crypto"),AV=X(),{CONFIG_PARAMS:OV}=b(),bN="aes-256-cbc",NV=32,bV=16,Hh=64,yN=32,yV=Hh+yN,NN=new Map;IN.exports={encrypt:IV,decrypt:wV,createNatsTableStreamName:CV};function IV(e){let t=rc.randomBytes(NV),r=rc.randomBytes(bV),s=rc.createCipheriv(bN,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(IV,"encrypt");function wV(e){let t=e.substr(0,Hh),r=e.substr(Hh,yN),s=e.substr(yV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=rc.createDecipheriv(bN,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(wV,"decrypt");function CV(e,t){let r=AV.get(OV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=NN.get(r);return s||(s=rc.createHash("md5").update(r).digest("hex"),NN.set(r,s)),s}a(CV,"createNatsTableStreamName")});var Si=T((Nie,CN)=>{"use strict";var Oie=Gr(),$l=F(),wN=Gl(),LV=nn(),Yl=$(),{handleHDBError:Kl,hdb_errors:DV}=j(),{HDB_ERROR_MSGS:Wl,HTTP_STATUS_CODES:Fh}=DV,UV=X();UV.initSync();var{getDatabases:qh}=(fe(),Z(Ce));CN.exports={describeAll:MV,describeTable:Ql,describeSchema:PV};async function MV(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=qh(),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(MV,"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=wN.describe_table(e);if(i)throw i;let c=qh()[r];if(!c)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Fh.NOT_FOUND);let u=c[s];if(!u)throw Kl(new Error,Wl.TABLE_NOT_FOUND(e.schema,e.table),Fh.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=LV.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 PV(e){Yl.transformReq(e);let t=wN.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=qh()[s];if(!i)throw Kl(new Error,Wl.SCHEMA_NOT_FOUND(e.schema),Fh.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(PV,"describeSchema")});var on=T((wie,PN)=>{var vV=mi(),{callbackify:DN,promisify:BV}=require("util"),{getDatabases:UN}=(fe(),Z(Ce));PN.exports={setSchemaDataToGlobal:LN,getTableSchema:HV,getSystemSchema:FV,setSchemaDataToGlobalAsync:BV(LN)};var MN=Si(),yie=DN(MN.describeAll),Iie=DN(MN.describeTable);function LN(e){global.hdb_schema=UN(),e&&e()}a(LN,"setSchemaDataToGlobal");function HV(e,t,r){let s=UN()[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(HV,"getTableSchema");function FV(){return vV}a(FV,"getSystemSchema")});var xr=T((Lie,FN)=>{"use strict";var Jl=Dh(),bt=$(),qV=require("util"),Xl=_s(),GV=on(),vN=F(),{handleHDBError:Ti,hdb_errors:xV}=j(),{HTTP_STATUS_CODES:Ri}=xV,kV=qV.promisify(GV.getTableSchema),VV="updated",BN="inserted",HN="upserted";FN.exports={insert:YV,update:KV,upsert:WV,validation:$V,flush:QV};async function $V(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 kV(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 vN.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 vN.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($V,"validation");async function YV(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(BN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(YV,"insertData");async function KV(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(VV,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(KV,"updateData");async function WV(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(HN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(WV,"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===BN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===HN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zl,"returnObject");function QV(e){return bt.transformReq(e),Xl.flush(e.schema,e.table)}a(QV,"flush")});var xh=T((Uie,xN)=>{var zV=qe(),Gh=require("joi"),{hdb_table:JV,hdb_database:qN}=Ds(),GN={schema:qN,database:qN,table:JV},XV={date:Gh.date().iso().required()},jV={timestamp:Gh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};xN.exports=function(e,t){let r=t==="timestamp"?{...GN,...jV}:{...GN,...XV},s=Gh.object(r);return zV.validateBySchema(e,s)}});var $N=T((Mie,VN)=>{var ZV=qe(),kh=require("joi"),{hdb_table:e$,hdb_database:kN}=Ds(),t$=kh.object({schema:kN,database:kN,table:e$,hash_values:kh.array().required(),ids:kh.array()});VN.exports=function(e){return ZV.validateBySchema(e,t$)}});var KN=T((Pie,YN)=>{"use strict";var Vh=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}},$h=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}},Yh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};YN.exports={InsertObject:Vh,NoSQLSeachObject:$h,DeleteResponseObject:Yh}});var Oi=T((Bie,XN)=>{"use strict";var QN=xh(),r$=$N(),gi=$(),WN=require("moment"),zN=F(),{promisify:s$,callbackify:n$}=require("util"),Ai=b(),i$=on(),Kh=s$(i$.getTableSchema),Wh=_s(),{DeleteResponseObject:o$}=KN(),{handleHDBError:Bn,hdb_errors:a$}=j(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Hn}=a$,c$="records successfully deleted",u$=n$(JN);XN.exports={delete:u$,deleteRecord:JN,deleteFilesBefore:l$,deleteAuditLogsBefore:_$};async function l$(e){let t=QN(e,"date");if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);if(gi.transformReq(e),!WN(e.date,WN.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 Wh.deleteRecordsBefore(e);if(await Kh(e.schema,e.table),zN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(l$,"deleteFilesBefore");async function _$(e){let t=QN(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 Wh.deleteAuditLogsBefore(e);return await Kh(e.schema,e.table),zN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(_$,"deleteAuditLogsBefore");async function JN(e){e.ids&&(e.hash_values=e.ids);let t=r$(e);if(t)throw Bn(t,t.message,Hn.BAD_REQUEST,void 0,void 0,!0);gi.transformReq(e);let r=gi.checkSchemaTableExist(e.schema,e.table);if(r)throw Bn(new Error,r,Hn.NOT_FOUND,Ai.LOG_LEVELS.ERROR,r,!0);try{await Kh(e.schema,e.table);let s=await Wh.deleteRecords(e);return gi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${c$}`),s}catch(s){if(s.message===Ai.SEARCH_NOT_FOUND_MESSAGE){let n=new o$;return n.message=Ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(JN,"deleteRecord")});var Zl=T((Fie,eb)=>{var d$=require("crypto"),jN=9;function f$(e){let t=h$(jN),r=ZN(e+t);return t+r}a(f$,"createHash");function E$(e,t){let r=e.substr(0,jN),s=r+ZN(t+r);return e===s}a(E$,"validateHash");function h$(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(h$,"generateSalt");function ZN(e){return d$.createHash("md5").update(e).digest("hex")}a(ZN,"md5");eb.exports={hash:f$,validate:E$}});var rb=T((Gie,tb)=>{var Qh=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 m$(e){return Bt.password.presence=!0,Bt.username.presence=!0,Bt.role.presence=!0,Bt.active.presence=!0,Qh.validateObject(e,Bt)}a(m$,"addUserValidation");function p$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Qh.validateObject(e,Bt)}a(p$,"alterUserValidation");function S$(e){return Bt.password.presence=!1,Bt.username.presence=!0,Bt.role.presence=!1,Bt.active.presence=!1,Qh.validateObject(e,Bt)}a(S$,"dropUserValidation");tb.exports={addUserValidation:m$,alterUserValidation:p$,dropUserValidation:S$}});var ke=T((Vie,nb)=>{"use strict";var{platform:kie}=require("os"),T$="nats-server.zip",zh="nats-server",R$=process.platform==="win32"?`${zh}.exe`:zh,Jh="HDB",g$=/^[^\s.,*>]+$/,sb="__request__",A$=a(e=>`${e}.${sb}`,"REQUEST_SUBJECT"),O$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},N$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},b$={HUB:"hub.pid",LEAF:"leaf.pid"},y$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},I$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Jh,deliver_subject:"__HDB__.WORKQUEUE"},w$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Jh,deliver_subject:"HDB.SCHEMAQUEUE"},C$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Jh,deliver_subject:"HDB.USERQUEUE"},L$={SUCCESS:"success",ERROR:"error"},D$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},U$={TXN:"txn",MSGID:"msgid"},Eo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},M$={[Eo.ERR]:1,[Eo.WRN]:2,[Eo.INF]:3,[Eo.DBG]:4,[Eo.TRC]:5},P$={debug:"-D",trace:"-DVV"};nb.exports={NATS_SERVER_ZIP:T$,NATS_SERVER_NAME:zh,NATS_BINARY_NAME:R$,PID_FILES:b$,NATS_CONFIG_FILES:N$,SERVER_SUFFIX:y$,WORK_QUEUE_CONSUMER_NAMES:I$,SCHEMA_QUEUE_CONSUMER_NAMES:w$,USER_QUEUE_CONSUMER_NAMES:C$,NATS_TERM_CONSTRAINTS_RX:g$,REQUEST_SUFFIX:sb,UPDATE_REMOTE_RESPONSE_STATUSES:L$,CLUSTER_STATUS_STATUSES:D$,REQUEST_SUBJECT:A$,SUBJECT_PREFIXES:U$,MSG_HEADERS:O$,LOG_LEVELS:Eo,LOG_LEVEL_FLAGS:P$,LOG_LEVEL_HIERARCHY:M$}});var ob=T((Yie,ib)=>{"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}},Xh=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}};ib.exports={BaseLicense:t_,ExtendedLicense:Xh}});var sc=T((Wie,db)=>{"use strict";var mo=require("fs-extra"),ab=Zl(),cb=require("crypto"),v$=require("moment"),B$=require("uuid").v4,Ht=F(),Zh=require("path"),H$=$(),Fn=b(),F$=ob().ExtendedLicense,ho="invalid license key format",q$="061183",G$="mofi25",x$="aes-256-cbc",k$=16,V$=32,ub=X();ub.initSync();var jh;db.exports={validateLicense:lb,generateFingerPrint:Y$,licenseSearch:_b,getLicense:Q$};function em(){return Zh.join(ub.getHdbBasePath(),Fn.LICENSE_KEY_DIR_NAME,Fn.LICENSE_FILE_NAME)}a(em,"getLicenseDirPath");function $$(){let e=em();return Zh.join(e,Fn.LICENSE_FILE_NAME)}a($$,"getLicenseFilePath");function tm(){let e=em();return Zh.join(e,Fn.REG_KEY_FILE_NAME)}a(tm,"getFingerPrintFilePath");async function Y$(){let e=tm();try{return await mo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await K$();throw Ht.error(`Error writing fingerprint file to ${e}`),Ht.error(t),new Error("There was an error generating the fingerprint")}}a(Y$,"generateFingerPrint");async function K$(){let e=B$(),t=ab.hash(e),r=tm();try{await mo.mkdirp(em()),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(K$,"writeFingerprint");function lb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Fn.RAM_ALLOCATION_ENUM.DEFAULT,version:Fn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ht.error("empty license key passed to validate."),r;let s=tm(),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(G$),c=o[1];c=Buffer.concat([Buffer.from(c)],k$);let u=Buffer.concat([Buffer.from(i)],V$),_=cb.createDecipheriv(x$,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=W$(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<v$().valueOf()&&(r.valid_date=!1),ab.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(lb,"validateLicense");function W$(e,t){try{let r=cb.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(W$,"checkOldLicense");function _b(){let e=new F$,t=[];try{t=mo.readFileSync($$(),"utf-8").split(Fn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ht.info("no license file found"):Ht.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(H$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=lb(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ht.error("There was an error parsing the license string."),Ht.error(n),e.ram_allocation=Fn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return jh=e,e}a(_b,"licenseSearch");async function Q$(){return jh||await _b(),jh}a(Q$,"getLicense")});var gr=T((jie,wb)=>{"use strict";var mb="username is required",pb="nothing to update, must supply active, role or password to update",Sb="password cannot be an empty string",Tb="If role is specified, it cannot be empty.",Rb="active must be true or false";wb.exports={addUser:sY,alterUser:nY,dropUser:oY,getSuperUser:lY,userInfo:aY,listUsers:s_,listUsersExternal:cY,setUsersToGlobal:So,findAndValidateUser:yb,getClusterUser:_Y,USERNAME_REQUIRED:mb,ALTERUSER_NOTHING_TO_UPDATE:pb,EMPTY_PASSWORD:Sb,EMPTY_ROLE:Tb,ACTIVE_BOOLEAN:Rb};var gb=xr(),z$=Oi(),nm=Zl(),Ab=rb(),Ob=Gr(),im=an(),Rr=$(),Nb=require("validate.js"),de=F(),{promisify:J$}=require("util"),om=nn(),fb=b(),Eb=ke(),X$=hr(),zie=X(),Jie=sc(),j$=mi(),{table:Xie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:Z$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:rm,HDB_ERROR_MSGS:po}=Z$,{UserEventMsg:am}=ds(),sm=require("lodash"),{server:cm}=(Pr(),Z(ro)),eY=F();cm.getUser=yb;var bb={username:!0,active:!0,role:!0,password:!0},hb=new Map,r_=Ob.searchByValue,tY=Ob.searchByHash,rY=J$(z$.delete);async function sY(e){let t=Nb.cleanAttributes(e,bb),r=Ab.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await r_(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Ms(new Error,po.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,po.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=om.encrypt(t.password)),t.password=nm.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await gb.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 Ms(new Error,po.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],im.signalUserChange(new am(process.pid)),`${c.username} successfully added`}a(sY,"addUser");async function nY(e){let t=Nb.cleanAttributes(e,bb);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(mb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(pb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Sb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Rb);let r=iY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=om.encrypt(t.password)),t.password=nm.hash(t.password)),t.role==="")throw new Error(Tb);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 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),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=po.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await gb.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 im.signalUserChange(new am(process.pid)),n}a(nY,"alterUser");function iY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(iY,"isClusterUser");async function oY(e){try{let t=Ab.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,po.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await rY(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 im.signalUserChange(new am(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(oY,"dropUser");async function aY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=sm.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await tY(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(aY,"userInfo");async function cY(){let e;try{e=await s_()}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(cY,"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 de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=sm.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 de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=sm.cloneDeep(o),o.role=r[o.role],uY(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(s_,"listUsers");function uY(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(uY,"appendSystemTablesToRole");async function So(){try{let e=await s_();global.hdb_users=e}catch(e){throw de.error(e),e}}a(So,"setUsersToGlobal");async function yb(e,t,r=!0){global.hdb_users||await So();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,rm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,rm.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(hb.get(t)===s.password)return n;if(nm.validate(s.password,t))hb.set(t,s.password);else throw Ms(new Error,rm.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(yb,"findAndValidateUser");async function lY(){global.hdb_users||await So();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(lY,"getSuperUser");async function _Y(){let e=await s_(),t=X$.getConfigFromFile(fb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===fb.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=om.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+Eb.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+Eb.SERVER_SUFFIX.ADMIN,r}a(_Y,"getClusterUser");var Ib=[];cm.invalidateUser=function(e){for(let t of Ib)try{t(e)}catch(r){eY.error("Error invalidating user",r)}};cm.onInvalidatedUser=function(e){Ib.push(e)}});var ic=T((roe,Ub)=>{"use strict";var Ni=F(),Ar=b(),dY=ON(),eoe=on(),toe=Si(),fY=gr(),{validateEvent:Cb}=ds(),nc=_s(),EY=require("process"),{resetDatabases:hY}=(fe(),Z(Ce)),mY={[Ar.ITC_EVENT_TYPES.SCHEMA]:pY,[Ar.ITC_EVENT_TYPES.USER]:Db};async function pY(e){let t=Cb(e);if(t){Ni.error(t);return}Ni.trace("ITC schemaHandler received schema event:",e),await dY(e.message),await SY(e.message)}a(pY,"schemaHandler");async function SY(e){try{nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=hY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ni.error(t)}}a(SY,"syncSchemaMetadata");var Lb=[];async function Db(e){try{try{nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),nc.resetReadTxn(Ar.SYSTEM_SCHEMA_NAME,Ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ni.warn(r)}let t=Cb(e);if(t){Ni.error(t);return}Ni.trace(`ITC userHandler ${Ar.HDB_ITC_CLIENT_PREFIX}${EY.pid} received user event:`,e),await fY.setUsersToGlobal();for(let r of Lb)r()}catch(t){Ni.error(t)}}a(Db,"userHandler");Db.addListener=function(e){Lb.push(e)};Ub.exports=mY});var ds=T((coe,Pb)=>{"use strict";var noe=F(),um=$(),TY=b(),{ITC_ERRORS:oc}=dr(),{parentPort:ioe,threadId:RY,isMainThread:gY,workerData:ooe}=require("worker_threads"),{onMessageFromWorkers:AY,broadcast:aoe,broadcastWithAcknowledgement:OY}=Ze();Pb.exports={sendItcEvent:NY,validateEvent:Mb,SchemaEventMsg:bY,UserEventMsg:yY};var n_;AY(async(e,t)=>{n_=n_||ic(),Mb(e),n_[e.type]&&await n_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function NY(e){return!gY&&e.message&&(e.message.originator=RY),OY(e)}a(NY,"sendItcEvent");function Mb(e){if(typeof e!="object")return oc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||um.isEmpty(e.type))return oc.MISSING_TYPE;if(!e.hasOwnProperty("message")||um.isEmpty(e.message))return oc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||um.isEmpty(e.message.originator))return oc.MISSING_ORIGIN;if(TY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return oc.INVALID_EVENT(e.type)}a(Mb,"validateEvent");function bY(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(bY,"SchemaEventMsg");function yY(e){this.originator=e}a(yY,"UserEventMsg")});var an=T((_oe,Fb)=>{"use strict";var vb=b(),loe=$(),i_=F(),Bb=RN(),To,{sendItcEvent:Hb}=ds();function IY(e){try{i_.trace("signalSchemaChange called with message:",e),To=To||ic();let t=new Bb(vb.ITC_EVENT_TYPES.SCHEMA,e);return To.schema(t),Hb(t)}catch(t){i_.error(t)}}a(IY,"signalSchemaChange");function wY(e){try{i_.trace("signalUserChange called with message:",e),To=To||ic();let t=new Bb(vb.ITC_EVENT_TYPES.USER,e);return To.user(t),Hb(t)}catch(t){i_.error(t)}}a(wY,"signalUserChange");Fb.exports={signalSchemaChange:IY,signalUserChange:wY}});var o_=T((foe,Gb)=>{"use strict";var qb=$(),CY=b(),LY=F(),DY=kl(),UY=xl(),MY=an(),{SchemaEventMsg:PY}=ds(),vY="already exists in";Gb.exports=BY;async function BY(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 HY(e,t.schema,t.name,i)})),n}a(BY,"lmdbCheckForNewAttributes");async function HY(e,t,r,s){let n=new UY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await FY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(vY))LY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(HY,"createNewAttribute");async function FY(e){let t;return t=await DY(e),MY.signalSchemaChange(new PY(process.pid,CY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(FY,"createAttribute")});var Ro=T((hoe,xb)=>{"use strict";var lm=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}};xb.exports=lm});var Vb=T((poe,kb)=>{"use strict";var qY=Ro(),GY=b().OPERATIONS_ENUM,_m=class extends qY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(GY.INSERT,r,s,n,i),this.records=t}};kb.exports=_m});var Yb=T((Toe,$b)=>{"use strict";var xY=Ro(),kY=b().OPERATIONS_ENUM,dm=class extends xY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(kY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};$b.exports=dm});var Wb=T((goe,Kb)=>{"use strict";var VY=Ro(),$Y=b().OPERATIONS_ENUM,fm=class extends VY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super($Y.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};Kb.exports=fm});var zb=T((Ooe,Qb)=>{"use strict";var YY=Ro(),KY=b().OPERATIONS_ENUM,Em=class extends YY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(KY.DELETE,s,n,t,i),this.original_records=r}};Qb.exports=Em});var ac=T((yoe,Zb)=>{"use strict";var boe=require("path"),Jb=Ue(),WY=Vb(),QY=Yb(),zY=Wb(),JY=zb(),go=ze(),Xb=$(),{CONFIG_PARAMS:XY}=b(),jb=X();jb.initSync();var a_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:jY}=ve();Zb.exports=ZY;async function ZY(e,t){if(jb.get(XY.LOGGING_AUDITLOG)===!1)return;let r=jY(e.schema,e.table),s=await Jb.openEnvironment(r,e.table,!0),n=e1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Jb.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),Xb.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(ZY,"writeTransaction");function e1(e,t){let r=Xb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===a_.INSERT)return new WY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPDATE)return new QY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.UPSERT)return new zY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===a_.DELETE)return new JY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(e1,"createTransactionObject")});var hm=T((Coe,ey)=>{"use strict";var t1=Ja(),woe=Xa(),cc=b(),r1=tc(),s1=_o().insertRecords,n1=Ue(),i1=F(),o1=o_(),{getSchemaPath:a1}=ve(),c1=ac();ey.exports=u1;async function u1(e){try{let{schema_table:t,attributes:r}=t1(e);r1(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 o1(e.hdb_auth_header,t,r),n=a1(e.schema,e.table),i=await n1.openEnvironment(n,e.table),o=await s1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await c1(e,o)}catch(c){i1.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(u1,"lmdbCreateRecords")});var sy=T((Doe,ry)=>{"use strict";var ty=b(),l1=hm(),_1=Xa(),d1=require("fs-extra"),{getSchemaPath:f1}=ve();ry.exports=E1;async function E1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _1(ty.SYSTEM_SCHEMA_NAME,ty.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await l1(r),await d1.mkdirp(f1(e.schema))}a(E1,"lmdbCreateSchema")});var iy=T((Moe,ny)=>{"use strict";var mm=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}};ny.exports=mm});var uy=T((Foe,cy)=>{"use strict";var oy=Ue(),pm=mr(),Sm=dr().LMDB_ERRORS_ENUM,h1=ze(),ay=F(),voe=$(),m1=require("lmdb"),p1=iy(),S1=b(),{OVERFLOW_MARKER:Boe,MAX_SEARCH_KEY_LENGTH:Hoe}=h1,T1=S1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function R1(e,t,r,s){if(pm.validateEnv(e),t===void 0)throw new Error(Sm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Sm.IDS_REQUIRED):new Error(Sm.IDS_MUST_BE_ITERABLE);try{let n=oy.listDBIs(e);oy.initializeDBIs(e,t,n);let i=new p1,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[T1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,m1.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=pm.getIndexedValues(N);if(Y)for(let Q=0,G=Y.length;Q<G;Q++)I.remove(Y[Q],o)}catch{ay.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ay.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=pm.getNextMonotonicTime(),i}catch(n){throw n}}a(R1,"deleteRecords");cy.exports={deleteRecords:R1}});var uc=T((Goe,_y)=>{"use strict";var Ao=$(),g1=uy(),A1=Ue(),{getSchemaPath:O1}=ve(),N1=ac(),b1=F();_y.exports=y1;async function y1(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 ly([],[]);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=O1(e.schema,e.table),i=await A1.openEnvironment(n,e.table),o=await g1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await N1(e,o)}catch(c){b1.error(`unable to write transaction due to ${c.message}`)}return ly(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(y1,"lmdbDeleteRecords");function ly(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(ly,"createDeleteResponse")});var Rm=T((Voe,dy)=>{"use strict";var I1=b(),koe=mr();function Tm(e,t){let r=Object.create(null);if(t.length===1&&I1.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(Tm,"parseRow");function w1(e,t,r,s){let n=Tm(r,e);s.push(n)}a(w1,"searchAll");function C1(e,t,r,s){let n=Tm(r,e);s[t]=n}a(C1,"searchAllToMap");function L1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(L1,"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 D1(e,t,r,s,n,i){t.toString().endsWith(e)&&bi(t,r,s,n,i)}a(D1,"endsWith");function U1(e,t,r,s,n,i){t.toString().includes(e)&&bi(t,r,s,n,i)}a(U1,"contains");function M1(e,t,r,s,n,i){t>e&&bi(t,r,s,n,i)}a(M1,"greaterThanCompare");function P1(e,t,r,s,n,i){t>=e&&bi(t,r,s,n,i)}a(P1,"greaterThanEqualCompare");function v1(e,t,r,s,n,i){t<e&&bi(t,r,s,n,i)}a(v1,"lessThanCompare");function B1(e,t,r,s,n,i){t<=e&&bi(t,r,s,n,i)}a(B1,"lessThanEqualCompare");dy.exports={parseRow:Tm,searchAll:w1,searchAllToMap:C1,iterateDBI:L1,endsWith:D1,contains:U1,greaterThanCompare:M1,greaterThanEqualCompare:P1,lessThanCompare:v1,lessThanEqualCompare:B1,pushResults:bi}});var Oo=T((Qoe,Ty)=>{"use strict";var qn=Ue(),Yoe=F(),Or=mr(),c_=ze(),Je=dr().LMDB_ERRORS_ENUM,Koe=$(),H1=b(),u_=Rm(),{parseRow:F1}=u_,Woe=require("lmdb"),{OVERFLOW_MARKER:fy,MAX_SEARCH_KEY_LENGTH:q1}=c_;function Ey(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(Ey,"iterateFullIndex");function lc(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(lc,"iterateRangeBetween");function yi(e,t,r,s){let n=e.database||e,i=qn.openDBI(n,r);i[c_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&qn.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 hy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(fy)){if(!n)if(r)n=qn.openDBI(e,r);else{let u=qn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=qn.openDBI(e,u[_]),!n[c_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(hy,"getOverflowCheck");function G1(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return yi(e,t,t,(o,c,u)=>(l_(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(_=>F1(_.value,r))))}a(G1,"searchAll");function x1(e,t,r,s=!1,n=void 0,i=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);l_(r),r=_c(e.database||e,r);let o=new Map;for(let{key:c,value:u}of Ey(e,t,t,s,n,i))o.set(c,u_.parseRow(u,r));return o}a(x1,"searchAllToMap");function k1(e,t,r=!1,s=void 0,n=void 0){if(Or.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=Ey(e,void 0,t,r,s,n),c=o.transaction,u=hy(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(k1,"iterateDBI");function V1(e,t){if(Or.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return qn.statDBI(e,t).entryCount}a(V1,"countAll");function $1(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=Or.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($1,"equals");function Y1(e,t,r){return Gn(e,t,r),qn.openDBI(e,t).getValuesCount(r)}a(Y1,"count");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){return Gn(e,r,s),yi(e,null,r,(c,u)=>{s=Or.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(K1,"startsWith");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){return my(e,t,r,s,n,i,o,!0)}a(W1,"endsWith");function my(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=hy(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(fy)?_.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(my,"contains");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),lc(e,t,r,s,u,n,i,o,!0,!1)}a(Q1,"greaterThan");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="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),lc(e,t,r,s,u,n,i,o,!1,!1)}a(z1,"greaterThanEqual");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),lc(e,t,r,u,s,n,i,o,!1,!0)}a(J1,"lessThan");function X1(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),lc(e,t,r,u,s,n,i,o,!1,!1)}a(X1,"lessThanEqual");function j1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Or.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=Or.convertKeyValueToWrite(s),n=Or.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 Z1(e,t,r,s){Or.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=_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=u_.parseRow(c,r)),o}a(Z1,"searchByHash");function eK(e,t,r){Or.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(eK,"checkHashExists");function tK(e,t,r,s,n=[]){return Sy(e,t,r,s,n),py(e,t,r,s,n).map(i=>i[1])}a(tK,"batchSearchByHash");function rK(e,t,r,s,n=[]){Sy(e,t,r,s,n);let i=new Map;for(let[o,c]of py(e,t,r,s,n))i.set(o,c);return i}a(rK,"batchSearchByHashToMap");function py(e,t,r,s,n=[]){return yi(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[_,u_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(py,"batchHashSearch");function Sy(e,t,r,s,n){if(Or.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(Sy,"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(Or.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 _c(e,t){return t.length===1&&H1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qn.listDBIs(e)),t}a(_c,"setGetWholeRowAttributes");Ty.exports={searchAll:G1,searchAllToMap:x1,count:Y1,countAll:V1,equals:$1,startsWith:K1,endsWith:W1,contains:my,searchByHash:Z1,setGetWholeRowAttributes:_c,batchSearchByHash:tK,batchSearchByHashToMap:rK,checkHashExists:eK,iterateDBI:k1,greaterThan:Q1,greaterThanEqual:z1,lessThan:J1,lessThanEqual:X1,between:j1}});var No=T((Joe,Ny)=>{var Ry=require("lodash"),gy=qe(),Be=require("joi"),sK=$(),{hdb_schema_table:__,checkValidTable:Ay,hdb_table:Oy,hdb_database:d_}=Ds(),{handleHDBError:nK,hdb_errors:iK}=j(),{getDatabases:oK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:aK}=iK,cK=Be.object({database:d_,schema:d_,table:Oy,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)}),uK=Be.object({database:d_,schema:d_,table:Oy,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()});Ny.exports=function(e,t){let r=null;switch(t){case"value":r=gy.validateBySchema(e,cK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ay("database",e.schema)),i(Ay("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=gy.validateBySchema(e,uK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=sK.checkGlobalSchemaTable(e.schema,e.table);if(n)return nK(new Error,n,aK.NOT_FOUND);let o=oK()[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=Ry.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Ry.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 gm=T((joe,by)=>{"use strict";var lK=Ue(),_K=No(),{getSchemaPath:dK}=ve();by.exports=fK;function fK(e){let t=_K(e,"hashes");if(t)throw t;let r=dK(e.schema,e.table);return lK.openEnvironment(r,e.table)}a(fK,"initialize")});var Am=T((eae,yy)=>{"use strict";var EK=Oo(),hK=gm();yy.exports=mK;async function mK(e){let t=await hK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return EK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(mK,"lmdbGetDataByHash")});var bo=T((rae,Iy)=>{"use strict";var Om=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Iy.exports=Om});var Cy=T((iae,wy)=>{"use strict";var nae=bo(),pK=Oo(),SK=gm();wy.exports=TK;async function TK(e){let t=await SK(e),r=global.hdb_schema[e.schema][e.table];return pK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(TK,"lmdbSearchByHash")});var vs=T((aae,Ly)=>{"use strict";var Nm=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}};Ly.exports=Nm});var f_=T((uae,By)=>{"use strict";var Ft=Oo(),RK=Ue(),gK=$(),oe=ze(),Ii=b(),AK=mi(),Dy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:OK}=ve(),cn=Ii.SEARCH_WILDCARDS;async function NK(e,t,r){let s;e.schema===Ii.SYSTEM_SCHEMA_NAME?s=AK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=vy(e,s.hash_attribute,r,t);return My(e,n,s.hash_attribute,r)}a(NK,"prepSearch");async function My(e,t,r,s){let n=OK(e.schema,e.table),i=await RK.openEnvironment(n,e.table),o=Py(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(bK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Uy(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Uy(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(My,"executeSearch");function Py(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(Py,"searchByType");function Uy(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Uy,"createMapFromIterable");function bK(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(bK,"checkToFetchMore");function vy(e,t,r,s){if(gK.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),cn.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[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(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(Dy.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(Dy.UNKNOWN_SEARCH_TYPE)}}a(vy,"createSearchTypeFromSearchObject");By.exports={executeSearch:My,createSearchTypeFromSearchObject:vy,prepSearch:NK,searchByType:Py}});var Fy=T((dae,Hy)=>{"use strict";var _ae=vs(),yK=No(),IK=$(),wK=b(),CK=f_();Hy.exports=LK;function LK(e,t){if(!IK.isEmpty(t)&&wK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=yK(e,"value");if(s)throw s;let n=!0;return CK.prepSearch(e,t,n)}a(LK,"lmdbGetDataByValue")});var dc=T((hae,qy)=>{"use strict";var Eae=vs(),DK=No(),UK=$(),MK=b(),PK=f_();qy.exports=vK;async function vK(e,t){if(!UK.isEmpty(t)&&MK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=DK(e,"value");if(s)throw s;return PK.prepSearch(e,t,!1)}a(vK,"lmdbSearchByValue")});var xy=T((Sae,Gy)=>{"use strict";var pae=ze(),bm=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}},ym=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Im=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Gy.exports={SearchByConditionsObject:bm,SearchCondition:ym,SortAttribute:Im}});var Ky=T((Aae,Yy)=>{"use strict";var Rae=xy().SearchByConditionsObject,BK=vs(),HK=No(),wm=Oo(),E_=ze(),{Resource:gae}=(as(),Z(PE)),$y=f_(),FK=Rm(),qK=require("lodash"),{getSchemaPath:GK}=ve(),ky=Ue(),{handleHDBError:xK,hdb_errors:kK}=j(),{HTTP_STATUS_CODES:VK}=kK,$K=1e8;Yy.exports=YK;async function YK(e){let t=HK(e,"conditions");if(t)throw xK(t,t.message,VK.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=GK(e.schema,e.table),s=await ky.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)ky.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=wm.count(s,_.search_attribute,_.search_value):l===E_.SEARCH_TYPES.CONTAINS||l===E_.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=$K}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Vy(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($y.filterByType),d=l.length,f=wm.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=>FK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Vy(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=wm.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(YK,"lmdbSearchByConditions");async function Vy(e,t,r,s){let n=new BK(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,$y.searchByType(e,n,i,s).map(o=>o.value)}a(Vy,"executeConditionSearch")});var fc=T((Nae,Wy)=>{"use strict";var KK=b().OPERATIONS_ENUM,Cm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=KK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Wy.exports=Cm});var Lm=T((yae,tI)=>{"use strict";var Xy=vs(),jy=fc(),Zy=dc(),eI=uc(),zt=b(),Qy=$(),zy=Ue(),{getTransactionAuditStorePath:WK,getSchemaPath:QK}=ve(),Jy=F();tI.exports=zK;async function zK(e){try{if(Qy.isEmpty(global.hdb_schema[e.schema])||Qy.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await JK(e),await XK(e);let t=QK(e.schema,e.table);try{await zy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Jy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=WK(e.schema,e.table);await zy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Jy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(zK,"lmdbDropTable");async function JK(e){let t=new Xy(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 Zy(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 eI(n)}a(JK,"deleteAttributesFromSystem");async function XK(e){let t=new Xy(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 Zy(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 eI(n)}catch(i){throw i}}a(XK,"dropTableFromSystem")});var sI=T((wae,rI)=>{"use strict";var jK=require("fs-extra"),ZK=vs(),eW=bo(),tW=fc(),rW=Lm(),sW=uc(),nW=Am(),iW=dc(),un=b(),{getSchemaPath:oW}=ve(),{handleHDBError:aW,hdb_errors:cW}=j(),{HDB_ERROR_MSGS:uW,HTTP_STATUS_CODES:lW}=cW;rI.exports=_W;async function _W(e){let t;try{t=await dW(e.schema);let r=new ZK(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await iW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await rW(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new tW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await sW(n);let i=oW(t);await jK.remove(i)}catch(r){throw r}}a(_W,"lmdbDropSchema");async function dW(e){let t=new eW(un.SYSTEM_SCHEMA_NAME,un.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[un.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await nW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw aW(new Error,uW.SCHEMA_NOT_FOUND(e),lW.NOT_FOUND,void 0,void 0,!0);return s}a(dW,"validateDropSchema")});var Um=T((Lae,nI)=>{"use strict";var Dm=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};nI.exports=Dm});var oI=T((Mae,iI)=>{"use strict";var fW=require("fs-extra"),h_=Ue(),{getTransactionAuditStorePath:EW}=ve(),Mm=ze(),Uae=Um();iI.exports=hW;async function hW(e){let t;try{let r=EW(e.schema,e.table);await fW.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,Mm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),h_.createDBI(t,Mm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),h_.createDBI(t,Mm.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(hW,"createTransactionsAuditEnvironment")});var lI=T((vae,uI)=>{"use strict";var Pm=b(),aI=Ue(),mW=_o(),{getSystemSchemaPath:pW,getSchemaPath:SW}=ve(),TW=mi(),RW=kl(),vm=xl(),gW=F(),AW=oI(),Hm=TW.hdb_table,cI=[];for(let e=0;e<Hm.attributes.length;e++)cI.push(Hm.attributes[e].attribute);uI.exports=OW;async function OW(e,t){let r=SW(t.schema,t.table),s=new vm(t.schema,t.table,Pm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new vm(t.schema,t.table,Pm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new vm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await aI.createEnvironment(r,t.table),e!==void 0){let o=await aI.openEnvironment(pW(),Pm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await mW.insertRecords(o,Hm.hash_attribute,cI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Bm(s),await Bm(n),await Bm(i)}await AW(t)}catch(o){throw o}}a(OW,"lmdbCreateTable");async function Bm(e){try{await RW(e)}catch(t){gW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Bm,"createAttribute")});var dI=T((Hae,_I)=>{"use strict";var NW=Ja(),bW=tc(),yW=o_(),Ec=b(),IW=_o().updateRecords,wW=Ue(),{getSchemaPath:CW}=ve(),LW=ac(),DW=F();_I.exports=UW;async function UW(e){try{let{schema_table:t,attributes:r}=NW(e);bW(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 yW(e.hdb_auth_header,t,r),n=CW(e.schema,e.table),i=await wW.openEnvironment(n,e.table),o=await IW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await LW(e,o)}catch(c){DW.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(UW,"lmdbUpdateRecords")});var EI=T((qae,fI)=>{"use strict";var MW=b().OPERATIONS_ENUM,Fm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=MW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};fI.exports=Fm});var mI=T((kae,hI)=>{"use strict";var xae=EI(),PW=Ja(),vW=tc(),BW=o_(),hc=b(),HW=_o().upsertRecords,FW=Ue(),{getSchemaPath:qW}=ve(),GW=ac(),xW=F(),{handleHDBError:kW,hdb_errors:VW}=j();hI.exports=$W;async function $W(e){let t;try{t=PW(e)}catch(u){throw kW(u,u.message,VW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;vW(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 BW(e.hdb_auth_header,r,s),i=qW(e.schema,e.table),o=await FW.openEnvironment(i,e.table),c=await HW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await GW(e,c)}catch(u){xW.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($W,"lmdbUpsertRecords")});var SI=T(($ae,pI)=>{"use strict";var qm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};pI.exports=qm});var RI=T((Kae,TI)=>{"use strict";var Gm=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}};TI.exports=Gm});var OI=T((zae,AI)=>{"use strict";var xm=Ue(),{getTransactionAuditStorePath:YW}=ve(),Qae=SI(),mc=ze(),KW=$(),gI=RI(),WW=require("util").promisify,QW=WW(setTimeout),zW=1e4,JW=100;AI.exports=XW;async function XW(e){let t=YW(e.schema,e.table),r=await xm.openEnvironment(t,e.table,!0),s=xm.listDBIs(r);xm.initializeDBIs(r,mc.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new gI;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 QW(JW);while(n.transactions_deleted>0);return i}a(XW,"deleteAuditLogsBefore");async function jW(e,t){let r=new gI;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];KW.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>zW)break}return await n,r}catch(s){throw s}}a(jW,"deleteTransactions")});var bI=T((Xae,NI)=>{"use strict";var km=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};NI.exports=km});var II=T((ece,yI)=>{"use strict";var ZW=vs(),eQ=fc(),Zae=bI(),Bs=b(),tQ=$(),Vm=Ue(),rQ=mi(),sQ=dc(),nQ=uc(),{getSchemaPath:iQ}=ve();yI.exports=oQ;async function oQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=rQ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await cQ(e),n=iQ(e.schema,e.table),i=await Vm.openEnvironment(n,e.table);return t===!0&&await aQ(e,i,r.hash_attribute),Vm.dropDBI(i,e.attribute),s}a(oQ,"lmdbDropAttribute");async function aQ(e,t,r){let s=Vm.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(aQ,"removeAttributeFromAllObjects");async function cQ(e){let t=new ZW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await sQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(tQ.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new eQ(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return nQ(i)}a(cQ,"dropAttributeFromSystem")});var MI=T((sce,UI)=>{"use strict";var $m=Ue(),yo=ze(),rce=mr(),Ym=b(),wI=$(),{getTransactionAuditStorePath:uQ}=ve(),lQ=Oo(),m_=Ro(),_Q=F();UI.exports=dQ;async function dQ(e){let t=uQ(e.schema,e.table),r=await $m.openEnvironment(t,e.table,!0),s=$m.listDBIs(r);$m.initializeDBIs(r,yo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ym.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return CI(r,e.search_values);case Ym.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,EQ(r,e.search_values,n);case Ym.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return fQ(r,e.search_values);default:return CI(r)}}a(dQ,"readAuditLog");function CI(e,t=[0,Date.now()]){wI.isEmpty(t[0])&&(t[0]=0),wI.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 m_,n))}a(CI,"searchTransactionsByTimestamp");function fQ(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,DI(e,i))}return Object.fromEntries(r)}a(fQ,"searchTransactionsByUsername");function EQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=lQ.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=DI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);LI(u,"records",r,l,o),LI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(EQ,"searchTransactionsByHashValues");function LI(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(LI,"loopRecords");function DI(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 m_,i);r.push(o)}}catch(i){_Q.warn(i)}return r}catch(s){throw s}}a(DI,"batchSearchTransactions")});var vI=T((ace,PI)=>{"use strict";var{getSchemaPath:ice}=ve(),oce=Ue(),{database:hQ}=(fe(),Z(Ce));PI.exports={writeTransaction:mQ};async function mQ(e,t,r){return hQ({database:e,table:t}).transaction(r)}a(mQ,"writeTransaction")});var qI=T((uce,FI)=>{"use strict";var{getSchemaPath:BI}=ve(),HI=Ue();FI.exports={flush:pQ,resetReadTxn:SQ};async function pQ(e,t){return(await HI.openEnvironment(BI(e,t),t.toString())).flushed}a(pQ,"flush");async function SQ(e,t){try{(await HI.openEnvironment(BI(e,t),t.toString())).resetReadTxn()}catch{}}a(SQ,"resetReadTxn")});var VI=T((_ce,kI)=>{"use strict";var{Readable:TQ}=require("stream"),{getDatabases:RQ}=(fe(),Z(Ce)),{readSync:gQ,openSync:AQ,createReadStream:GI}=require("fs"),{open:OQ}=require("lmdb"),xI=Dl(),NQ=Ml(),{AUDIT_STORE_OPTIONS:bQ}=(ao(),Z(NO)),{INTERNAL_DBIS_NAME:yQ,AUDIT_STORE_NAME:IQ}=ze();kI.exports=CQ;var Km=32768,wQ=100;async function CQ(e){let t=e.database||e.schema||"data",r=RQ()[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=OQ({noSync:!0,maxDbs:NQ.MAX_DBS}),f,E=d.openDB(yQ,new xI(!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++%wQ===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 xI(!Q,Q);await S(I,G)}e.include_audit&&await S(IQ,Object.assign({},bQ)),await f;let A=GI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=AQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Km);gQ(c,_,0,Km),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=GI(null,{fd:c,start:Km}),f=new TQ.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(CQ,"getBackup")});var KI=T((fce,YI)=>{"use strict";var LQ=F(),{handleHDBError:DQ}=j(),UQ=lO(),MQ=kl(),PQ=hm(),vQ=sy(),BQ=uc(),HQ=Am(),FQ=Cy(),qQ=Fy(),GQ=dc(),xQ=Ky(),kQ=sI(),VQ=lI(),$Q=dI(),YQ=mI(),KQ=OI(),WQ=Lm(),QQ=II(),zQ=MI(),JQ=vI(),$I=qI(),XQ=VI(),Wm=class extends UQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return xQ(t)}async getDataByHash(t){return await HQ(t)}async searchByHash(t){return await FQ(t)}async getDataByValue(t,r){return await qQ(t,r)}async searchByValue(t){return await GQ(t)}async createSchema(t){return await vQ(t)}async dropSchema(t){return await kQ(t)}async createTable(t,r){return await VQ(t,r)}async dropTable(t){return await WQ(t)}async createAttribute(t){return await MQ(t)}async createRecords(t){return await PQ(t)}async updateRecords(t){return await $Q(t)}async upsertRecords(t){try{return await YQ(t)}catch(r){throw DQ(r,null,null,LQ.ERR,r)}}async deleteRecords(t){return await BQ(t)}async dropAttribute(t){return await QQ(t)}async deleteAuditLogsBefore(t){return await KQ(t)}async readAuditLog(t){return await zQ(t)}writeTransaction(t,r,s){return JQ.writeTransaction(t,r,s)}flush(t,r){return $I.flush(t,r)}resetReadTxn(t,r){return $I.resetReadTxn(t,r)}getBackup(t){return XQ(t)}};YI.exports=Wm});var tw={};Qe(tw,{ResourceBridge:()=>Jm});function Xm({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 QI(e,t){let r=Hs(e),s=Xm(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 Hs(e){let t=e.database||e.schema||ZQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,jQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function zI(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*JI(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 XI,p_,Es,jI,ZI,ms,Qm,zm,ew,jQ,ZQ,ez,tz,WI,Jm,rw=Te(()=>{"use strict";XI=D(KI()),p_=D(No()),Es=D(j());fe();jI=D(Ja()),ZI=D(tc()),ms=D(b()),Qm=D(an()),zm=D(ds()),ew=D($());fi();ml();({HDB_ERROR_MSGS:jQ}=Es.hdb_errors),ZQ="data",ez=1e4,tz=10,Jm=class extends XI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),WI=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=Hs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xm(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return pc({database:t.schema,table:null}),Qm.signalSchemaChange(new zm.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await jm(t.schema),Qm.signalSchemaChange(new zm.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,WI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,jI.default)(t);(0,ZI.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 zI(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,ew.async_set_timeout)(tz),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%ez===0&&await _();return u.length>0&&await _(),n?zI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,p_.default)(t,"hashes");if(r)throw r;return QI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of QI(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=Hs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Xm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of JI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return JI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Xm,"getSelect");a(QI,"getRecords");a(Hs,"getTable");a(zI,"createDeleteResponse");a(JI,"groupRecordsInHistory")});var _s=T((Tce,sw)=>{"use strict";var{ResourceBridge:rz}=(rw(),Z(tw)),sz=X();sz.initSync();var S_;function nz(){return S_||(S_=new rz,S_)}a(nz,"getBridge");sw.exports=nz()});var aw=T((gce,ow)=>{"use strict";var nw=require("lodash"),Sc=require("mathjs"),iz=require("jsonata"),iw=$();ow.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?nw.uniqWith(e,nw.isEqual):e,searchJSON:oz,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 oz(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(iw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iw.isEmpty(this.__ala__.res[r])){let s=iz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(oz,"searchJSON")});var uw=T((Oce,cw)=>{"use strict";var rt=require("moment"),Zm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;cw.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Zm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Zm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Zm)}});var fw=T((Nce,dw)=>{"use strict";var az=require("@turf/area"),cz=require("@turf/length"),uz=require("@turf/circle"),lz=require("@turf/difference"),_z=require("@turf/distance"),dz=require("@turf/boolean-contains"),fz=require("@turf/boolean-equal"),Ez=require("@turf/boolean-disjoint"),hz=require("@turf/helpers"),lw=b(),ue=$(),ln=F();dw.exports={geoArea:mz,geoLength:pz,geoCircle:Sz,geoDifference:Tz,geoDistance:_w,geoNear:Rz,geoContains:gz,geoEqual:Az,geoCrosses:Oz,geoConvert:Nz};function mz(e){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return az.default(e)}catch(t){return ln.trace(t,e),NaN}}a(mz,"geoArea");function pz(e,t){if(ue.isEmpty(e))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return cz.default(e,{units:t||"kilometers"})}catch(r){return ln.trace(r,e),NaN}}a(pz,"geoLength");function Sz(e,t,r){if(ue.isEmpty(e))return NaN;if(ue.isEmpty(t))return NaN;typeof e=="string"&&(e=ue.autoCastJSON(e));try{return uz.default(e,t,{units:r||"kilometers"})}catch(s){return ln.trace(s,e,t),NaN}}a(Sz,"geoCircle");function Tz(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 lz(e,t)}catch(r){return ln.trace(r,e,t),NaN}}a(Tz,"geoDifference");function _w(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 _z.default(e,t,{units:r||"kilometers"})}catch(s){return ln.trace(s,e,t),NaN}}a(_w,"geoDistance");function Rz(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 _w(e,t,s)<=r}catch(n){return ln.trace(n,e,t),!1}}a(Rz,"geoNear");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 ln.trace(r,e,t),!1}}a(gz,"geoContains");function Az(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 fz.default(e,t)}catch(r){return ln.trace(r,e,t),!1}}a(Az,"geoEqual");function Oz(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!Ez.default(e,t)}catch(r){return ln.trace(r,e,t),!1}}a(Oz,"geoCrosses");function Nz(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(lw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lw.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=ue.autoCastJSON(e)),hz[t](e,r)}a(Nz,"geoConvert")});var T_=T((yce,Ew)=>{var wi=aw(),Nr=uw(),Fs=fw();Ew.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=Nr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Nr.current_time,e.fn.extract=e.fn.EXTRACT=Nr.extract,e.fn.date=e.fn.DATE=Nr.date,e.fn.date_format=e.fn.DATE_FORMAT=Nr.date_format,e.fn.date_add=e.fn.DATE_ADD=Nr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Nr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Nr.date_diff,e.fn.now=e.fn.NOW=Nr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Nr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Nr.get_server_time,e.fn.getdate=e.fn.GETDATE=Nr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Nr.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 Sw=T((Ice,pw)=>{"use strict";var Rc=require("lodash"),Jt=require("alasql");Jt.options.cache=!1;var bz=T_(),hw=require("clone"),R_=require("recursive-iterator"),re=F(),le=$(),Io=_s(),yz=b(),{hdb_errors:Iz}=j(),{getDatabases:mw}=(fe(),Z(Ce)),wz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";bz(Jt);var ep=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 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(hw(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=mw()[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 R_(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 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(!le.isEmpty(yz.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(hw(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(wz)>-1&&this.tables.forEach(n=>{let i={columnid:mw()[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 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=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(Iz.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)}};pw.exports=ep});var Gr=T((Cce,Tw)=>{"use strict";var Cz=cO();Tw.exports={searchByConditions:Dz,searchByHash:Uz,searchByValue:Mz,search:Pz};var tp=_s(),{transformReq:rp}=$(),Lz=Sw();async function Dz(e){return rp(e),tp.searchByConditions(e)}a(Dz,"searchByConditions");async function Uz(e){rp(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of tp.searchByHash(e))r&&t.push(r);return t}a(Uz,"searchByHash");async function Mz(e){rp(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of tp.searchByValue(e))t.push(r);return t}a(Mz,"searchByValue");function Pz(e,t){try{let r=new Cz(e);r.validate(),new Lz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Pz,"search")});var g_=T((Dce,Rw)=>{"use strict";var vz=_s();Rw.exports={writeTransaction:Bz};function Bz(e,t,r){return vz.writeTransaction(e,t,r)}a(Bz,"writeTransaction")});var Nw=T((Pce,Ow)=>{"use strict";var Hz=Gr(),Fz=on(),gw=F(),qz=xr(),Mce=g_(),Gz=require("clone"),np=require("alasql"),xz=T_(),Aw=require("util"),kz=Aw.promisify(Fz.getTableSchema),Vz=Aw.promisify(Hz.search),$z=b(),sp=$();xz(np);Ow.exports={update:Kz};var Yz="There was a problem performing this update. Please check the logs and try again.";async function Kz({statement:e,hdb_user:t}){let r=await kz(e.table.databaseid,e.table.tableid),s=Wz(e.columns);sp.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Gz(n),c=sp.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=np.parse(u).statements[0],l=await Vz(_),d=Qz(s,l);return zz(o,d,t)}a(Kz,"update");function Wz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=np.compile(`SELECT ${r.expression.toString()} AS [${$z.FUNC_VAL}] FROM ?`)}),t}catch(t){throw gw.error(t),new Error(Yz)}}a(Wz,"createUpdateRecord");function Qz(e,t){return sp.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Qz,"buildUpdateRecords");async function zz(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){gw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(zz,"updateRecords")});var yw=T((Fce,bw)=>{var Jz=require("alasql"),Xz=Gr(),jz=F(),Zz=_s(),op=require("util"),ip=$(),eJ=b(),tJ=on(),Bce=g_(),Hce=xr(),rJ="record",sJ="successfully deleted",nJ=op.callbackify(cJ),iJ=op.promisify(Xz.search),oJ=op.promisify(tJ.getTableSchema);bw.exports={convertDelete:nJ};function aJ(e){return`${e.deleted_hashes.length} ${rJ}${e.deleted_hashes.length===1?"":"s"} ${sJ}`}a(aJ,"generateReturnMessage");async function cJ({statement:e,hdb_user:t}){let r=await oJ(e.table.databaseid,e.table.tableid);ip.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=ip.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Jz.parse(o).statements[0],u={operation:eJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await iJ(c);let _=await Zz.deleteRecords(u);return ip.isEmptyOrZeroLength(_.message)&&(_.message=aJ(_)),delete _.txn_time,_}catch(_){throw jz.error(_),_.hdb_code?_.message:_}}a(cJ,"convertDelete")});var Dw=T((Gce,Lw)=>{"use strict";var uJ=Si(),{hdb_errors:Iw}=j(),{getDatabases:ww}=(fe(),Z(Ce));Lw.exports={checkSchemaExists:Cw,checkSchemaTableExists:lJ,schema_describe:uJ};async function Cw(e){if(!ww()[e])return Iw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Cw,"checkSchemaExists");async function lJ(e,t){let r=await Cw(e);if(r)return r;if(!ww()[e][t])return Iw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(lJ,"checkSchemaTableExists")});var gc=T((kce,_J)=>{_J.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 b_={};Qe(b_,{addAnalyticsListener:()=>Nc,recordAction:()=>br,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>dJ});function dJ(e){xw=e}function br(e,t,r,s,n){if(!xw)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_||fJ()}function kr(e,t,r,s,n){br(!!e,t,r,s,n)}function Nc(e){$w.push(e)}function fJ(){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 Yw){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 Kw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Ci.threadId,byThread:!0,...s});for(let n of $w)n(t);N_=new Map,Ci.parentPort?Ci.parentPort.postMessage({type:Vw,report:r}):zw({report:r})},kw).unref()}async function EJ(e,t=6e4){let r=up(),s=Ww(),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 Kw()}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 Yw){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,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-Uw,active:E-Mw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Uw=f,Mw=E}async function Pw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function up(){return vw||(vw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Ww(){return Bw||(Bw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function pJ(){Qw=!0;let e=(0,Oc.get)(cp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await EJ(kw,e),await Pw(up(),hJ),await Pw(Ww(),mJ)},Math.min(e/2,2147483647)).unref()}function zw(e,t){let r=e.report;r.threadId=t?.threadId||Ci.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(Hw+=s.mean*s.count);r.totalBytesProcessed=Hw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Fw.get(t))}),Fw.set(t,t.performance.eventLoopUtilization())),r.id=(0,O_.getNextMonotonicTime)(),up().primaryStore.put(r.id,r),Qw||pJ(),SJ&&(Jw=RJ(r))}async function RJ(e){if(await Jw,!xn){let r=(0,Ac.dirname)((0,Gw.getLogFilePath)());try{xn=await(0,ap.open)((0,Ac.join)(r,"analytics.log"),"r+")}catch{xn=await(0,ap.open)((0,Ac.join)(r,"analytics.log"),"w+")}}let t=(await xn.stat()).size;if(t>TJ){let r=Buffer.alloc(t);await xn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await xn.write(r,{position:0}),await xn.truncate(r.length),t=r.length}await xn.write(JSON.stringify(e)+`
|
|
8
|
+
`,t)}var Ci,qw,Gw,Ac,ap,O_,Oc,cp,N_,xw,A_,kw,Vw,$w,Yw,Uw,Mw,Kw,hJ,mJ,vw,Bw,Qw,Hw,Fw,SJ,Jw,xn,TJ,kn=Te(()=>{Ci=require("worker_threads"),qw=D(Ze());fe();Gw=D(F()),Ac=require("path"),ap=require("fs/promises"),O_=D(mr()),Oc=D(X()),cp=D(b());Pr();(0,Oc.initSync)();N_=new Map,xw=(0,Oc.get)(cp.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(dJ,"setAnalyticsEnabled");a(br,"recordAction");lt.recordAnalytics=br;a(kr,"recordActionBinary");A_=0,kw=1e3,Vw="analytics-report",$w=[];a(Nc,"addAnalyticsListener");Yw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(fJ,"sendAnalytics");a(EJ,"aggregation");Uw=0,Mw=0,Kw=a(()=>new Promise(setImmediate),"rest");a(Pw,"cleanup");hJ=36e5,mJ=31536e6;a(up,"getRawAnalyticsTable");a(Ww,"getAnalyticsTable");(0,qw.setChildListenerByType)(Vw,zw);a(pJ,"startScheduledTasks");Hw=0,Fw=new Map,SJ=!1;a(zw,"recordAnalytics");TJ=1e6;a(RJ,"logAnalytics")});var st=T((rue,hC)=>{"use strict";var yt=X();yt.initSync();var gJ=require("fs-extra"),AJ=require("semver"),Ic=require("path"),{monotonicFactory:OJ}=require("ulidx"),jw=OJ(),NJ=require("util"),Zw=require("child_process"),bJ=NJ.promisify(Zw.exec),yJ=Zw.spawn,ge=ke(),Oe=b(),fp=$(),Vr=F(),y_=nn(),IJ=g_(),bc=hr(),{onMessageByType:wJ}=Ze(),{isMainThread:CJ}=require("worker_threads"),{Encoder:LJ,decode:Ep}=require("msgpackr"),eC=new LJ,{isEmpty:Li}=fp,tC=gr(),DJ=48*36e11,UJ=5e9;CJ&&wJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Lo=void 0});var{connect:MJ,StorageType:rC,RetentionPolicy:sC,AckPolicy:I_,DeliverPolicy:w_,DiscardPolicy:PJ,NatsConnection:jce,JetStreamManager:Zce,JetStreamClient:eue,StringCodec:tue,JSONCodec:vJ,createInbox:hp,headers:BJ,ErrorCode:Xw}=require("nats"),{PACKAGE_ROOT:HJ}=b(),FJ=gc(),{recordAction:qJ}=(kn(),Z(b_)),nC=vJ(),GJ="clustering",xJ=FJ.engines[ge.NATS_SERVER_NAME],kJ=Ic.join(HJ,"dependencies"),dp=Ic.join(kJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),lp,_p,yc,wo,Co;hC.exports={runCommand:iC,checkNATSServerInstalled:VJ,createConnection:mp,getConnection:C_,getJetStreamManager:wc,getJetStream:oC,getNATSReferences:Xt,getServerList:YJ,createLocalStream:pp,listStreams:aC,deleteLocalStream:KJ,getServerConfig:Cc,listRemoteStreams:WJ,viewStream:QJ,viewStreamIterator:zJ,publishToStream:JJ,createWorkQueueStream:XJ,addSourceToWorkStream:uC,request:ZJ,removeSourceFromWorkStream:_C,reloadNATS:Sp,reloadNATSHub:e2,reloadNATSLeaf:t2,extractServerName:lC,requestErrorHandler:r2,updateWorkStream:s2,createLocalTableStream:fC,createTableStreams:n2,purgeTableStream:EC,purgeSchemaTableStreams:i2,getStreamInfo:o2,updateLocalStreams:c2,closeConnection:$J,getJsmServerName:Lc,addNatsMsgHeader:cC,updateIngestStreamConsumer:jJ};async function iC(e,t=void 0){let{stdout:r,stderr:s}=await bJ(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
9
9
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(oC,"runCommand");async function $J(){try{await AJ.access(fp)}catch{return!1}let e=await oC(`${fp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return OJ.eq(t,kJ)}a($J,"checkNATSServerInstalled");async function pp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await rC.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await PJ({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(pp,"createConnection");async function YJ(){Ss&&(await Ss.drain(),Ss=void 0,Io=void 0,wo=void 0,Co=void 0)}a(YJ,"closeConnection");var Ss,Co;async function w_(){return Co||(Co=pp(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Co),Ss||Co}a(w_,"getConnection");async function Ic(){if(Io)return Io;Ci(Ss)&&await w_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(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 aC(){if(wo)return wo;Ci(Ss)&&await w_();let{domain:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return wo=Ss.jetstream({domain:e,timeout:6e4}),wo}a(aC,"getJetStream");async function Xt(){let e=Ss||await w_(),t=Io||await Ic(),r=wo||await aC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function KJ(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await rC.getClusterUser(),n=await pp(t,r,s),i=mp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=iC.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 Ep.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(KJ,"getServerList");async function Sp(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:sC.File,retention:nC.Limits,subjects:t,discard:vJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Sp,"createLocalStream");async function cC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(cC,"listStreams");async function WJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(WJ,"deleteLocalStream");async function QJ(e){let{connection:t}=await Xt(),r=[],s=mp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(iC.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(QJ,"listRemoteStreams");async function zJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Zw(),o={durable_name:i,ack_policy:y_.Explicit};t&&(o.deliver_policy=I_.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=hp(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(zJ,"viewStream");async function*JJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Zw(),o={durable_name:i,ack_policy:y_.Explicit};t&&(o.deliver_policy=I_.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=hp(_.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(JJ,"viewStreamIterator");async function XJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uC(s,r);let{js:n}=await Xt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:tC.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),GJ(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 fC(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 Sp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(XJ,"publishToStream");function uC(e,t){t===void 0&&(t=HJ());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(uC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),xJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(dp)&&(dp={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}),dp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(_p)&&(_p={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}),_p;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:sC.File,retention:nC.Limits,max_age:UJ,max_bytes:MJ,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:y_.Explicit,durable_name:e.durable_name,deliver_policy:I_.All,max_ack_pending:1e4});else throw s}}a(jJ,"createWorkQueueStream");async function ZJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:y_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:I_.All,max_ack_pending:1e4}))}a(ZJ,"updateIngestStreamConsumer");async function lC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=_C(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=b_.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(lC,"addSourceToWorkStream");function _C(e){return e.split(".")[1]}a(_C,"extractServerName");async function dC(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=b_.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(dC,"removeSourceFromWorkStream");async function e2(e,t,r=6e4,s=mp()){if(!Ep.isObject(t))throw new Error("data param must be an object");let n=tC.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 hp(c.data)}a(e2,"request");function Tp(e){return new Promise(async(t,r)=>{let s=IJ(fp,["--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(Tp,"reloadNATS");async function t2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Tp(e)}a(t2,"reloadNATSHub");async function r2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Tp(e)}a(r2,"reloadNATSLeaf");function s2(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(s2,"requestErrorHandler");async function n2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await fC(async()=>{e.subscribe===!0?await lC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await dC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(n2,"updateWorkStream");function fC(e){return wJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(fC,"exclusiveLock");async function EC(e,t){let r=b_.createNatsTableStreamName(e,t),s=await Cc(),n=c2(e,t,s);await Sp(r,[n])}a(EC,"createLocalTableStream");async function i2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await EC(s,n)}}a(i2,"createTableStreams");async function hC(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=b_.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(hC,"purgeTableStream");async function o2(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await hC(e,t[r])}a(o2,"purgeSchemaTableStreams");async function a2(e){return(await Ic()).streams.info(e)}a(a2,"getStreamInfo");function c2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(c2,"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 u2(){let e=await Ic(),t=await Cc(),r=await cC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=l2(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(u2,"updateLocalStreams");function l2(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(l2,"updateStreamLimits")});var U_=T((oue,RC)=>{"use strict";var Lo=Fl(),Do=Uw(),_2=G(),d2=require("uuid").v4,iue=require("clone"),L_=an(),Uo=b(),f2=require("util"),kn=_s(),{handleHDBError:jt,hdb_errors:E2}=j(),{HDB_ERROR_MSGS:C_,HTTP_STATUS_CODES:Zt}=E2,{SchemaEventMsg:D_}=ds(),pC=st(),{getDatabases:h2}=(fe(),Z(Ce)),{transformReq:Mo}=$();RC.exports={createSchema:m2,createSchemaStructure:SC,createTable:p2,createTableStructure:TC,createAttribute:A2,dropSchema:S2,dropTable:T2,dropAttribute:R2,getBackup:O2};async function m2(e){let t=await SC(e);return L_.signalSchemaChange(new D_(process.pid,e.operation,e.schema)),t}a(m2,"createSchema");async function SC(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,C_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,C_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(SC,"createSchemaStructure");async function p2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TC(e)}a(p2,"createTable");async function TC(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,C_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,C_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:d2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(TC,"createTableStructure");async function S2(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 kn.dropSchema(e),L_.signalSchemaChange(new D_(process.pid,e.operation,e.schema)),await pC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(S2,"dropSchema");async function T2(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 kn.dropTable(e),await pC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(T2,"dropTable");async function R2(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 kn.dropAttribute(e),g2(e),L_.signalSchemaChange(new D_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw _2.error(`Got an error deleting attribute ${f2.inspect(e)}.`),s}}a(R2,"dropAttribute");function g2(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(g2,"dropAttributeFromGlobal");async function A2(e){Mo(e);let t=h2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await kn.createAttribute(e),L_.signalSchemaChange(new D_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(A2,"createAttribute");function O2(e){return kn.getBackup(e)}a(O2,"getBackup")});var AC=T((cue,gC)=>{"use strict";var{OPERATIONS_ENUM:N2}=b(),Rp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=N2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};gC.exports=Rp});var gp=T((_ue,IC)=>{"use strict";var b2=_s(),lue=AC(),M_=$(),P_=b(),y2=X(),{handleHDBError:OC,hdb_errors:I2}=j(),{HDB_ERROR_MSGS:NC,HTTP_STATUS_CODES:bC}=I2,w2=Object.values(P_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),yC="To use this operation audit log must be enabled in harperdb-config.yaml";IC.exports=C2;async function C2(e){if(M_.isEmpty(e.schema))throw new Error(NC.SCHEMA_REQUIRED_ERR);if(M_.isEmpty(e.table))throw new Error(NC.TABLE_REQUIRED_ERR);if(!y2.get(P_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw OC(new Error,yC,bC.BAD_REQUEST,P_.LOG_LEVELS.ERROR,yC,!0);let t=M_.checkSchemaTableExist(e.schema,e.table);if(t)throw OC(new Error,t,bC.NOT_FOUND,P_.LOG_LEVELS.ERROR,t,!0);if(!M_.isEmpty(e.search_type)&&w2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await b2.readAuditLog(e)}a(C2,"readAuditLog")});var CC=T((fue,wC)=>{"use strict";var{OPERATIONS_ENUM:L2}=b(),Ap=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=L2.GET_BACKUP,this.schema=t,this.table=r}};wC.exports=Ap});var UC=T((pue,DC)=>{"use strict";var D2=_s(),hue=CC(),Op=$(),U2=b(),mue=X(),{handleHDBError:M2,hdb_errors:P2}=j(),{HDB_ERROR_MSGS:LC,HTTP_STATUS_CODES:v2}=P2;DC.exports=B2;async function B2(e){if(Op.isEmpty(e.schema))throw new Error(LC.SCHEMA_REQUIRED_ERR);if(Op.isEmpty(e.table))throw new Error(LC.TABLE_REQUIRED_ERR);let t=Op.checkSchemaTableExist(e.schema,e.table);if(t)throw M2(new Error,t,v2.NOT_FOUND,U2.LOG_LEVELS.ERROR,t,!0);return await D2.getBackup(read_audit_log_object)}a(B2,"getBackup")});var qC=T((Tue,HC)=>{var Vn=require("validate.js"),PC=Fe(),Po=b(),{handleHDBError:H2,hdb_errors:q2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:F2}=q2,Np=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),G2={STRUCTURE_USER:"structure_user"},MC=Object.values(Po.ROLE_TYPES_ENUM),x2="attribute_permissions",k2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,V2=[x2,...Object.values(vo)],vC=[vo.READ,vo.INSERT,vo.UPDATE],$2=[k2,...vC];function Y2(e){let t=Np();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,BC(e,t)}a(Y2,"addRoleValidation");function K2(e){let t=Np();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,BC(e,t)}a(K2,"alterRoleValidation");function W2(e){let t=Np();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PC.validateObject(e,t)}a(W2,"dropRoleValidation");var Q2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function BC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)Q2.includes(s[o])||n.push(s[o]);n.length>0&&nt(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=PC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nt(o,r)}),e.permission){let o=z2(e);o&&nt(o,r),MC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&nt(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(MC.indexOf(o)<0){if(o===G2.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]||nt(Xe.SCHEMA_NOT_FOUND(d),r)}continue}nt(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(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]){nt(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{V2.includes(l)||nt(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||nt(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){nt(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(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=>{!$2.includes(p)&&p!==vo.DELETE&&nt(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){nt(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||nt(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(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}`;nt(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return J2(r)}a(BC,"customValidate");HC.exports={addRoleValidation:Y2,alterRoleValidation:K2,dropRoleValidation:W2};function z2(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(z2,"validateNoSUPerms");function J2(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 H2(new Error,s,F2.BAD_REQUEST)}else return null}a(J2,"generateRolePermResponse");function nt(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(nt,"addPermError")});var Lp=T((gue,kC)=>{"use strict";var FC=xr(),GC=Gr(),X2=Ai(),yp=qC(),Ip=an(),j2=require("uuid").v4,Z2=require("util"),v_=b(),e4=$(),wp=GC.searchByValue,t4=GC.searchByHash,r4=Z2.promisify(X2.delete),s4=vs(),n4=No(),{hdb_errors:i4,handleHDBError:Bo}=j(),{HDB_ERROR_MSGS:xC,HTTP_STATUS_CODES:B_}=i4,{UserEventMsg:Cp}=ds();kC.exports={addRole:o4,alterRole:a4,dropRole:c4,listRoles:u4};function bp(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(bp,"scrubRoleDetails");async function o4(e){let t=yp.addRoleValidation(e);if(t)throw t;e=bp(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 wp(r)||[])}catch(i){throw Bo(i)}if(s&&s.length>0)throw Bo(new Error,xC.ROLE_ALREADY_EXISTS(e.role),B_.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 FC.insert(n),Ip.signalUserChange(new Cp(process.pid)),e=bp(e),e}a(o4,"addRole");async function a4(e){let t=yp.alterRoleValidation(e);if(t)throw t;e=bp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FC.update(r)}catch(n){throw Bo(n)}if(s&&s?.message==="updated 0 of 1 records")throw Bo(new Error,"Invalid role id",B_.BAD_REQUEST,void 0,void 0,!0);return await Ip.signalUserChange(new Cp(process.pid)),e}a(a4,"alterRole");async function c4(e){let t=yp.dropRoleValidation(e);if(t)throw Bo(new Error,t,B_.BAD_REQUEST,void 0,void 0,!0);let r=new n4(v_.SYSTEM_SCHEMA_NAME,v_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await t4(r));if(s.length===0)throw Bo(new Error,xC.ROLE_NOT_FOUND,B_.NOT_FOUND,void 0,void 0,!0);let n=new s4(v_.SYSTEM_SCHEMA_NAME,v_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await wp(n)),o=!1;if(e4.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 r4(c),Ip.signalUserChange(new Cp(process.pid)),`${s[0].role} successfully deleted`}a(c4,"dropRole");async function u4(){return wp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(u4,"listRoles")});var KC=T((Oue,YC)=>{"use strict";var l4=X(),$n=require("joi"),_4=Fe(),VC=require("moment"),d4=require("fs-extra"),Dp=require("path"),f4=require("lodash"),Lc=b(),{LOG_LEVELS:Li}=b(),E4="YYYY-MM-DD hh:mm:ss",h4=Dp.resolve(__dirname,"../logs");YC.exports=function(e){return _4.validateBySchema(e,m4)};var m4=$n.object({from:$n.custom($C),until:$n.custom($C),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(p4)});function $C(e,t){if(VC(e,VC.ISO_8601).format(E4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($C,"validateDatetime");function p4(e,t){if(f4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=l4.get(Lc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Lc.LOG_NAMES.HDB:e,i=n===Lc.LOG_NAMES.INSTALL?Dp.join(h4,Lc.LOG_NAMES.INSTALL):Dp.join(s,n);return d4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(p4,"validateReadLogPath")});var Mp=T((bue,QC)=>{"use strict";var H_=b(),S4=G(),T4=X(),R4=KC(),Up=require("path"),WC=require("fs-extra"),{once:g4}=require("events"),{handleHDBError:A4,hdb_errors:O4}=j(),{PACKAGE_ROOT:N4}=b(),b4=Up.join(N4,"logs"),y4=1e3,I4=200;QC.exports=w4;async function w4(e){let t=R4(e);if(t)throw A4(t,t.message,O4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=T4.get(H_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?H_.LOG_NAMES.HDB:e.log_name,n=s===H_.LOG_NAMES.INSTALL?Up.join(b4,H_.LOG_NAMES.INSTALL):Up.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?y4: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(WC.statSync(n).size-(h+5)*I4,0));let S=WC.createReadStream(n,{start:p});S.on("error",F=>{S4.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&&(Yn(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&&(Yn(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&&(Yn(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&&(Yn(F,f,I),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Yn(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&&(Yn(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&&(Yn(F,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Yn(F,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await g4(S,"close"),I}a(w4,"readLog");function Yn(e,t,r){t==="desc"?C4(e,r):t==="asc"?L4(e,r):r.push(e)}a(Yn,"pushLineToResult");function C4(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(C4,"insertDescending");function L4(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(L4,"insertAscending")});var F_=T((Lue,jC)=>{"use strict";var Pp=require("joi"),{string:q_,boolean:zC,date:D4}=Pp.types(),U4=Fe(),{validateSchemaExists:Iue,validateTableExists:wue,validateSchemaName:Cue}=Ds(),M4=b(),P4=ke(),JC=X();JC.initSync();var v4=q_.invalid(JC.get(M4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(P4.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(),XC={operation:q_.valid("add_node","update_node"),node_name:v4,subscriptions:Pp.array().items({table:q_.optional(),schema:q_.required(),subscribe:zC.required(),publish:zC.required().custom(H4),start_time:D4.iso()}).min(1).required()};function B4(e){return U4.validateBySchema(e,Pp.object(XC))}a(B4,"addUpdateNodeValidator");function H4(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(H4,"checkForFalsy");jC.exports={addUpdateNodeValidator:B4,validation_schema:XC}});var eL=T((Uue,ZC)=>{var q4=Fe(),F4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ZC.exports=function(e){return q4.validateObject(e,F4)}});var Bp=T((Mue,tL)=>{"use strict";var G4=b().OPERATIONS_ENUM,vp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=G4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tL.exports=vp});var sL=T((vue,rL)=>{"use strict";var x4={OPERATION:"operation",REFRESH:"refresh"},Hp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},qp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};rL.exports={JWTTokens:Hp,TOKEN_TYPE_ENUM:x4,JWTRSAKeys:qp}});var Mc=T((Hue,aL)=>{"use strict";var Uc=require("jsonwebtoken"),Fp=require("fs-extra"),Gp=$(),$r=b(),{handleHDBError:er,hdb_errors:k4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=k4,Dc=G(),nL=jl(),Vp=gr(),V4=xr().update,$4=Bp(),Y4=an(),{UserEventMsg:K4}=ds(),Kn=X();Kn.initSync();var xp=require("path"),{JWTTokens:W4,JWTRSAKeys:Q4,TOKEN_TYPE_ENUM:G_}=sL(),z4=Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",J4=Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",x_="RS256",kp;aL.exports={createTokens:X4,validateOperationToken:Z4,refreshOperationToken:j4,validateRefreshToken:oL};async function X4(e){if(Gp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Gp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Gp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Vp.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 k_(),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 iL(i,r.private_key,r.passphrase),c=await Uc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:J4,algorithm:x_,subject:G_.REFRESH}),u=nL.hash(c),_=new $4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await V4(_)}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 Y4.signalUserChange(new K4(process.pid)),new W4(o,c)}a(X4,"createTokens");async function iL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:z4,algorithm:x_,subject:G_.OPERATION})}a(iL,"signOperationToken");async function k_(){if(kp===void 0)try{let e=xp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=xp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=xp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Fp.readFile(e)).toString(),n=(await Fp.readFile(t)).toString(),i=(await Fp.readFile(r)).toString();kp=new Q4(i,n,s)}catch(e){throw Dc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return kp}a(k_,"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 oL(e.refresh_token);let t=await k_(),r=await Uc.decode(e.refresh_token);return{operation_token:await iL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(j4,"refreshOperationToken");async function Z4(e){try{let t=await k_(),r=await Uc.verify(e,t.public_key,{algorithms:x_,subject:G_.OPERATION});return await Vp.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(Z4,"validateOperationToken");async function oL(e){let t;try{let r=await k_(),s=await Uc.verify(e,r.public_key,{algorithms:x_,subject:G_.REFRESH});t=await Vp.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(!nL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(oL,"validateRefreshToken")});var $p=T((Gue,lL)=>{"use strict";var e3=eL(),Ho=require("passport"),t3=require("passport-local").Strategy,r3=require("passport-http").BasicStrategy,s3=require("util"),n3=gr(),uL=s3.callbackify(n3.findAndValidateUser),Fue=dr(),i3=b(),cL=Mc();Ho.use(new t3(function(e,t,r){uL(e,t,r)}));Ho.use(new r3(function(e,t,r){uL(e,t,r)}));Ho.serializeUser(function(e,t){t(null,e)});Ho.deserializeUser(function(e,t){t(null,e)});function o3(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===i3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?cL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):cL.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(o3,"authorize");function a3(e,t){let r=e3(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(a3,"checkPermissions");lL.exports={authorize:o3,checkPermissions:a3}});var qo=T((kue,_L)=>{"use strict";var Yp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Kp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};_L.exports={Node:Yp,NodeSubscription:Kp}});var fL=T(($ue,dL)=>{"use strict";var c3=b().OPERATIONS_ENUM,Wp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=c3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};dL.exports=Wp});var Pc=T((Kue,EL)=>{"use strict";var Qp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},zp=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)}};EL.exports={RemotePayloadObject:Qp,RemotePayloadSubscription:zp}});var mL=T((Que,hL)=>{"use strict";var Jp=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}};hL.exports=Jp});var TL=T((Zue,SL)=>{"use strict";var u3=mL(),Jue=ze(),pL=Ue(),l3=G(),{getSchemaPath:Xue,getTransactionAuditStorePath:jue}=ve(),{getDatabases:_3}=(fe(),Z(Ce));SL.exports=d3;async function d3(e){let t=new u3;try{let r=_3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await pL.environmentDataSize(schema_path,e.name),o=await pL.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){l3.warn(`unable to stat table dbi due to ${r}`)}return t}a(d3,"lmdbGetTableSize")});var gL=T((tle,RL)=>{"use strict";var Xp=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}};RL.exports=Xp});var Fo=T((ile,bL)=>{"use strict";var f3=require("fs-extra"),E3=require("path"),Ft=require("systeminformation"),Wn=G(),h3=st(),jp=ke(),$_=b(),m3=TL(),NL=pi(),{getThreadInfo:AL}=Ze(),cS=X();cS.initSync();var p3=gL(),{openEnvironment:sle}=Ue(),{getSchemaPath:nle}=ve(),{database:S3}=(fe(),Z(Ce)),V_;bL.exports={getHDBProcessInfo:rS,getNetworkInfo:nS,getDiskInfo:sS,getMemoryInfo:tS,getCPUInfo:eS,getTimeInfo:Zp,getSystemInformation:iS,systemInformation:T3,getTableSize:oS,getMetrics:aS};function Zp(){return Ft.time()}a(Zp,"getTimeInfo");async function eS(){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 Wn.error(`error in getCPUInfo: ${e}`),{}}}a(eS,"getCPUInfo");async function tS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ft.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(tS,"getMemoryInfo");async function rS(){let e={core:[],clustering:[]};try{let t=await Ft.processes(),r;try{r=Number.parseInt(await f3.readFile(E3.join(cS.get($_.CONFIG_PARAMS.ROOTPATH),$_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===$_.NODE_ERROR_CODES.ENOENT)Wn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(rS,"getHDBProcessInfo");async function sS(){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 Wn.error(`error in getDiskInfo: ${t}`),e}}a(sS,"getDiskInfo");async function nS(){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 Wn.error(`error in getNetworkInfo: ${t}`),e}}a(nS,"getNetworkInfo");async function iS(){if(V_!==void 0)return V_;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,V_=e,V_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(iS,"getSystemInformation");async function oS(){let e=[],t=await NL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await m3(s));return e}a(oS,"getTableSize");async function aS(){let e=await NL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=S3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(aS,"getMetrics");async function OL(){if(cS.get($_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await h3.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(OL,"getNatsStreamInfo");async function T3(e){let t=new p3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await iS(),t.time=Zp(),t.cpu=await eS(),t.memory=await tS(),t.disk=await sS(),t.network=await nS(),t.harperdb_processes=await rS(),t.table_size=await oS(),t.metrics=await aS(),t.threads=await AL(),t.replication=await OL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await iS();break;case"time":t.time=Zp();break;case"cpu":t.cpu=await eS();break;case"memory":t.memory=await tS();break;case"disk":t.disk=await sS();break;case"network":t.network=await nS();break;case"harperdb_processes":t.harperdb_processes=await rS();break;case"table_size":t.table_size=await oS();break;case"database_metrics":case"metrics":t.metrics=await aS();break;case"threads":t.threads=await AL();break;case"replication":t.replication=await OL();break;default:break}return t}a(T3,"systemInformation")});var uS=T((ale,yL)=>{"use strict";yL.exports={version:R3,printVersion:g3};var Y_=Rc();function R3(){if(Y_)return Y_.version}a(R3,"version");function g3(){Y_&&console.log(`HarperDB Version ${Y_.version}`)}a(g3,"printVersion")});var ln=T((_le,LL)=>{"use strict";var A3=xr(),lS=$(),O3=require("util"),Di=b(),IL=X();IL.initSync();var N3=$p(),wL=Gr(),{Node:ule,NodeSubscription:lle}=qo(),b3=No(),y3=fL(),{RemotePayloadObject:I3,RemotePayloadSubscription:w3}=Pc(),{handleHDBError:C3,hdb_errors:L3}=j(),{HTTP_STATUS_CODES:D3,HDB_ERROR_MSGS:U3}=L3,M3=vs(),P3=Fo(),v3=uS(),{getDatabases:B3}=(fe(),Z(Ce)),H3=O3.promisify(N3.authorize),q3=wL.searchByHash,F3=wL.searchByValue;LL.exports={authHeaderToUser:G3,isEmpty:x3,getNodeRecord:k3,upsertNodeRecord:V3,buildNodePayloads:$3,checkClusteringEnabled:Y3,getAllNodeRecords:K3,getSystemInfo:W3,reverseSubscription:CL};async function G3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await H3(t,null),e}a(G3,"authHeaderToUser");function x3(e){return e==null}a(x3,"isEmpty");async function k3(e){let t=new b3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return q3(t)}a(k3,"getNodeRecord");async function V3(e){let t=new y3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return A3.upsert(t)}a(V3,"upsertNodeRecord");function CL(e){if(lS.isEmpty(e.subscribe)||lS.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(CL,"reverseSubscription");function $3(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=lS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CL(c),E=B3()[u]?.[_],h=new w3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new I3(r,t,n,s)}a($3,"buildNodePayloads");function Y3(){if(!IL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw C3(new Error,U3.CLUSTERING_NOT_ENABLED,D3.BAD_REQUEST,void 0,void 0,!0)}a(Y3,"checkClusteringEnabled");async function K3(){let e=new M3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await F3(e))}a(K3,"getAllNodeRecords");async function W3(){let e=await P3.getSystemInformation();return{hdb_version:v3.version(),node_version:e.node_version,platform:e.platform}}a(W3,"getSystemInfo")});var _S=T((fle,qL)=>{"use strict";var K_=st(),DL=$(),UL=ke(),ML=b(),W_=G(),PL=U_(),Q3=Dm(),{RemotePayloadObject:z3}=Pc(),{handleHDBError:vL,hdb_errors:J3}=j(),{HTTP_STATUS_CODES:BL}=J3,{NodeSubscription:HL}=qo();qL.exports=X3;async function X3(e,t){let r;try{r=await K_.request(`${t}.${UL.REQUEST_SUFFIX}`,new z3(ML.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),W_.trace("Response from remote describe all request:",r)}catch(o){W_.error(`addNode received error from describe all request to remote node: ${o}`);let c=K_.requestErrorHandler(o,"add_node",t);throw vL(new Error,c,BL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===UL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw vL(new Error,o,BL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===ML.SYSTEM_SCHEMA_NAME){await K_.createLocalTableStream(c,u);let h=new HL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=DL.doesSchemaExist(c),l=s[c]!==void 0,d=u?DL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(W_.trace(`addNode creating schema: ${c}`),await PL.createSchema({operation:"create_schema",schema:c})),!d&&f){W_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new Q3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await PL.createTable(h)}await K_.createLocalTableStream(c,u);let E=new HL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(X3,"reviewSubscriptions")});var J_=T((hle,xL)=>{"use strict";var{handleHDBError:Q_,hdb_errors:j3}=j(),{HTTP_STATUS_CODES:z_}=j3,{addUpdateNodeValidator:Z3}=F_(),vc=G(),GL=b(),FL=ke(),eX=$(),dS=st(),Bc=ln(),tX=X(),rX=_S(),{Node:sX,NodeSubscription:nX}=qo(),{broadcast:iX}=Ze(),oX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",aX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",cX=tX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=uX;async function uX(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=Z3(e);if(r)throw Q_(r,r.message,z_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Bc.getNodeRecord(s);if(!eX.isEmptyOrZeroLength(d))throw Q_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,z_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await rX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=oX,o;let c=Bc.buildNodePayloads(n,cX,GL.OPERATIONS_ENUM.ADD_NODE,await Bc.getSystemInfo());vc.trace("addNode sending remote payload:",c);let u;try{u=await dS.request(`${s}.${FL.REQUEST_SUFFIX}`,c)}catch(d){vc.error(`addNode received error from request: ${d}`);let f=dS.requestErrorHandler(d,"add_node",s);throw Q_(new Error,f,z_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Q_(new Error,d,z_.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 dS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new nX(E.schema,E.table,E.publish,E.subscribe))}let l=new sX(s,_,u.system_info);return await Bc.upsertNodeRecord(l),iX({type:"nats_update"}),i.length>0?o.message=aX:o.message=`Successfully added '${s}' to manifest`,o}a(uX,"addNode")});var ES=T((ple,$L)=>{"use strict";var{handleHDBError:X_,hdb_errors:lX}=j(),{HTTP_STATUS_CODES:j_}=lX,{addUpdateNodeValidator:_X}=F_(),Hc=G(),VL=b(),kL=ke(),dX=$(),fS=st(),qc=ln(),fX=X(),{cloneDeep:EX}=require("lodash"),hX=_S(),{NodeSubscription:mX}=qo(),{broadcast:pX}=Ze(),SX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",TX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",RX=fX.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME);$L.exports=gX;async function gX(e){Hc.trace("updateNode called with:",e),qc.checkClusteringEnabled();let t=_X(e);if(t)throw X_(t,t.message,j_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=EX(await qc.getNodeRecord(r));if(dX.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 hX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=SX,o;let c=qc.buildNodePayloads(n,RX,VL.OPERATIONS_ENUM.UPDATE_NODE,await qc.getSystemInfo());Hc.trace("updateNode sending remote payload:",c);let u;try{u=await fS.request(`${r}.${kL.REQUEST_SUFFIX}`,c)}catch(_){Hc.error(`updateNode received error from request: ${_}`);let l=fS.requestErrorHandler(_,"update_node",r);throw X_(new Error,l,j_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw X_(new Error,_,j_.INTERNAL_SERVER_ERROR,"error",_)}Hc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Hc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await fS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await AX(s[0],n,u.system_info),i.length>0?o.message=TX:o.message=`Successfully updated '${r}'`,o}a(gX,"updateNode");async function AX(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 mX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qc.upsertNodeRecord(s),pX({type:"nats_update"})}a(AX,"updateNodeTable")});var zL=T((Tle,QL)=>{"use strict";var WL=require("joi"),{string:YL}=WL.types(),OX=Fe(),KL=b(),NX=X(),bX=ke();QL.exports=yX;function yX(e){let t=YL.invalid(NX.get(KL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(bX.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=WL.object({operation:YL.valid(KL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return OX.validateBySchema(e,r)}a(yX,"removeNodeValidator")});var ed=T((gle,tD)=>{"use strict";var{handleHDBError:JL,hdb_errors:IX}=j(),{HTTP_STATUS_CODES:XL}=IX,wX=zL(),Fc=G(),jL=ln(),CX=$(),Z_=b(),ZL=ke(),eD=st(),LX=X(),{RemotePayloadObject:DX}=Pc(),{NodeSubscription:UX}=qo(),MX=dc(),PX=Ai(),{broadcast:vX}=Ze(),BX=LX.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);tD.exports=HX;async function HX(e){Fc.trace("removeNode called with:",e),jL.checkClusteringEnabled();let t=wX(e);if(t)throw JL(t,t.message,XL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await jL.getNodeRecord(r);if(CX.isEmptyOrZeroLength(s))throw JL(new Error,`Node '${r}' was not found.`,XL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new DX(Z_.OPERATIONS_ENUM.REMOVE_NODE,BX,[]),i,o=!1;try{i=await eD.request(`${r}.${ZL.REQUEST_SUFFIX}`,n),Fc.trace("Remove node reply from remote node:",r,i)}catch(u){Fc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Fc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new UX(l.schema,l.table,!1,!1);await eD.updateWorkStream(d,r)}let c=new MX(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await PX.deleteRecord(c),vX({type:"nats_update"}),i?.status===ZL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(HX,"removeNode")});var nD=T((Ole,sD)=>{"use strict";var rD=require("joi"),{string:qX,array:FX}=rD.types(),GX=Fe(),xX=F_();sD.exports=kX;function kX(e){let t=rD.object({operation:qX.valid("configure_cluster").required(),connections:FX.items(xX.validation_schema).required()});return GX.validateBySchema(e,t)}a(kX,"configureClusterValidator")});var hS=T((ble,uD)=>{"use strict";var VX=b(),td=G(),$X=$(),YX=ed(),KX=J_(),iD=ln(),WX=nD(),{handleHDBError:oD,hdb_errors:QX}=j(),{HTTP_STATUS_CODES:aD}=QX,zX="Configure cluster complete.",JX="Failed to configure the cluster. Check the logs for more details.",XX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uD.exports=jX;async function jX(e){td.trace("configure cluster called with:",e),iD.checkClusteringEnabled();let t=WX(e);if(t)throw oD(t,t.message,aD.BAD_REQUEST,void 0,void 0,!0);let r=await iD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(cD(YX,{operation:VX.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(cD(KX,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($X.isEmptyOrZeroLength(u))return{message:zX,connections:_};if(l)return{message:XX,failed_nodes:u,connections:_};throw oD(new Error,JX,aD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(jX,"configureCluster");async function cD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(cD,"functionWrapper")});var _D=T((Ile,lD)=>{"use strict";var rd=require("joi"),ZX=Fe(),{validateSchemaExists:ej,validateTableExists:tj,validateSchemaName:rj}=Ds(),sj=rd.object({operation:rd.string().valid("purge_stream"),schema:rd.string().custom(ej).custom(rj).required(),table:rd.string().custom(tj).required()});function nj(e){return ZX.validateBySchema(e,sj)}a(nj,"purgeStreamValidator");lD.exports=nj});var mS=T((Cle,dD)=>{"use strict";var{handleHDBError:ij,hdb_errors:oj}=j(),{HTTP_STATUS_CODES:aj}=oj,cj=_D(),uj=st(),lj=ln();dD.exports=_j;async function _j(e){let t=cj(e);if(t)throw ij(t,t.message,aj.BAD_REQUEST,void 0,void 0,!0);lj.checkClusteringEnabled();let{schema:r,table:s}=e;return await uj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(_j,"purgeStream")});var TS=T((Dle,SD)=>{"use strict";var SS=ln(),dj=st(),hD=X(),sd=b(),Ui=ke(),fj=$(),pS=G(),{RemotePayloadObject:Ej}=Pc(),{ErrorCode:fD}=require("nats"),ED=hD.get(sd.CONFIG_PARAMS.CLUSTERING_ENABLED),mD=hD.get(sd.CONFIG_PARAMS.CLUSTERING_NODENAME);SD.exports={clusterStatus:hj,buildNodeStatus:pD};async function hj(){let e={node_name:mD,is_enabled:ED,connections:[]};if(!ED)return e;let t=await SS.getAllNodeRecords();if(fj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(pD(t[s],e.connections));return await Promise.allSettled(r),e}a(hj,"clusterStatus");async function pD(e,t){let r=e.name,s=new Ej(sd.OPERATIONS_ENUM.CLUSTER_STATUS,mD,void 0,await SS.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await dj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,pS.error(`Error getting node status from ${r} `,n))}catch(u){pS.warn(`Error getting node status from ${r}`,u),u.code===fD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===fD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new mj(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 SS.upsertNodeRecord(u)}catch(u){pS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(pD,"buildNodeStatus");function mj(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(mj,"NodeStatusObject")});var gS=T((Mle,TD)=>{"use strict";var{handleHDBError:pj,hdb_errors:Sj}=j(),{HTTP_STATUS_CODES:Tj}=Sj,Rj=st(),gj=ln(),RS=$(),nd=require("joi"),Aj=Fe(),Oj=2e3,Nj=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});TD.exports=bj;async function bj(e){gj.checkClusteringEnabled();let t=Aj.validateBySchema(e,Nj);if(t)throw pj(t,t.message,Tj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||RS.autoCastBoolean(s),o=n===void 0||RS.autoCastBoolean(n),c={nodes:[]},u=await Rj.getServerList(r??Oj),_={};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:RS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(bj,"clusterNetwork")});var OD=T((vle,AD)=>{"use strict";var AS=require("joi"),RD=Fe(),{route_constraints:gD}=SE();AD.exports={setRoutesValidator:yj,deleteRoutesValidator:Ij};function yj(e){let t=AS.object({server:AS.valid("hub","leaf").required(),routes:gD.required()});return RD.validateBySchema(e,t)}a(yj,"setRoutesValidator");function Ij(e){let t=AS.object({routes:gD.required()});return RD.validateBySchema(e,t)}a(Ij,"deleteRoutesValidator")});var NS=T((Hle,ID)=>{"use strict";var Mi=hr(),OS=$(),id=b(),ND=OD(),{handleHDBError:bD,hdb_errors:wj}=j(),{HTTP_STATUS_CODES:yD}=wj,Cj="cluster routes successfully set",Lj="cluster routes successfully deleted";ID.exports={setRoutes:Dj,getRoutes:Uj,deleteRoutes:Mj};function Dj(e){let t=ND.setRoutesValidator(e);if(t)throw bD(t,t.message,yD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=OS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Mi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Cj,set:o,skipped:i}}a(Dj,"setRoutes");function Uj(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Uj,"getRoutes");function Mj(e){let t=ND.deleteRoutesValidator(e);if(t)throw bD(t,t.message,yD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=OS.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=OS.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(id.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Lj,deleted:i,skipped:o}}a(Mj,"deleteRoutes")});var CD=T((Fle,wD)=>{"use strict";var Gc=require("alasql"),Pi=require("recursive-iterator"),Ts=G(),Pj=$(),xc=b(),bS=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,Bj(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>xc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!xc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][xc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=vj(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!xc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gc.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 vj(e){return e.filter(t=>t[xc.PERMS_CRUD_ENUM.READ])}a(vj,"filterReadRestrictedAttrs");function Bj(e,t,r,s,n){Hj(e,t,r,s,n)}a(Bj,"interpretAST");function kc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(kc,"addSchemaTableToMap");function Hj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gc.yy.Insert?xj(e,t,r):e instanceof Gc.yy.Select?qj(e,t,r,s,n):e instanceof Gc.yy.Update?Fj(e,t,r):e instanceof Gc.yy.Delete?Gj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Hj,"getRecordAttributesAST");function qj(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(Pj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{kc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),kc(c.table,t,r,s,n)});let o=new Pi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ts.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new Pi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Pi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new Pi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(qj,"getSelectAttributes");function Fj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;kc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&yS(e.table.tableid,n,i.columnid,t,r)}a(Fj,"getUpdateAttributes");function Gj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;kc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&yS(e.table.tableid,n,i.columnid,t,r)}a(Gj,"getDeleteAttributes");function xj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;kc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&yS(e.into.tableid,n,i.columnid,t,r)}a(xj,"getInsertAttributes");function yS(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(yS,"pushAttribute");wD.exports=bS});var CS=T((xle,MD)=>{var od=rc(),LD=require("chalk"),yr=G(),DD=require("prompt"),{promisify:kj}=require("util"),IS=b(),Vj=require("fs-extra"),$j=require("path"),Yj=$(),Kj=uS(),UD=X();UD.initSync();var Wj=require("moment"),Qj=kj(DD.get),zj=$j.join(UD.getHdbBasePath(),IS.LICENSE_KEY_DIR_NAME,IS.LICENSE_FILE_NAME,IS.LICENSE_FILE_NAME);MD.exports={getFingerprint:Xj,setLicense:Jj,parseLicense:wS,register:jj,getRegistrationInfo:eZ};async function Jj(e){if(e&&e.key&&e.company){try{yr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await wS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw yr.error(r),yr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Jj,"setLicense");async function Xj(){let e={};try{e=await od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw yr.error(r),yr.error(t),new Error(r)}return e}a(Xj,"getFingerprint");async function wS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");yr.info("Validating license input...");let r=od.validateLicense(e,t);if(yr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(yr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(yr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{yr.info("writing license to disk"),await Vj.writeFile(zj,JSON.stringify({license_key:e,company:t}))}catch(s){throw yr.error("Failed to write License"),s}return"Registration successful."}a(wS,"parseLicense");async function jj(){let e=await Zj();return wS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(jj,"register");async function Zj(){let e=await od.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:LD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:LD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{DD.start()}catch(s){yr.error(s)}let r;try{r=await Qj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Zj,"promptForRegistration");async function eZ(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await od.getLicense()}catch(r){throw yr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Yj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Kj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Wj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(eZ,"getRegistrationInfo")});var vD=T((Vle,PD)=>{"use strict";var tZ=ke(),LS=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+tZ.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"}};PD.exports=LS});var qD=T((Yle,HD)=>{"use strict";var BD=ke(),DS=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+BD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+BD.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"}};HD.exports=DS});var GD=T((Wle,FD)=>{"use strict";var US=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FD.exports=US});var kD=T((zle,xD)=>{"use strict";var rZ=ke(),MS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+rZ.SERVER_SUFFIX.ADMIN,this.password=r}};xD.exports=MS});var BS=T((Xle,YD)=>{"use strict";var Go=require("path"),ud=require("fs-extra"),sZ=vD(),nZ=qD(),iZ=GD(),oZ=kD(),PS=gr(),ko=$(),sr=hr(),cd=b(),Vc=ke(),{CONFIG_PARAMS:je}=cd,$c=G(),Yc=X(),VD=nn(),vS=st(),xo="clustering",aZ=1e4,$D=5;YD.exports={generateNatsConfig:uZ,removeNatsConfig:lZ,getHubConfigPath:cZ};function cZ(){let e=Yc.get(je.ROOTPATH);return Go.join(e,xo,Vc.NATS_CONFIG_FILES.HUB_SERVER)}a(cZ,"getHubConfigPath");async function uZ(e=!1,t=void 0){Yc.initSync();let r=Yc.get(je.ROOTPATH),s=Go.join(r,xo,Vc.PID_FILES.HUB),n=Go.join(r,xo,Vc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Go.join(r,xo,Vc.NATS_CONFIG_FILES.HUB_SERVER),c=Go.join(r,xo,Vc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await vS.checkNATSServerInstalled()||ld("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await PS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await PS.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 oZ(te.username,VD.decrypt(te.hash))),N.push(new iZ(te.username,VD.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 sZ(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),$c.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new nZ(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),$c.trace(`Leaf server config written to ${c}`))}a(uZ,"generateNatsConfig");async function ad(e){let t=Yc.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}`;$c.error(t),console.error(t),process.exit(1)}a(ld,"generateNatsConfigError");async function lZ(e){let{port:t,config_file:r}=vS.getServerConfig(e),{username:s,decrypt_hash:n}=await PS.getClusterUser(),i=0,o=2e3;for(;i<$D;){try{let _=await vS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){$c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=$D)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(aZ),u=Go.join(Yc.get(je.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),$c.notify(e,"started.")}a(lZ,"removeNatsConfig")});var XD=T((Zle,JD)=>{"use strict";var Ir=X(),_Z=rc(),ae=b(),Kc=ke(),_n=require("path"),{PACKAGE_ROOT:dd}=b(),KD=X(),_d=$(),Vo="/dev/null",dZ=_n.join(dd,"launchServiceScripts"),WD=_n.join(dd,"utility/scripts"),fZ=_n.join(WD,ae.HDB_RESTART_SCRIPT),QD=_n.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Kc.NATS_BINARY_NAME);function zD(){let t=_Z.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(zD,"generateMainServerConfig");var EZ=9930;function hZ(){Ir.initSync(!0);let e=Ir.get(ae.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.HUB_SERVER),r=_n.join(Ir.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=KD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[Ir.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==EZ?"-"+s:""),script:QD,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 Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(hZ,"generateNatsHubServerConfig");var mZ=9940;function pZ(){Ir.initSync(!0);let e=Ir.get(ae.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.LEAF_SERVER),r=_n.join(Ir.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=KD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[Ir.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==mZ?"-"+s:""),script:QD,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 Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(pZ,"generateNatsLeafServerConfig");function SZ(){Ir.initSync();let e=_n.join(Ir.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:dZ,autorestart:!1};return Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(SZ,"generateClusteringUpgradeV4ServiceConfig");function TZ(){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:WD},script:fZ}}a(TZ,"generateRestart");function RZ(){return{apps:[zD()]}}a(RZ,"generateAllServiceConfigs");JD.exports={generateAllServiceConfigs:RZ,generateMainServerConfig:zD,generateRestart:TZ,generateNatsHubServerConfig:hZ,generateNatsLeafServerConfig:pZ,generateClusteringUpgradeV4ServiceConfig:SZ}});var _U=T((r_e,lU)=>{"use strict";var Ae=b(),gZ=$(),dn=BS(),Wc=st(),Fs=ke(),Qn=XD(),fd=X(),zn=G(),AZ=ln(),{startWorker:jD,onMessageFromWorkers:OZ}=Ze(),NZ=Fo(),t_e=require("util"),bZ=require("child_process"),yZ=require("fs"),{execFile:IZ}=bZ,pe;lU.exports={enterPM2Mode:wZ,start:Jn,stop:HS,reload:eU,restart:tU,list:qS,describe:sU,connect:fn,kill:MZ,startAllServices:PZ,startService:FS,getUniqueServicesList:nU,restartAllServices:vZ,isServiceRegistered:iU,reloadStopStart:oU,restartHdb:rU,deleteProcess:DZ,startClusteringProcesses:cU,startClusteringThreads:uU,isHdbRestartRunning:UZ,isClusteringRunning:HZ,stopClustering:BZ,reloadClustering:qZ};var Qc=!1;OZ(e=>{e.type==="restart"&&fd.initSync(!0)});function wZ(){Qc=!0}a(wZ,"enterPM2Mode");function fn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{zn.setupConsoleLogging(),r&&t(r),e(s)})})}a(fn,"connect");var nr,CZ=10,ZD;function Jn(e,t=!1){if(Qc)return LZ(e);let r=IZ(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),!ZD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<CZ&&(yZ.existsSync(dn.getHubConfigPath())?Jn(e):(await dn.generateNatsConfig(!0),Jn(e),await new Promise(c=>setTimeout(c,3e3)),await dn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await dn.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&&Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?zn.OUTPUTS.STDERR:zn.OUTPUTS.STDOUT;zn.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Fs.LOG_LEVELS[f]}if(Fs.LOG_LEVEL_HIERARCHY[o]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?zn.OUTPUTS.STDERR:zn.OUTPUTS.STDOUT;zn.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(()=>{ZD=!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 LZ(e){return new Promise(async(t,r)=>{try{await fn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(LZ,"startWithPM2");function HS(e){if(!Qc){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 fn()}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(HS,"stop");function eU(e){return new Promise(async(t,r)=>{try{await fn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(eU,"reload");function tU(e){if(!Qc)for(let t of nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await fn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(tU,"restart");function DZ(e){return new Promise(async(t,r)=>{try{await fn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(DZ,"deleteProcess");async function rU(){await Jn(Qn.generateRestart())}a(rU,"restartHdb");async function UZ(){let e=await qS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(UZ,"isHdbRestartRunning");function qS(){return new Promise(async(e,t)=>{try{await fn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(qS,"list");function sU(e){return new Promise(async(t,r)=>{try{await fn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(sU,"describe");function MZ(){if(!Qc){for(let e of nr||[])e.kill();nr=[];return}return new Promise(async(e,t)=>{try{await fn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(MZ,"kill");async function PZ(){try{await cU(),await uU(),await Jn(Qn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(PZ,"startAllServices");async function FS(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Qn.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Qn.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Qn.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Qn.generateNatsHubServerConfig(),await Jn(r,t),await dn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Qn.generateNatsLeafServerConfig(),await Jn(r,t),await dn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Qn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Jn(r)}catch(r){throw pe?.disconnect(),r}}a(FS,"startService");async function nU(){try{let e=await qS(),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(nU,"getUniqueServicesList");async function vZ(e=[]){try{let t=!1,r=await nU();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 tU(o))}t&&await oU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(vZ,"restartAllServices");async function iU(e){if(nr?.find(r=>r.name===e))return!0;let t=await NZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iU,"isServiceRegistered");async function oU(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 sU(e),s=gZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await HS(e),await FS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await rU():await eU(e)}a(oU,"reloadStopStart");var aU;async function cU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await FS(r,e)}}a(cU,"startClusteringProcesses");async function uU(){aU=jD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Wc.createWorkQueueStream(Fs.WORK_QUEUE_CONSUMER_NAMES),await Wc.updateIngestStreamConsumer(),await Wc.updateLocalStreams();let e=await AZ.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){zn.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(uU,"startClusteringThreads");async function BZ(){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 aU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await HS(t)}}a(BZ,"stopClustering");async function HZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await iU(t)===!1)return!1}return!0}a(HZ,"isClusteringRunning");async function qZ(){await dn.generateNatsConfig(!0),await Wc.reloadNATSHub(),await Wc.reloadNATSLeaf(),await dn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await dn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(qZ,"reloadClustering")});var pd=T((n_e,SU)=>{"use strict";var FZ=require("minimist"),{isMainThread:kS,parentPort:EU}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:zc}=Ve,Gs=G(),VS=$(),Ed=BS(),$o=st(),GS=ke(),hU=hr(),xs=_U(),dU=Fo(),GZ=aE(),{restartWorkers:hd,onMessageByType:xZ}=Ze(),{handleHDBError:kZ,hdb_errors:VZ}=j(),{HTTP_STATUS_CODES:$Z}=VZ,md=X();md.initSync();var Jc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,YZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",fU="Clustering is not enabled so cannot be restarted",KZ="Invalid service",Yo,Yr;SU.exports={restart:mU,restartService:$S};kS&&xZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?$S({service:e.workerType}):mU({operation:"restart"})});async function mU(e){Yr=Object.keys(e).length===0,Yo=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=FZ(process.argv);if(t.service){await $S(t);return}if(Yr&&!Yo){console.error(YZ);return}if(Yr&&console.log(Jc),Yo){xs.enterPM2Mode(),Gs.notify(Jc);let r=GZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return VS.isEmptyOrZeroLength(Object.keys(r))||hU.updateConfigValue(void 0,void 0,r,!0,!0),QZ(),Jc}return kS?(Gs.notify(Jc),setTimeout(()=>{hd()},50)):EU.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Jc}a(mU,"restart");async function $S(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw kZ(new Error,KZ,$Z.BAD_REQUEST,void 0,void 0,!0);if(Yo=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!kS)return EU.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case zc.clustering:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fU;break}Yr&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await pU();break;case zc.clustering_config:case zc["clustering config"]:if(!md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fU;break}Yr&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await xs.reloadClustering();break;case"custom_functions":case"custom functions":case zc.harperdb:case zc.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"),Gs.notify("Restarting http_workers"),Yr?await xs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a($S,"restartService");async function WZ(){await $o.publishToStream(`${GS.SUBJECT_PREFIXES.TXN}.${GS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,GS.WORK_QUEUE_CONSUMER_NAMES.stream_name,$o.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(WZ,"postDummyNatsMsg");async function QZ(){await pU(),await xs.restart(Ve.HDB_PROC_DESCRIPTOR),await VS.async_set_timeout(2e3),md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await xS(),Yr&&(await $o.closeConnection(),process.exit(0))}a(QZ,"restartPM2Mode");async function pU(){if(!hU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dU.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await Ed.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await xS(),Yr&&await $o.closeConnection();else{await WZ(),await Ed.generateNatsConfig(!0),Yo?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dU.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await VS.async_set_timeout(3e3),await xS(),await $o.updateLocalStreams(),Yr&&await $o.closeConnection(),Gs.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(pU,"restartClustering");async function xS(){await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ed.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(xS,"removeNatsConfig")});var CU=T((a_e,wU)=>{"use strict";var o_e=require("lodash"),ir=b(),{handleHDBError:TU,hdb_errors:zZ}=j(),{HDB_ERROR_MSGS:JZ,HTTP_STATUS_CODES:XZ}=zZ,YS=G();wU.exports={getRolePermissions:ZZ};var vi=Object.create(null),jZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),OU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NU=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"),KS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...NU(t,r,s,n)}),"table_perms_template"),RU=a((e,t=NU())=>({attribute_name:e,describe:IU(t),[Xc]:t[Xc],[WS]:t[WS],[QS]:t[QS]}),"attr_perms_template"),gU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xc]:t}),"timestamp_attr_perms_template"),{READ:Xc,INSERT:WS,UPDATE:QS}=ir.PERMS_CRUD_ENUM,bU=Object.values(ir.PERMS_CRUD_ENUM),yU=[Xc,WS,QS];function ZZ(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(vi[t]&&vi[t].key===s)return vi[t].perms;let n=e5(e,r);return vi[t]?vi[t].key=s:vi[t]=jZ(s),vi[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 YS.error(s),YS.debug(r),TU(new Error,JZ.OUTDATED_PERMS_TRANSLATION_ERROR,XZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
-
${r.stack}`;throw YS.error(s),TU(new Error)}}}a(ZZ,"getRolePermissions");function e5(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]=t5(t[i]);return}r[i]=OU(),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],_=r5(c,u);r[i].describe||bU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=KS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=KS()})}),r}a(e5,"translateRolePermissions");function t5(e){let t=OU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=KS(!0,!0,!0,!0,!0)}),t}a(t5,"createStructureUserPermissions");function r5(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=gU(d,l[Xc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=RU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=IU(l),n.attribute_permissions.push(l),c||s5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=gU(_):l=RU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=AU(n),n}else return e.describe=AU(e),e}a(r5,"getTableAttrPerms");function AU(e){return bU.filter(t=>e[t]).length>0}a(AU,"getSchemaTableDescribePerm");function IU(e){return yU.filter(t=>e[t]).length>0}a(IU,"getAttributeDescribePerm");function s5(e,t){yU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(s5,"checkForHashPerms")});var LU={};Qe(LU,{Resources:()=>Sd,keyArrayToString:()=>Ko,resetResources:()=>n5,resources:()=>Xn});function n5(){return Xn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,Xn,jc=Te(()=>{di();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(n5,"resetResources");a(Ko,"keyArrayToString")});var Bi,zS=Te(()=>{Bi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Zc={};Qe(Zc,{authentication:()=>qU,bypassAuth:()=>_5,login:()=>f5,logout:()=>E5,start:()=>d5});function _5(){HU=!0}async function qU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?c5?a5:[]:o5?i5:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return 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 UU.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?DU.notify(S):DU.error(S)},"authAuditLog"),d;if(s){if(d=Hi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.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 l5&&(Hi.get(h)||(Hi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:jn({error:A.message},e)})}Hi.set(s,d),u5&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,!1):HU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,PU.getSuperUser)());Td&&(e.session.update=function(E){if(!u){u=(0,vU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,UU.put(E)},e.login=async function(E,h){e.user=await lt.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")&&Xn.loginPath?(f.status=302,f.headers.set("Location",Xn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Bi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function d5({server:e,port:t}){e.request(qU,{port:t||"all"}),MU||(MU=!0,setInterval(()=>{Hi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BU.user.addListener(()=>{Hi=new Map}))}async function f5(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 E5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var PU,Rd,vU,Kr,It,gd,BU,DU,i5,o5,a5,c5,UU,Td,HU,u5,l5,Hi,MU,Ad=Te(()=>{PU=D(gr());Pr();jc();Rd=D(Mc());fe();vU=require("uuid"),Kr=D(X()),It=D(b()),gd=D(G()),BU=D(nc());zS();Wo();DU=(0,gd.loggerWithTag)("auth-event");Kr.initSync();i5=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),o5=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),a5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),c5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,u5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,l5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;lt.onInvalidatedUser(()=>{Hi=new Map});a(_5,"bypassAuth");a(qU,"authentication");a(d5,"start");a(f5,"login");a(E5,"logout")});var YU=T((T_e,$U)=>{"use strict";var Se=require("joi"),FU=require("fs-extra"),GU=require("path"),hn=Fe(),xU=X(),kU=b(),VU=G(),{hdb_errors:h5}=j(),{HDB_ERROR_MSGS:Gt}=h5,En=/^[a-zA-Z0-9-_]+$/;$U.exports={getDropCustomFunctionValidator:p5,setCustomFunctionValidator:S5,addComponentValidator:A5,dropCustomFunctionProjectValidator:O5,packageComponentValidator:N5,deployComponentValidator:b5,setComponentFileValidator:T5,getComponentFileValidator:g5,dropComponentFileValidator:R5};function Od(e,t,r){try{let s=xU.get(kU.CONFIG_PARAMS.COMPONENTSROOT),n=GU.join(s,t);return FU.existsSync(n)?e?t:r.message(Gt.PROJECT_EXISTS):e?r.message(Gt.NO_PROJECT):t}catch(s){return VU.error(s),r.message(Gt.VALIDATION_ERR)}}a(Od,"checkProjectExists");function eu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(eu,"checkFilePath");function m5(e,t,r,s){try{let n=xU.get(kU.CONFIG_PARAMS.COMPONENTSROOT),i=GU.join(n,e,t,r+".js");return FU.existsSync(i)?r:s.message(Gt.NO_FILE)}catch(n){return VU.error(n),s.message(Gt.VALIDATION_ERR)}}a(m5,"checkFileExists");function p5(e){let t=Se.object({project:Se.string().pattern(En).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(En).custom(m5.bind(null,e.project,e.type)).custom(eu).required().messages({"string.pattern.base":Gt.BAD_FILE_NAME})});return hn.validateBySchema(e,t)}a(p5,"getDropCustomFunctionValidator");function S5(e){let t=Se.object({project:Se.string().pattern(En).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(eu).required(),function_content:Se.string().required()});return hn.validateBySchema(e,t)}a(S5,"setCustomFunctionValidator");function T5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(eu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hn.validateBySchema(e,t)}a(T5,"setComponentFileValidator");function R5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(eu).optional()});return hn.validateBySchema(e,t)}a(R5,"dropComponentFileValidator");function g5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(eu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return hn.validateBySchema(e,t)}a(g5,"getComponentFileValidator");function A5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!1)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return hn.validateBySchema(e,t)}a(A5,"addComponentValidator");function O5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return hn.validateBySchema(e,t)}a(O5,"dropCustomFunctionProjectValidator");function N5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return hn.validateBySchema(e,t)}a(N5,"packageComponentValidator");function b5(e){let t=Se.object({project:Se.string().pattern(En).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 hn.validateBySchema(e,t)}a(b5,"deployComponentValidator")});var Id=T((g_e,jU)=>{"use strict";var Nd=require("joi"),bd=require("path"),KU=require("fs-extra"),{exec:y5}=require("child_process"),I5=require("util"),WU=I5.promisify(y5),tu=b(),{handleHDBError:Qo,hdb_errors:w5}=j(),{HTTP_STATUS_CODES:zo}=w5,ru=X(),C5=Fe(),Jo=G();ru.initSync();var JS=ru.get(tu.CONFIG_PARAMS.COMPONENTSROOT),QU="npm install --omit=dev --json",L5=`${QU} --dry-run`;jU.exports={installModules:P5,auditModules:v5,installAllRootModules:D5,uninstallRootModule:U5,linkHarperdb:M5};async function D5(e=!1){await yd(),await su(e?"npm install --ignore-scripts":"npm install",ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(D5,"installAllRootModules");async function U5(e){await su(`npm uninstall ${e}`,ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(U5,"uninstallRootModule");async function M5(){await yd(),await su(`npm link ${tu.PACKAGE_ROOT}`,ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(M5,"linkHarperdb");async function su(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await WU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
12
|
-
`,""))}return s&&!s.includes("Debugger listening")&&
|
|
13
|
-
`,"")}a(
|
|
10
|
+
`,"")}a(iC,"runCommand");async function VJ(){try{await gJ.access(dp)}catch{return!1}let e=await iC(`${dp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return AJ.eq(t,xJ)}a(VJ,"checkNATSServerInstalled");async function mp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await tC.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 MJ({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(mp,"createConnection");async function $J(){Ss&&(await Ss.drain(),Ss=void 0,wo=void 0,Co=void 0,Lo=void 0)}a($J,"closeConnection");var Ss,Lo;async function C_(){return Lo||(Lo=mp(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await Lo),Ss||Lo}a(C_,"getConnection");async function wc(){if(wo)return wo;Li(Ss)&&await C_();let{domain:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(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 oC(){if(Co)return Co;Li(Ss)&&await C_();let{domain:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Li(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Co=Ss.jetstream({domain:e,timeout:6e4}),Co}a(oC,"getJetStream");async function Xt(){let e=Ss||await C_(),t=wo||await wc(),r=Co||await oC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function YJ(e){let t=yt.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await tC.getClusterUser(),n=await mp(t,r,s),i=hp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=nC.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 fp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(YJ,"getServerList");async function pp(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:rC.File,retention:sC.Limits,subjects:t,discard:PJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(pp,"createLocalStream");async function aC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(aC,"listStreams");async function KJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(KJ,"deleteLocalStream");async function WJ(e){let{connection:t}=await Xt(),r=[],s=hp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(nC.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(WJ,"listRemoteStreams");async function QJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=jw(),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=Ep(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(QJ,"viewStream");async function*zJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=jw(),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=Ep(_.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(zJ,"viewStreamIterator");async function JJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=cC(s,r);let{js:n}=await Xt(),i=await Lc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:eC.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 dC(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 pp(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(JJ,"publishToStream");function cC(e,t){t===void 0&&(t=BJ());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(cC,"addNatsMsgHeader");function Cc(e){e=e.toLowerCase();let t=Ic.join(yt.get(Oe.CONFIG_PARAMS.ROOTPATH),GJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Li(_p)&&(_p={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}),_p;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Li(lp)&&(lp={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}),lp;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Cc,"getServerConfig");async function XJ(e){let{jsm:t}=await Xt(),r=await Lc();try{await t.streams.add({name:e.stream_name,storage:rC.File,retention:sC.Limits,max_age:DJ,max_bytes:UJ,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(XJ,"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:I_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:w_.All,max_ack_pending:1e4}))}a(jJ,"updateIngestStreamConsumer");async function uC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=lC(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(uC,"addSourceToWorkStream");function lC(e){return e.split(".")[1]}a(lC,"extractServerName");async function _C(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(_C,"removeSourceFromWorkStream");async function ZJ(e,t,r=6e4,s=hp()){if(!fp.isObject(t))throw new Error("data param must be an object");let n=eC.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 Ep(c.data)}a(ZJ,"request");function Sp(e){return new Promise(async(t,r)=>{let s=yJ(dp,["--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(Sp,"reloadNATS");async function e2(){let{pid_file_path:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Sp(e)}a(e2,"reloadNATSHub");async function t2(){let{pid_file_path:e}=Cc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Sp(e)}a(t2,"reloadNATSLeaf");function r2(e,t,r){let s;switch(e.code){case Xw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Xw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(r2,"requestErrorHandler");async function s2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await dC(async()=>{e.subscribe===!0?await uC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await _C(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(s2,"updateWorkStream");function dC(e){return IJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dC,"exclusiveLock");async function fC(e,t){let r=y_.createNatsTableStreamName(e,t),s=await Lc(),n=a2(e,t,s);await pp(r,[n])}a(fC,"createLocalTableStream");async function n2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await fC(s,n)}}a(n2,"createTableStreams");async function EC(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(EC,"purgeTableStream");async function i2(e,t){if(yt.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await EC(e,t[r])}a(i2,"purgeSchemaTableStreams");async function o2(e){return(await wc()).streams.info(e)}a(o2,"getStreamInfo");function a2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(a2,"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 c2(){let e=await wc(),t=await Lc(),r=await aC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=u2(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(c2,"updateLocalStreams");function u2(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(u2,"updateStreamLimits")});var M_=T((iue,TC)=>{"use strict";var Do=Gl(),Uo=Dw(),l2=F(),_2=require("uuid").v4,nue=require("clone"),D_=an(),Mo=b(),d2=require("util"),Vn=_s(),{handleHDBError:jt,hdb_errors:f2}=j(),{HDB_ERROR_MSGS:L_,HTTP_STATUS_CODES:Zt}=f2,{SchemaEventMsg:U_}=ds(),mC=st(),{getDatabases:E2}=(fe(),Z(Ce)),{transformReq:Po}=$();TC.exports={createSchema:h2,createSchemaStructure:pC,createTable:m2,createTableStructure:SC,createAttribute:g2,dropSchema:p2,dropTable:S2,dropAttribute:T2,getBackup:A2};async function h2(e){let t=await pC(e);return D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),t}a(h2,"createSchema");async function pC(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,L_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,L_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Vn.createSchema(e),`database '${e.schema}' successfully created`}a(pC,"createSchemaStructure");async function m2(e){return Po(e),e.hash_attribute=e.primary_key??e.hash_attribute,await SC(e)}a(m2,"createTable");async function SC(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,L_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,L_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:_2(),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(SC,"createTableStructure");async function p2(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 Vn.dropSchema(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema)),await mC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(p2,"dropSchema");async function S2(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 Vn.dropTable(e),await mC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(S2,"dropTable");async function T2(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 Vn.dropAttribute(e),R2(e),D_.signalSchemaChange(new U_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw l2.error(`Got an error deleting attribute ${d2.inspect(e)}.`),s}}a(T2,"dropAttribute");function R2(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(R2,"dropAttributeFromGlobal");async function g2(e){Po(e);let t=E2()[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(g2,"createAttribute");function A2(e){return Vn.getBackup(e)}a(A2,"getBackup")});var gC=T((aue,RC)=>{"use strict";var{OPERATIONS_ENUM:O2}=b(),Tp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=O2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};RC.exports=Tp});var Rp=T((lue,yC)=>{"use strict";var N2=_s(),uue=gC(),P_=$(),v_=b(),b2=X(),{handleHDBError:AC,hdb_errors:y2}=j(),{HDB_ERROR_MSGS:OC,HTTP_STATUS_CODES:NC}=y2,I2=Object.values(v_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),bC="To use this operation audit log must be enabled in harperdb-config.yaml";yC.exports=w2;async function w2(e){if(P_.isEmpty(e.schema))throw new Error(OC.SCHEMA_REQUIRED_ERR);if(P_.isEmpty(e.table))throw new Error(OC.TABLE_REQUIRED_ERR);if(!b2.get(v_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw AC(new Error,bC,NC.BAD_REQUEST,v_.LOG_LEVELS.ERROR,bC,!0);let t=P_.checkSchemaTableExist(e.schema,e.table);if(t)throw AC(new Error,t,NC.NOT_FOUND,v_.LOG_LEVELS.ERROR,t,!0);if(!P_.isEmpty(e.search_type)&&I2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await N2.readAuditLog(e)}a(w2,"readAuditLog")});var wC=T((due,IC)=>{"use strict";var{OPERATIONS_ENUM:C2}=b(),gp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=C2.GET_BACKUP,this.schema=t,this.table=r}};IC.exports=gp});var DC=T((mue,LC)=>{"use strict";var L2=_s(),Eue=wC(),Ap=$(),D2=b(),hue=X(),{handleHDBError:U2,hdb_errors:M2}=j(),{HDB_ERROR_MSGS:CC,HTTP_STATUS_CODES:P2}=M2;LC.exports=v2;async function v2(e){if(Ap.isEmpty(e.schema))throw new Error(CC.SCHEMA_REQUIRED_ERR);if(Ap.isEmpty(e.table))throw new Error(CC.TABLE_REQUIRED_ERR);let t=Ap.checkSchemaTableExist(e.schema,e.table);if(t)throw U2(new Error,t,P2.NOT_FOUND,D2.LOG_LEVELS.ERROR,t,!0);return await L2.getBackup(read_audit_log_object)}a(v2,"getBackup")});var HC=T((Sue,BC)=>{var $n=require("validate.js"),MC=qe(),vo=b(),{handleHDBError:B2,hdb_errors:H2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:F2}=H2,Op=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),q2={STRUCTURE_USER:"structure_user"},UC=Object.values(vo.ROLE_TYPES_ENUM),G2="attribute_permissions",x2="attribute_name",{PERMS_CRUD_ENUM:Bo}=vo,k2=[G2,...Object.values(Bo)],PC=[Bo.READ,Bo.INSERT,Bo.UPDATE],V2=[x2,...PC];function $2(e){let t=Op();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,vC(e,t)}a($2,"addRoleValidation");function Y2(e){let t=Op();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,vC(e,t)}a(Y2,"alterRoleValidation");function K2(e){let t=Op();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,MC.validateObject(e,t)}a(K2,"dropRoleValidation");var W2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function vC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)W2.includes(s[o])||n.push(s[o]);n.length>0&&nt(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=MC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nt(o,r)}),e.permission){let o=Q2(e);o&&nt(o,r),UC.forEach(c=>{e.permission[c]&&!$n.isBoolean(e.permission[c])&&nt(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(UC.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]||nt(Xe.SCHEMA_NOT_FOUND(d),r)}continue}nt(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(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]){nt(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{k2.includes(l)||nt(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Bo).forEach(l=>{$n.isDefined(_[l])?$n.isBoolean(_[l])||nt(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(Xe.TABLE_PERM_MISSING(l),r,o,u)}),$n.isDefined(_.attribute_permissions)){if(!$n.isArray(_.attribute_permissions)){nt(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(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=>{!V2.includes(p)&&p!==Bo.DELETE&&nt(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!$n.isDefined(E.attribute_name)){nt(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}PC.forEach(p=>{$n.isDefined(E[p])?$n.isBoolean(E[p])||nt(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(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}`;nt(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return z2(r)}a(vC,"customValidate");BC.exports={addRoleValidation:$2,alterRoleValidation:Y2,dropRoleValidation:K2};function Q2(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(Q2,"validateNoSUPerms");function z2(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 B2(new Error,s,F2.BAD_REQUEST)}else return null}a(z2,"generateRolePermResponse");function nt(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(nt,"addPermError")});var Cp=T((Rue,xC)=>{"use strict";var FC=xr(),qC=Gr(),J2=Oi(),bp=HC(),yp=an(),X2=require("uuid").v4,j2=require("util"),B_=b(),Z2=$(),Ip=qC.searchByValue,e4=qC.searchByHash,t4=j2.promisify(J2.delete),r4=vs(),s4=bo(),{hdb_errors:n4,handleHDBError:Ho}=j(),{HDB_ERROR_MSGS:GC,HTTP_STATUS_CODES:H_}=n4,{UserEventMsg:wp}=ds();xC.exports={addRole:i4,alterRole:o4,dropRole:a4,listRoles:c4};function Np(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(Np,"scrubRoleDetails");async function i4(e){let t=bp.addRoleValidation(e);if(t)throw t;e=Np(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 Ip(r)||[])}catch(i){throw Ho(i)}if(s&&s.length>0)throw Ho(new Error,GC.ROLE_ALREADY_EXISTS(e.role),H_.CONFLICT,void 0,void 0,!0);e.id||(e.id=X2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FC.insert(n),yp.signalUserChange(new wp(process.pid)),e=Np(e),e}a(i4,"addRole");async function o4(e){let t=bp.alterRoleValidation(e);if(t)throw t;e=Np(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FC.update(r)}catch(n){throw Ho(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ho(new Error,"Invalid role id",H_.BAD_REQUEST,void 0,void 0,!0);return await yp.signalUserChange(new wp(process.pid)),e}a(o4,"alterRole");async function a4(e){let t=bp.dropRoleValidation(e);if(t)throw Ho(new Error,t,H_.BAD_REQUEST,void 0,void 0,!0);let r=new s4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await e4(r));if(s.length===0)throw Ho(new Error,GC.ROLE_NOT_FOUND,H_.NOT_FOUND,void 0,void 0,!0);let n=new r4(B_.SYSTEM_SCHEMA_NAME,B_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Ip(n)),o=!1;if(Z2.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await t4(c),yp.signalUserChange(new wp(process.pid)),`${s[0].role} successfully deleted`}a(a4,"dropRole");async function c4(){return Ip({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(c4,"listRoles")});var YC=T((Aue,$C)=>{"use strict";var u4=X(),Yn=require("joi"),l4=qe(),kC=require("moment"),_4=require("fs-extra"),Lp=require("path"),d4=require("lodash"),Dc=b(),{LOG_LEVELS:Di}=b(),f4="YYYY-MM-DD hh:mm:ss",E4=Lp.resolve(__dirname,"../logs");$C.exports=function(e){return l4.validateBySchema(e,h4)};var h4=Yn.object({from:Yn.custom(VC),until:Yn.custom(VC),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(m4)});function VC(e,t){if(kC(e,kC.ISO_8601).format(f4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(VC,"validateDatetime");function m4(e,t){if(d4.invert(Dc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=u4.get(Dc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Dc.LOG_NAMES.HDB:e,i=n===Dc.LOG_NAMES.INSTALL?Lp.join(E4,Dc.LOG_NAMES.INSTALL):Lp.join(s,n);return _4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(m4,"validateReadLogPath")});var Up=T((Nue,WC)=>{"use strict";var F_=b(),p4=F(),S4=X(),T4=YC(),Dp=require("path"),KC=require("fs-extra"),{once:R4}=require("events"),{handleHDBError:g4,hdb_errors:A4}=j(),{PACKAGE_ROOT:O4}=b(),N4=Dp.join(O4,"logs"),b4=1e3,y4=200;WC.exports=I4;async function I4(e){let t=T4(e);if(t)throw g4(t,t.message,A4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=S4.get(F_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?F_.LOG_NAMES.HDB:e.log_name,n=s===F_.LOG_NAMES.INSTALL?Dp.join(N4,F_.LOG_NAMES.INSTALL):Dp.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?b4: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(KC.statSync(n).size-(h+5)*y4,0));let S=KC.createReadStream(n,{start:p});S.on("error",G=>{p4.error(G)});let A=0,I=[],N="",Y;S.on("data",G=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;G=N+G;let K=0,B;for(;(B=w.exec(G))&&!S.destroyed;){Y&&(Y.message=G.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Mt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Mt,level:Pe,tags:se,message:""},K=B.index+x.length}N=G.slice(K)}),S.on("end",G=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(G){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),G.level===o&&w>=K&&w<=B&&A<E?A++:G.level===o&&w>=K&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(G.timestamp),K=new Date(u),G.level===o&&w>=K&&A<E?A++:G.level===o&&w>=K&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(G.timestamp),B=new Date(l),G.level===o&&w<=B&&A<E?A++:G.level===o&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(G.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case i:G.level===o&&A<E?A++:G.level===o&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(G.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Kn(G,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(G.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Kn(G,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Kn(G,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await R4(S,"close"),I}a(I4,"readLog");function Kn(e,t,r){t==="desc"?w4(e,r):t==="asc"?C4(e,r):r.push(e)}a(Kn,"pushLineToResult");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,"insertDescending");function C4(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(C4,"insertAscending")});var G_=T((Cue,XC)=>{"use strict";var Mp=require("joi"),{string:q_,boolean:QC,date:L4}=Mp.types(),D4=qe(),{validateSchemaExists:yue,validateTableExists:Iue,validateSchemaName:wue}=Ds(),U4=b(),M4=ke(),zC=X();zC.initSync();var P4=q_.invalid(zC.get(U4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(M4.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(),JC={operation:q_.valid("add_node","update_node"),node_name:P4,subscriptions:Mp.array().items({table:q_.optional(),schema:q_.required(),subscribe:QC.required(),publish:QC.required().custom(B4),start_time:L4.iso()}).min(1).required()};function v4(e){return D4.validateBySchema(e,Mp.object(JC))}a(v4,"addUpdateNodeValidator");function B4(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(B4,"checkForFalsy");XC.exports={addUpdateNodeValidator:v4,validation_schema:JC}});var ZC=T((Due,jC)=>{var H4=qe(),F4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};jC.exports=function(e){return H4.validateObject(e,F4)}});var vp=T((Uue,eL)=>{"use strict";var q4=b().OPERATIONS_ENUM,Pp=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}};eL.exports=Pp});var rL=T((Pue,tL)=>{"use strict";var G4={OPERATION:"operation",REFRESH:"refresh"},Bp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Hp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};tL.exports={JWTTokens:Bp,TOKEN_TYPE_ENUM:G4,JWTRSAKeys:Hp}});var Pc=T((Bue,oL)=>{"use strict";var Mc=require("jsonwebtoken"),Fp=require("fs-extra"),qp=$(),$r=b(),{handleHDBError:er,hdb_errors:x4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=x4,Uc=F(),sL=Zl(),kp=gr(),k4=xr().update,V4=vp(),$4=an(),{UserEventMsg:Y4}=ds(),Wn=X();Wn.initSync();var Gp=require("path"),{JWTTokens:K4,JWTRSAKeys:W4,TOKEN_TYPE_ENUM:x_}=rL(),Q4=Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",z4=Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Wn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",k_="RS256",xp;oL.exports={createTokens:J4,validateOperationToken:j4,refreshOperationToken:X4,validateRefreshToken:iL};async function J4(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 kp.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 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 nL(i,r.private_key,r.passphrase),c=await Mc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:z4,algorithm:k_,subject:x_.REFRESH}),u=sL.hash(c),_=new V4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await k4(_)}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 $4.signalUserChange(new Y4(process.pid)),new K4(o,c)}a(J4,"createTokens");async function nL(e,t,r){return await Mc.sign(e,{key:t,passphrase:r},{expiresIn:Q4,algorithm:k_,subject:x_.OPERATION})}a(nL,"signOperationToken");async function V_(){if(xp===void 0)try{let e=Gp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Gp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Gp.join(Wn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Fp.readFile(e)).toString(),n=(await Fp.readFile(t)).toString(),i=(await Fp.readFile(r)).toString();xp=new W4(i,n,s)}catch(e){throw Uc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return xp}a(V_,"getJWTRSAKeys");async function X4(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 iL(e.refresh_token);let t=await V_(),r=await Mc.decode(e.refresh_token);return{operation_token:await nL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(X4,"refreshOperationToken");async function j4(e){try{let t=await V_(),r=await Mc.verify(e,t.public_key,{algorithms:k_,subject:x_.OPERATION});return await kp.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(j4,"validateOperationToken");async function iL(e){let t;try{let r=await V_(),s=await Mc.verify(e,r.public_key,{algorithms:k_,subject:x_.REFRESH});t=await kp.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(!sL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(iL,"validateRefreshToken")});var Vp=T((que,uL)=>{"use strict";var Z4=ZC(),Fo=require("passport"),e3=require("passport-local").Strategy,t3=require("passport-http").BasicStrategy,r3=require("util"),s3=gr(),cL=r3.callbackify(s3.findAndValidateUser),Fue=dr(),n3=b(),aL=Pc();Fo.use(new e3(function(e,t,r){cL(e,t,r)}));Fo.use(new t3(function(e,t,r){cL(e,t,r)}));Fo.serializeUser(function(e,t){t(null,e)});Fo.deserializeUser(function(e,t){t(null,e)});function i3(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===n3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?aL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):aL.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(i3,"authorize");function o3(e,t){let r=Z4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(o3,"checkPermissions");uL.exports={authorize:i3,checkPermissions:o3}});var qo=T((xue,lL)=>{"use strict";var $p=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Yp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};lL.exports={Node:$p,NodeSubscription:Yp}});var dL=T((Vue,_L)=>{"use strict";var a3=b().OPERATIONS_ENUM,Kp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=a3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_L.exports=Kp});var vc=T((Yue,fL)=>{"use strict";var Wp=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Qp=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)}};fL.exports={RemotePayloadObject:Wp,RemotePayloadSubscription:Qp}});var hL=T((Wue,EL)=>{"use strict";var zp=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}};EL.exports=zp});var SL=T((jue,pL)=>{"use strict";var c3=hL(),zue=ze(),mL=Ue(),u3=F(),{getSchemaPath:Jue,getTransactionAuditStorePath:Xue}=ve(),{getDatabases:l3}=(fe(),Z(Ce));pL.exports=_3;async function _3(e){let t=new c3;try{let r=l3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await mL.environmentDataSize(schema_path,e.name),o=await mL.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){u3.warn(`unable to stat table dbi due to ${r}`)}return t}a(_3,"lmdbGetTableSize")});var RL=T((ele,TL)=>{"use strict";var Jp=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}};TL.exports=Jp});var Go=T((nle,NL)=>{"use strict";var d3=require("fs-extra"),f3=require("path"),qt=require("systeminformation"),Qn=F(),E3=st(),Xp=ke(),Y_=b(),h3=SL(),OL=Si(),{getThreadInfo:gL}=Ze(),aS=X();aS.initSync();var m3=RL(),{openEnvironment:rle}=Ue(),{getSchemaPath:sle}=ve(),{database:p3}=(fe(),Z(Ce)),$_;NL.exports={getHDBProcessInfo:tS,getNetworkInfo:sS,getDiskInfo:rS,getMemoryInfo:eS,getCPUInfo:Zp,getTimeInfo:jp,getSystemInformation:nS,systemInformation:S3,getTableSize:iS,getMetrics:oS};function jp(){return qt.time()}a(jp,"getTimeInfo");async function Zp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await 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 Qn.error(`error in getCPUInfo: ${e}`),{}}}a(Zp,"getCPUInfo");async function eS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await qt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Qn.error(`error in getMemoryInfo: ${e}`),{}}}a(eS,"getMemoryInfo");async function tS(){let e={core:[],clustering:[]};try{let t=await qt.processes(),r;try{r=Number.parseInt(await d3.readFile(f3.join(aS.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(tS,"getHDBProcessInfo");async function rS(){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 Qn.error(`error in getDiskInfo: ${t}`),e}}a(rS,"getDiskInfo");async function sS(){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 Qn.error(`error in getNetworkInfo: ${t}`),e}}a(sS,"getNetworkInfo");async function nS(){if($_!==void 0)return $_;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,$_=e,$_}catch(t){return Qn.error(`error in getSystemInformation: ${t}`),e}}a(nS,"getSystemInformation");async function iS(){let e=[],t=await OL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await h3(s));return e}a(iS,"getTableSize");async function oS(){let e=await OL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=p3({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(oS,"getMetrics");async function AL(){if(aS.get(Y_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await E3.getNATSReferences(),r=await t.streams.info(Xp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Xp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Xp.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(AL,"getNatsStreamInfo");async function S3(e){let t=new m3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await nS(),t.time=jp(),t.cpu=await Zp(),t.memory=await eS(),t.disk=await rS(),t.network=await sS(),t.harperdb_processes=await tS(),t.table_size=await iS(),t.metrics=await oS(),t.threads=await gL(),t.replication=await AL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await nS();break;case"time":t.time=jp();break;case"cpu":t.cpu=await Zp();break;case"memory":t.memory=await eS();break;case"disk":t.disk=await rS();break;case"network":t.network=await sS();break;case"harperdb_processes":t.harperdb_processes=await tS();break;case"table_size":t.table_size=await iS();break;case"database_metrics":case"metrics":t.metrics=await oS();break;case"threads":t.threads=await gL();break;case"replication":t.replication=await AL();break;default:break}return t}a(S3,"systemInformation")});var cS=T((ole,bL)=>{"use strict";bL.exports={version:T3,printVersion:R3};var K_=gc();function T3(){if(K_)return K_.version}a(T3,"version");function R3(){K_&&console.log(`HarperDB Version ${K_.version}`)}a(R3,"printVersion")});var _n=T((lle,CL)=>{"use strict";var g3=xr(),uS=$(),A3=require("util"),Ui=b(),yL=X();yL.initSync();var O3=Vp(),IL=Gr(),{Node:cle,NodeSubscription:ule}=qo(),N3=bo(),b3=dL(),{RemotePayloadObject:y3,RemotePayloadSubscription:I3}=vc(),{handleHDBError:w3,hdb_errors:C3}=j(),{HTTP_STATUS_CODES:L3,HDB_ERROR_MSGS:D3}=C3,U3=vs(),M3=Go(),P3=cS(),{getDatabases:v3}=(fe(),Z(Ce)),B3=A3.promisify(O3.authorize),H3=IL.searchByHash,F3=IL.searchByValue;CL.exports={authHeaderToUser:q3,isEmpty:G3,getNodeRecord:x3,upsertNodeRecord:k3,buildNodePayloads:V3,checkClusteringEnabled:$3,getAllNodeRecords:Y3,getSystemInfo:K3,reverseSubscription:wL};async function q3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await B3(t,null),e}a(q3,"authHeaderToUser");function G3(e){return e==null}a(G3,"isEmpty");async function x3(e){let t=new N3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return H3(t)}a(x3,"getNodeRecord");async function k3(e){let t=new b3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return g3.upsert(t)}a(k3,"upsertNodeRecord");function wL(e){if(uS.isEmpty(e.subscribe)||uS.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(wL,"reverseSubscription");function V3(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=uS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=wL(c),E=v3()[u]?.[_],h=new I3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new y3(r,t,n,s)}a(V3,"buildNodePayloads");function $3(){if(!yL.get(Ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw w3(new Error,D3.CLUSTERING_NOT_ENABLED,L3.BAD_REQUEST,void 0,void 0,!0)}a($3,"checkClusteringEnabled");async function Y3(){let e=new U3(Ui.SYSTEM_SCHEMA_NAME,Ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await F3(e))}a(Y3,"getAllNodeRecords");async function K3(){let e=await M3.getSystemInformation();return{hdb_version:P3.version(),node_version:e.node_version,platform:e.platform}}a(K3,"getSystemInfo")});var lS=T((dle,HL)=>{"use strict";var W_=st(),LL=$(),DL=ke(),UL=b(),Q_=F(),ML=M_(),W3=Um(),{RemotePayloadObject:Q3}=vc(),{handleHDBError:PL,hdb_errors:z3}=j(),{HTTP_STATUS_CODES:vL}=z3,{NodeSubscription:BL}=qo();HL.exports=J3;async function J3(e,t){let r;try{r=await W_.request(`${t}.${DL.REQUEST_SUFFIX}`,new Q3(UL.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 PL(new Error,c,vL.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===DL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw PL(new Error,o,vL.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===UL.SYSTEM_SCHEMA_NAME){await W_.createLocalTableStream(c,u);let h=new BL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=LL.doesSchemaExist(c),l=s[c]!==void 0,d=u?LL.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 ML.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 W3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await ML.createTable(h)}await W_.createLocalTableStream(c,u);let E=new BL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(J3,"reviewSubscriptions")});var X_=T((Ele,GL)=>{"use strict";var{handleHDBError:z_,hdb_errors:X3}=j(),{HTTP_STATUS_CODES:J_}=X3,{addUpdateNodeValidator:j3}=G_(),Bc=F(),qL=b(),FL=ke(),Z3=$(),_S=st(),Hc=_n(),eX=X(),tX=lS(),{Node:rX,NodeSubscription:sX}=qo(),{broadcast:nX}=Ze(),iX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",oX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",aX=eX.get(qL.CONFIG_PARAMS.CLUSTERING_NODENAME);GL.exports=cX;async function cX(e,t=!1){Bc.trace("addNode called with:",e),Hc.checkClusteringEnabled();let r=j3(e);if(r)throw z_(r,r.message,J_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Hc.getNodeRecord(s);if(!Z3.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 tX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=iX,o;let c=Hc.buildNodePayloads(n,aX,qL.OPERATIONS_ENUM.ADD_NODE,await Hc.getSystemInfo());Bc.trace("addNode sending remote payload:",c);let u;try{u=await _S.request(`${s}.${FL.REQUEST_SUFFIX}`,c)}catch(d){Bc.error(`addNode received error from request: ${d}`);let f=_S.requestErrorHandler(d,"add_node",s);throw z_(new Error,f,J_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FL.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)}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 _S.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new sX(E.schema,E.table,E.publish,E.subscribe))}let l=new rX(s,_,u.system_info);return await Hc.upsertNodeRecord(l),nX({type:"nats_update"}),i.length>0?o.message=oX:o.message=`Successfully added '${s}' to manifest`,o}a(cX,"addNode")});var fS=T((mle,VL)=>{"use strict";var{handleHDBError:j_,hdb_errors:uX}=j(),{HTTP_STATUS_CODES:Z_}=uX,{addUpdateNodeValidator:lX}=G_(),Fc=F(),kL=b(),xL=ke(),_X=$(),dS=st(),qc=_n(),dX=X(),{cloneDeep:fX}=require("lodash"),EX=lS(),{NodeSubscription:hX}=qo(),{broadcast:mX}=Ze(),pX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",SX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",TX=dX.get(kL.CONFIG_PARAMS.CLUSTERING_NODENAME);VL.exports=RX;async function RX(e){Fc.trace("updateNode called with:",e),qc.checkClusteringEnabled();let t=lX(e);if(t)throw j_(t,t.message,Z_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=fX(await qc.getNodeRecord(r));if(_X.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 EX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=pX,o;let c=qc.buildNodePayloads(n,TX,kL.OPERATIONS_ENUM.UPDATE_NODE,await qc.getSystemInfo());Fc.trace("updateNode sending remote payload:",c);let u;try{u=await dS.request(`${r}.${xL.REQUEST_SUFFIX}`,c)}catch(_){Fc.error(`updateNode received error from request: ${_}`);let l=dS.requestErrorHandler(_,"update_node",r);throw j_(new Error,l,Z_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===xL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw j_(new Error,_,Z_.INTERNAL_SERVER_ERROR,"error",_)}Fc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Fc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await dS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await gX(s[0],n,u.system_info),i.length>0?o.message=SX:o.message=`Successfully updated '${r}'`,o}a(RX,"updateNode");async function gX(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 hX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qc.upsertNodeRecord(s),mX({type:"nats_update"})}a(gX,"updateNodeTable")});var QL=T((Sle,WL)=>{"use strict";var KL=require("joi"),{string:$L}=KL.types(),AX=qe(),YL=b(),OX=X(),NX=ke();WL.exports=bX;function bX(e){let t=$L.invalid(OX.get(YL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(NX.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=KL.object({operation:$L.valid(YL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return AX.validateBySchema(e,r)}a(bX,"removeNodeValidator")});var td=T((Rle,eD)=>{"use strict";var{handleHDBError:zL,hdb_errors:yX}=j(),{HTTP_STATUS_CODES:JL}=yX,IX=QL(),Gc=F(),XL=_n(),wX=$(),ed=b(),jL=ke(),ZL=st(),CX=X(),{RemotePayloadObject:LX}=vc(),{NodeSubscription:DX}=qo(),UX=fc(),MX=Oi(),{broadcast:PX}=Ze(),vX=CX.get(ed.CONFIG_PARAMS.CLUSTERING_NODENAME);eD.exports=BX;async function BX(e){Gc.trace("removeNode called with:",e),XL.checkClusteringEnabled();let t=IX(e);if(t)throw zL(t,t.message,JL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await XL.getNodeRecord(r);if(wX.isEmptyOrZeroLength(s))throw zL(new Error,`Node '${r}' was not found.`,JL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new LX(ed.OPERATIONS_ENUM.REMOVE_NODE,vX,[]),i,o=!1;try{i=await ZL.request(`${r}.${jL.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 DX(l.schema,l.table,!1,!1);await ZL.updateWorkStream(d,r)}let c=new UX(ed.SYSTEM_SCHEMA_NAME,ed.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await MX.deleteRecord(c),PX({type:"nats_update"}),i?.status===jL.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(BX,"removeNode")});var sD=T((Ale,rD)=>{"use strict";var tD=require("joi"),{string:HX,array:FX}=tD.types(),qX=qe(),GX=G_();rD.exports=xX;function xX(e){let t=tD.object({operation:HX.valid("configure_cluster").required(),connections:FX.items(GX.validation_schema).required()});return qX.validateBySchema(e,t)}a(xX,"configureClusterValidator")});var ES=T((Nle,cD)=>{"use strict";var kX=b(),rd=F(),VX=$(),$X=td(),YX=X_(),nD=_n(),KX=sD(),{handleHDBError:iD,hdb_errors:WX}=j(),{HTTP_STATUS_CODES:oD}=WX,QX="Configure cluster complete.",zX="Failed to configure the cluster. Check the logs for more details.",JX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";cD.exports=XX;async function XX(e){rd.trace("configure cluster called with:",e),nD.checkClusteringEnabled();let t=KX(e);if(t)throw iD(t,t.message,oD.BAD_REQUEST,void 0,void 0,!0);let r=await nD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(aD($X,{operation:kX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);rd.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(aD(YX,E,E.node_name))}let c=await Promise.allSettled(i);rd.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"&&(rd.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(VX.isEmptyOrZeroLength(u))return{message:QX,connections:_};if(l)return{message:JX,failed_nodes:u,connections:_};throw iD(new Error,zX,oD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(XX,"configureCluster");async function aD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(aD,"functionWrapper")});var lD=T((yle,uD)=>{"use strict";var sd=require("joi"),jX=qe(),{validateSchemaExists:ZX,validateTableExists:ej,validateSchemaName:tj}=Ds(),rj=sd.object({operation:sd.string().valid("purge_stream"),schema:sd.string().custom(ZX).custom(tj).required(),table:sd.string().custom(ej).required()});function sj(e){return jX.validateBySchema(e,rj)}a(sj,"purgeStreamValidator");uD.exports=sj});var hS=T((wle,_D)=>{"use strict";var{handleHDBError:nj,hdb_errors:ij}=j(),{HTTP_STATUS_CODES:oj}=ij,aj=lD(),cj=st(),uj=_n();_D.exports=lj;async function lj(e){let t=aj(e);if(t)throw nj(t,t.message,oj.BAD_REQUEST,void 0,void 0,!0);uj.checkClusteringEnabled();let{schema:r,table:s}=e;return await cj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(lj,"purgeStream")});var SS=T((Lle,pD)=>{"use strict";var pS=_n(),_j=st(),ED=X(),nd=b(),Mi=ke(),dj=$(),mS=F(),{RemotePayloadObject:fj}=vc(),{ErrorCode:dD}=require("nats"),fD=ED.get(nd.CONFIG_PARAMS.CLUSTERING_ENABLED),hD=ED.get(nd.CONFIG_PARAMS.CLUSTERING_NODENAME);pD.exports={clusterStatus:Ej,buildNodeStatus:mD};async function Ej(){let e={node_name:hD,is_enabled:fD,connections:[]};if(!fD)return e;let t=await pS.getAllNodeRecords();if(dj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(mD(t[s],e.connections));return await Promise.allSettled(r),e}a(Ej,"clusterStatus");async function mD(e,t){let r=e.name,s=new fj(nd.OPERATIONS_ENUM.CLUSTER_STATUS,hD,void 0,await pS.getSystemInfo()),n,i,o=Mi.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await _j.request(Mi.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Mi.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Mi.CLUSTER_STATUS_STATUSES.CLOSED,mS.error(`Error getting node status from ${r} `,n))}catch(u){mS.warn(`Error getting node status from ${r}`,u),u.code===dD.NoResponders?o=Mi.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===dD.Timeout?o=Mi.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Mi.CLUSTER_STATUS_STATUSES.CLOSED}let c=new hj(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!==nd.PRE_4_0_0_VERSION&&await pS.upsertNodeRecord(u)}catch(u){mS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(mD,"buildNodeStatus");function hj(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(hj,"NodeStatusObject")});var RS=T((Ule,SD)=>{"use strict";var{handleHDBError:mj,hdb_errors:pj}=j(),{HTTP_STATUS_CODES:Sj}=pj,Tj=st(),Rj=_n(),TS=$(),id=require("joi"),gj=qe(),Aj=2e3,Oj=id.object({timeout:id.number().min(1),connected_nodes:id.boolean(),routes:id.boolean()});SD.exports=Nj;async function Nj(e){Rj.checkClusteringEnabled();let t=gj.validateBySchema(e,Oj);if(t)throw mj(t,t.message,Sj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||TS.autoCastBoolean(s),o=n===void 0||TS.autoCastBoolean(n),c={nodes:[]},u=await Tj.getServerList(r??Aj),_={};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:TS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Nj,"clusterNetwork")});var AD=T((Ple,gD)=>{"use strict";var gS=require("joi"),TD=qe(),{route_constraints:RD}=TE();gD.exports={setRoutesValidator:bj,deleteRoutesValidator:yj};function bj(e){let t=gS.object({server:gS.valid("hub","leaf").required(),routes:RD.required()});return TD.validateBySchema(e,t)}a(bj,"setRoutesValidator");function yj(e){let t=gS.object({routes:RD.required()});return TD.validateBySchema(e,t)}a(yj,"deleteRoutesValidator")});var OS=T((Ble,yD)=>{"use strict";var Pi=hr(),AS=$(),od=b(),OD=AD(),{handleHDBError:ND,hdb_errors:Ij}=j(),{HTTP_STATUS_CODES:bD}=Ij,wj="cluster routes successfully set",Cj="cluster routes successfully deleted";yD.exports={setRoutes:Lj,getRoutes:Dj,deleteRoutes:Uj};function Lj(e){let t=OD.setRoutesValidator(e);if(t)throw ND(t,t.message,bD.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=AS.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(od.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Pi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:wj,set:o,skipped:i}}a(Lj,"setRoutes");function Dj(){let e=Pi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Dj,"getRoutes");function Uj(e){let t=OD.deleteRoutesValidator(e);if(t)throw ND(t,t.message,bD.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=AS.isEmptyOrZeroLength(s)?null:s,Pi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=AS.isEmptyOrZeroLength(n)?null:n,Pi.updateConfigValue(od.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Cj,deleted:i,skipped:o}}a(Uj,"deleteRoutes")});var wD=T((Fle,ID)=>{"use strict";var xc=require("alasql"),vi=require("recursive-iterator"),Ts=F(),Mj=$(),kc=b(),NS=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,vj(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=>kc.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=>!kc.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][kc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Pj(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(_=>!kc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new xc.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 Pj(e){return e.filter(t=>t[kc.PERMS_CRUD_ENUM.READ])}a(Pj,"filterReadRestrictedAttrs");function vj(e,t,r,s,n){Bj(e,t,r,s,n)}a(vj,"interpretAST");function Vc(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(Vc,"addSchemaTableToMap");function Bj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof xc.yy.Insert?Gj(e,t,r):e instanceof xc.yy.Select?Hj(e,t,r,s,n):e instanceof xc.yy.Update?Fj(e,t,r):e instanceof xc.yy.Delete?qj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Bj,"getRecordAttributesAST");function Hj(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(Mj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{Vc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Vc(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(Hj,"getSelectAttributes");function Fj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.table.databaseid;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.table.tableid,n,i.columnid,t,r)}a(Fj,"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;Vc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.table.tableid,n,i.columnid,t,r)}a(qj,"getDeleteAttributes");function Gj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new vi(e.columns),n=e.into.databaseid;Vc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&bS(e.into.tableid,n,i.columnid,t,r)}a(Gj,"getInsertAttributes");function bS(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(bS,"pushAttribute");ID.exports=NS});var wS=T((Gle,UD)=>{var ad=sc(),CD=require("chalk"),yr=F(),LD=require("prompt"),{promisify:xj}=require("util"),yS=b(),kj=require("fs-extra"),Vj=require("path"),$j=$(),Yj=cS(),DD=X();DD.initSync();var Kj=require("moment"),Wj=xj(LD.get),Qj=Vj.join(DD.getHdbBasePath(),yS.LICENSE_KEY_DIR_NAME,yS.LICENSE_FILE_NAME,yS.LICENSE_FILE_NAME);UD.exports={getFingerprint:Jj,setLicense:zj,parseLicense:IS,register:Xj,getRegistrationInfo:Zj};async function zj(e){if(e&&e.key&&e.company){try{yr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await IS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw yr.error(r),yr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(zj,"setLicense");async function Jj(){let e={};try{e=await ad.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw yr.error(r),yr.error(t),new Error(r)}return e}a(Jj,"getFingerprint");async function IS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");yr.info("Validating license input...");let r=ad.validateLicense(e,t);if(yr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(yr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(yr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{yr.info("writing license to disk"),await kj.writeFile(Qj,JSON.stringify({license_key:e,company:t}))}catch(s){throw yr.error("Failed to write License"),s}return"Registration successful."}a(IS,"parseLicense");async function Xj(){let e=await jj();return IS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Xj,"register");async function jj(){let e=await ad.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:CD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:CD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{LD.start()}catch(s){yr.error(s)}let r;try{r=await Wj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(jj,"promptForRegistration");async function Zj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await ad.getLicense()}catch(r){throw yr.error(`There was an error when searching licenses due to: ${r.message}`),r}if($j.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Yj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Kj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Zj,"getRegistrationInfo")});var PD=T((kle,MD)=>{"use strict";var eZ=ke(),CS=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+eZ.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"}};MD.exports=CS});var HD=T(($le,BD)=>{"use strict";var vD=ke(),LS=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+vD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+vD.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"}};BD.exports=LS});var qD=T((Kle,FD)=>{"use strict";var DS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};FD.exports=DS});var xD=T((Qle,GD)=>{"use strict";var tZ=ke(),US=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+tZ.SERVER_SUFFIX.ADMIN,this.password=r}};GD.exports=US});var vS=T((Jle,$D)=>{"use strict";var xo=require("path"),ld=require("fs-extra"),rZ=PD(),sZ=HD(),nZ=qD(),iZ=xD(),MS=gr(),Vo=$(),sr=hr(),ud=b(),$c=ke(),{CONFIG_PARAMS:je}=ud,Yc=F(),Kc=X(),kD=nn(),PS=st(),ko="clustering",oZ=1e4,VD=5;$D.exports={generateNatsConfig:cZ,removeNatsConfig:uZ,getHubConfigPath:aZ};function aZ(){let e=Kc.get(je.ROOTPATH);return xo.join(e,ko,$c.NATS_CONFIG_FILES.HUB_SERVER)}a(aZ,"getHubConfigPath");async function cZ(e=!1,t=void 0){Kc.initSync();let r=Kc.get(je.ROOTPATH),s=xo.join(r,ko,$c.PID_FILES.HUB),n=xo.join(r,ko,$c.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=xo.join(r,ko,$c.NATS_CONFIG_FILES.HUB_SERVER),c=xo.join(r,ko,$c.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 PS.checkNATSServerInstalled()||_d("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await MS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await MS.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 iZ(te.username,kD.decrypt(te.hash))),N.push(new nZ(te.username,kD.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 rZ(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),Yc.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 sZ(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),Yc.trace(`Leaf server config written to ${c}`))}a(cZ,"generateNatsConfig");async function cd(e){let t=Kc.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}`;Yc.error(t),console.error(t),process.exit(1)}a(_d,"generateNatsConfigError");async function uZ(e){let{port:t,config_file:r}=PS.getServerConfig(e),{username:s,decrypt_hash:n}=await MS.getClusterUser(),i=0,o=2e3;for(;i<VD;){try{let _=await PS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Yc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=VD)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(oZ),u=xo.join(Kc.get(je.ROOTPATH),ko,r);await ld.writeFile(u,c),await ld.remove(u),Yc.notify(e,"started.")}a(uZ,"removeNatsConfig")});var JD=T((jle,zD)=>{"use strict";var Ir=X(),lZ=sc(),ae=b(),Wc=ke(),dn=require("path"),{PACKAGE_ROOT:fd}=b(),YD=X(),dd=$(),$o="/dev/null",_Z=dn.join(fd,"launchServiceScripts"),KD=dn.join(fd,"utility/scripts"),dZ=dn.join(KD,ae.HDB_RESTART_SCRIPT),WD=dn.resolve(fd,"dependencies",`${process.platform}-${process.arch}`,Wc.NATS_BINARY_NAME);function QD(){let t=lZ.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(QD,"generateMainServerConfig");var fZ=9930;function EZ(){Ir.initSync(!0);let e=Ir.get(ae.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Wc.NATS_CONFIG_FILES.HUB_SERVER),r=dn.join(Ir.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=YD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[Ir.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==fZ?"-"+s:""),script:WD,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 Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(EZ,"generateNatsHubServerConfig");var hZ=9940;function mZ(){Ir.initSync(!0);let e=Ir.get(ae.CONFIG_PARAMS.ROOTPATH),t=dn.join(e,"clustering",Wc.NATS_CONFIG_FILES.LEAF_SERVER),r=dn.join(Ir.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=YD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Wc.LOG_LEVEL_FLAGS[Ir.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==hZ?"-"+s:""),script:WD,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 Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=$o,i.error_file=$o),i}a(mZ,"generateNatsLeafServerConfig");function pZ(){Ir.initSync();let e=dn.join(Ir.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:_Z,autorestart:!1};return Ir.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=$o,t.error_file=$o),t}a(pZ,"generateClusteringUpgradeV4ServiceConfig");function SZ(){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:KD},script:dZ}}a(SZ,"generateRestart");function TZ(){return{apps:[QD()]}}a(TZ,"generateAllServiceConfigs");zD.exports={generateAllServiceConfigs:TZ,generateMainServerConfig:QD,generateRestart:SZ,generateNatsHubServerConfig:EZ,generateNatsLeafServerConfig:mZ,generateClusteringUpgradeV4ServiceConfig:pZ}});var lU=T((t_e,uU)=>{"use strict";var Ae=b(),RZ=$(),fn=vS(),Qc=st(),qs=ke(),zn=JD(),Ed=X(),Jn=F(),gZ=_n(),{startWorker:XD,onMessageFromWorkers:AZ}=Ze(),OZ=Go(),e_e=require("util"),NZ=require("child_process"),bZ=require("fs"),{execFile:yZ}=NZ,pe;uU.exports={enterPM2Mode:IZ,start:Xn,stop:BS,reload:ZD,restart:eU,list:HS,describe:rU,connect:En,kill:UZ,startAllServices:MZ,startService:FS,getUniqueServicesList:sU,restartAllServices:PZ,isServiceRegistered:nU,reloadStopStart:iU,restartHdb:tU,deleteProcess:LZ,startClusteringProcesses:aU,startClusteringThreads:cU,isHdbRestartRunning:DZ,isClusteringRunning:BZ,stopClustering:vZ,reloadClustering:HZ};var zc=!1;AZ(e=>{e.type==="restart"&&Ed.initSync(!0)});function IZ(){zc=!0}a(IZ,"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,wZ=10,jD;function Xn(e,t=!1){if(zc)return CZ(e);let r=yZ(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<wZ&&(bZ.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=Ed.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&qs.LOG_LEVEL_HIERARCHY[o]>=qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===qs.LOG_LEVELS.ERR||l===qs.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=qs.LOG_LEVELS[f]}if(qs.LOG_LEVEL_HIERARCHY[o]>=qs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===qs.LOG_LEVELS.ERR||l===qs.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(()=>{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(Xn,"start");function CZ(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(CZ,"startWithPM2");function BS(e){if(!zc){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(BS,"stop");function ZD(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(ZD,"reload");function eU(e){if(!zc)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(eU,"restart");function LZ(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(LZ,"deleteProcess");async function tU(){await Xn(zn.generateRestart())}a(tU,"restartHdb");async function DZ(){let e=await HS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(DZ,"isHdbRestartRunning");function HS(){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(HS,"list");function rU(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(rU,"describe");function UZ(){if(!zc){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(UZ,"kill");async function MZ(){try{await aU(),await cU(),await Xn(zn.generateAllServiceConfigs())}catch(e){throw pe?.disconnect(),e}}a(MZ,"startAllServices");async function FS(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(FS,"startService");async function sU(){try{let e=await HS(),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(sU,"getUniqueServicesList");async function PZ(e=[]){try{let t=!1,r=await sU();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 eU(o))}t&&await iU(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe?.disconnect(),t}}a(PZ,"restartAllServices");async function nU(e){if(nr?.find(r=>r.name===e))return!0;let t=await OZ.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(nU,"isServiceRegistered");async function iU(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 rU(e),s=RZ.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await BS(e),await FS(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await tU():await ZD(e)}a(iU,"reloadStopStart");var oU;async function aU(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await FS(r,e)}}a(aU,"startClusteringProcesses");async function cU(){oU=XD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Qc.createWorkQueueStream(qs.WORK_QUEUE_CONSUMER_NAMES),await Qc.updateIngestStreamConsumer(),await Qc.updateLocalStreams();let e=await gZ.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"),XD(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(cU,"startClusteringThreads");async function vZ(){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 oU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await BS(t)}}a(vZ,"stopClustering");async function BZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await nU(t)===!1)return!1}return!0}a(BZ,"isClusteringRunning");async function HZ(){await fn.generateNatsConfig(!0),await Qc.reloadNATSHub(),await Qc.reloadNATSLeaf(),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await fn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(HZ,"reloadClustering")});var Sd=T((s_e,pU)=>{"use strict";var FZ=require("minimist"),{isMainThread:xS,parentPort:fU}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Jc}=Ve,Gs=F(),kS=$(),hd=vS(),Yo=st(),qS=ke(),EU=hr(),xs=lU(),_U=Go(),qZ=cE(),{restartWorkers:md,onMessageByType:GZ}=Ze(),{handleHDBError:xZ,hdb_errors:kZ}=j(),{HTTP_STATUS_CODES:VZ}=kZ,pd=X();pd.initSync();var Xc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,$Z="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dU="Clustering is not enabled so cannot be restarted",YZ="Invalid service",Ko,Yr;pU.exports={restart:hU,restartService:VS};xS&&GZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?VS({service:e.workerType}):hU({operation:"restart"})});async function hU(e){Yr=Object.keys(e).length===0,Ko=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=FZ(process.argv);if(t.service){await VS(t);return}if(Yr&&!Ko){console.error($Z);return}if(Yr&&console.log(Xc),Ko){xs.enterPM2Mode(),Gs.notify(Xc);let r=qZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return kS.isEmptyOrZeroLength(Object.keys(r))||EU.updateConfigValue(void 0,void 0,r,!0,!0),WZ(),Xc}return xS?(Gs.notify(Xc),setTimeout(()=>{md()},50)):fU.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Xc}a(hU,"restart");async function VS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw xZ(new Error,YZ,VZ.BAD_REQUEST,void 0,void 0,!0);if(Ko=await xs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!xS)return fU.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=dU;break}Yr&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await mU();break;case Jc.clustering_config:case Jc["clustering config"]:if(!pd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dU;break}Yr&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await xs.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"),Gs.notify("Restarting http_workers"),Yr?await xs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{md("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(VS,"restartService");async function KZ(){await Yo.publishToStream(`${qS.SUBJECT_PREFIXES.TXN}.${qS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,qS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(KZ,"postDummyNatsMsg");async function WZ(){await mU(),await xs.restart(Ve.HDB_PROC_DESCRIPTOR),await kS.async_set_timeout(2e3),pd.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await GS(),Yr&&(await Yo.closeConnection(),process.exit(0))}a(WZ,"restartPM2Mode");async function mU(){if(!EU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await _U.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await hd.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await GS(),Yr&&await Yo.closeConnection();else{await KZ(),await hd.generateNatsConfig(!0),Ko?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await _U.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await kS.async_set_timeout(3e3),await GS(),await Yo.updateLocalStreams(),Yr&&await Yo.closeConnection(),Gs.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(mU,"restartClustering");async function GS(){await hd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hd.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(GS,"removeNatsConfig")});var wU=T((o_e,IU)=>{"use strict";var i_e=require("lodash"),ir=b(),{handleHDBError:SU,hdb_errors:QZ}=j(),{HDB_ERROR_MSGS:zZ,HTTP_STATUS_CODES:JZ}=QZ,$S=F();IU.exports={getRolePermissions:jZ};var Bi=Object.create(null),XZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),AU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OU=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"),YS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...OU(t,r,s,n)}),"table_perms_template"),TU=a((e,t=OU())=>({attribute_name:e,describe:yU(t),[jc]:t[jc],[KS]:t[KS],[WS]:t[WS]}),"attr_perms_template"),RU=a((e,t=!1)=>({attribute_name:e,describe:t,[jc]:t}),"timestamp_attr_perms_template"),{READ:jc,INSERT:KS,UPDATE:WS}=ir.PERMS_CRUD_ENUM,NU=Object.values(ir.PERMS_CRUD_ENUM),bU=[jc,KS,WS];function jZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Bi[t]&&Bi[t].key===s)return Bi[t].perms;let n=ZZ(e,r);return Bi[t]?Bi[t].key=s:Bi[t]=XZ(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 $S.error(s),$S.debug(r),SU(new Error,zZ.OUTDATED_PERMS_TRANSLATION_ERROR,JZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
11
|
+
${r.stack}`;throw $S.error(s),SU(new Error)}}}a(jZ,"getRolePermissions");function ZZ(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]=e5(t[i]);return}r[i]=AU(),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],_=t5(c,u);r[i].describe||NU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=YS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=YS()})}),r}a(ZZ,"translateRolePermissions");function e5(e){let t=AU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=YS(!0,!0,!0,!0,!0)}),t}a(e5,"createStructureUserPermissions");function t5(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=RU(d,l[jc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=TU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=yU(l),n.attribute_permissions.push(l),c||r5(l,u)}else if(_!==o){let l;ir.TIME_STAMP_NAMES.includes(_)?l=RU(_):l=TU(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=gU(n),n}else return e.describe=gU(e),e}a(t5,"getTableAttrPerms");function gU(e){return NU.filter(t=>e[t]).length>0}a(gU,"getSchemaTableDescribePerm");function yU(e){return bU.filter(t=>e[t]).length>0}a(yU,"getAttributeDescribePerm");function r5(e,t){bU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(r5,"checkForHashPerms")});var CU={};Qe(CU,{Resources:()=>Td,keyArrayToString:()=>Wo,resetResources:()=>s5,resources:()=>jn});function s5(){return jn=new Td}function Wo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Td,jn,Zc=Te(()=>{fi();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(s5,"resetResources");a(Wo,"keyArrayToString")});var Hi,QS=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 eu={};Qe(eu,{authentication:()=>HU,bypassAuth:()=>l5,login:()=>d5,logout:()=>f5,start:()=>_5});function l5(){BU=!0}async function HU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?a5?o5:[]:i5?n5:[];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 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 DU.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?LU.notify(S):LU.error(S)},"authAuditLog"),d;if(s){if(d=Fi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await lt.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 u5&&(Fi.get(h)||(Fi.set(h,h),l(p,It.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Zn({error:A.message},e)})}Fi.set(s,d),c5&&l(d.username,It.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await lt.getUser(_.user,null,!1):BU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,MU.getSuperUser)());Rd&&(e.session.update=function(E){if(!u){u=(0,PU.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,DU.put(E)},e.login=async function(E,h){e.user=await lt.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 _5({server:e,port:t}){e.request(HU,{port:t||"all"}),UU||(UU=!0,setInterval(()=>{Fi=new Map},Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),vU.user.addListener(()=>{Fi=new Map}))}async function d5(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 f5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var MU,gd,PU,Kr,It,Ad,vU,LU,n5,i5,o5,a5,DU,Rd,BU,c5,u5,Fi,UU,Od=Te(()=>{MU=D(gr());Pr();Zc();gd=D(Pc());fe();PU=require("uuid"),Kr=D(X()),It=D(b()),Ad=D(F()),vU=D(ic());QS();Qo();LU=(0,Ad.loggerWithTag)("auth-event");Kr.initSync();n5=Kr.get(It.CONFIG_PARAMS.HTTP_CORSACCESSLIST),i5=Kr.get(It.CONFIG_PARAMS.HTTP_CORS),o5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),a5=Kr.get(It.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),DU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Rd=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,BU=Kr.get(It.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,c5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,u5=Kr.get(It.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Fi=new Map;lt.onInvalidatedUser(()=>{Fi=new Map});a(l5,"bypassAuth");a(HU,"authentication");a(_5,"start");a(d5,"login");a(f5,"logout")});var $U=T((S_e,VU)=>{"use strict";var Se=require("joi"),FU=require("fs-extra"),qU=require("path"),mn=qe(),GU=X(),xU=b(),kU=F(),{hdb_errors:E5}=j(),{HDB_ERROR_MSGS:Gt}=E5,hn=/^[a-zA-Z0-9-_]+$/;VU.exports={getDropCustomFunctionValidator:m5,setCustomFunctionValidator:p5,addComponentValidator:g5,dropCustomFunctionProjectValidator:A5,packageComponentValidator:O5,deployComponentValidator:N5,setComponentFileValidator:S5,getComponentFileValidator:R5,dropComponentFileValidator:T5};function Nd(e,t,r){try{let s=GU.get(xU.CONFIG_PARAMS.COMPONENTSROOT),n=qU.join(s,t);return FU.existsSync(n)?e?t:r.message(Gt.PROJECT_EXISTS):e?r.message(Gt.NO_PROJECT):t}catch(s){return kU.error(s),r.message(Gt.VALIDATION_ERR)}}a(Nd,"checkProjectExists");function tu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(tu,"checkFilePath");function h5(e,t,r,s){try{let n=GU.get(xU.CONFIG_PARAMS.COMPONENTSROOT),i=qU.join(n,e,t,r+".js");return FU.existsSync(i)?r:s.message(Gt.NO_FILE)}catch(n){return kU.error(n),s.message(Gt.VALIDATION_ERR)}}a(h5,"checkFileExists");function m5(e){let t=Se.object({project:Se.string().pattern(hn).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(hn).custom(h5.bind(null,e.project,e.type)).custom(tu).required().messages({"string.pattern.base":Gt.BAD_FILE_NAME})});return mn.validateBySchema(e,t)}a(m5,"getDropCustomFunctionValidator");function p5(e){let t=Se.object({project:Se.string().pattern(hn).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(tu).required(),function_content:Se.string().required()});return mn.validateBySchema(e,t)}a(p5,"setCustomFunctionValidator");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(tu).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(S5,"setComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().pattern(hn).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME}),file:Se.string().custom(tu).optional()});return mn.validateBySchema(e,t)}a(T5,"dropComponentFileValidator");function R5(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(tu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return mn.validateBySchema(e,t)}a(R5,"getComponentFileValidator");function g5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Nd.bind(null,!1)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(g5,"addComponentValidator");function A5(e){let t=Se.object({project:Se.string().pattern(hn).custom(Nd.bind(null,!0)).required().messages({"string.pattern.base":Gt.BAD_PROJECT_NAME})});return mn.validateBySchema(e,t)}a(A5,"dropCustomFunctionProjectValidator");function O5(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(O5,"packageComponentValidator");function N5(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(N5,"deployComponentValidator")});var wd=T((R_e,XU)=>{"use strict";var bd=require("joi"),yd=require("path"),YU=require("fs-extra"),{exec:b5}=require("child_process"),y5=require("util"),KU=y5.promisify(b5),ru=b(),{handleHDBError:zo,hdb_errors:I5}=j(),{HTTP_STATUS_CODES:Jo}=I5,su=X(),w5=qe(),Xo=F();su.initSync();var zS=su.get(ru.CONFIG_PARAMS.COMPONENTSROOT),WU="npm install --omit=dev --json",C5=`${WU} --dry-run`;XU.exports={installModules:M5,auditModules:P5,installAllRootModules:L5,uninstallRootModule:D5,linkHarperdb:U5};async function L5(e=!1){await Id(),await nu(e?"npm install --ignore-scripts":"npm install",su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(L5,"installAllRootModules");async function D5(e){await nu(`npm uninstall ${e}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(D5,"uninstallRootModule");async function U5(){await Id(),await nu(`npm link ${ru.PACKAGE_ROOT}`,su.get(ru.CONFIG_PARAMS.ROOTPATH))}a(U5,"linkHarperdb");async function nu(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await KU(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(nu,"runCommand");async function M5(e){Xo.info(`starting installModules for request: ${e}`);let t=JU(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?C5:WU;await Id(),await zU(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(zS,u),l,d=null;try{let{stdout:f,stderr:E}=await KU(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(zU,"parseNPMStdErr");async function v5(e){Jo.info(`starting auditModules for request: ${e}`);let t=XU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r}=e;await yd(),await JU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=bd.join(JS,o);s[o]={npm_output:null,npm_error:null};try{let u=await su("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=zU(u.stderr)}}return Jo.info(`finished auditModules with response ${s}`),s}a(v5,"auditModules");async function yd(){try{return await su("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 JU(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(JS,i.toString());if(!await KU.pathExists(o)){t.push(i);continue}let u=bd.join(o,"package.json");await KU.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(JU,"checkProjectPaths");function XU(e){let t=Nd.object({projects:Nd.array().min(1).items(Nd.string()).required(),dry_run:Nd.boolean().default(!1)});return C5.validateBySchema(e,t)}a(XU,"modulesValidator")});var jS=T((O_e,sM)=>{"use strict";var Xo=require("fs-extra"),XS=require("path"),wd=G(),ZU=$(),Cd=b(),rM=X(),B5=hr();sM.exports=H5;async function H5(){let e=q5(),t=rM.get(Cd.CONFIG_PARAMS.ROOTPATH),r=XS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.PACKAGE_ROOT}},n=XS.join(t,"node_modules");await Xo.ensureDir(n);let i,o=!0,c=!1;try{i=await Xo.readJson(r)}catch(u){if(ZU.isEmptyOrZeroLength(e))return;if(u.code!==Cd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!ZU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await eM(_);s.dependencies[u]=l+_}if(!o){wd.notify("Installing components"),await tM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await eM(_);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 tM(r,s,i))}a(H5,"installComponents");function q5(){let e=B5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(q5,"getComponentsConfig");async function eM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":XS.extname(e)||await Xo.pathExists(e)?"file:":"github:"}a(eM,"getPkgPrefix");async function tM(e,t,r){wd.trace("npm installing components package.json",t),await Xo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(rM.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(tM,"installPackages")});var tT=T((y_e,aM)=>{"use strict";var Le=require("fs-extra"),ZS=require("fast-glob"),le=require("path"),iM=require("tar-fs"),b_e=require("uuid").v4,eT=require("normalize-path"),ks=YU(),St=G(),Me=b(),it=X(),nu=hr(),F5=$(),{PACKAGE_ROOT:G5}=b(),{handleHDBError:Tt,hdb_errors:x5}=j(),{basename:k5}=require("path"),V5=jS(),oM=X(),$5=b(),{Readable:Y5}=require("stream"),{isMainThread:K5}=require("worker_threads"),{HDB_ERROR_MSGS:qi,HTTP_STATUS_CODES:Rt}=x5,W5=le.join(G5,"application-template"),nM=le.join(it.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Q5(){St.trace("getting custom api status");let e={};try{e={port:it.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,qi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(Q5,"customFunctionsStatus");function z5(){St.trace("getting custom api endpoints");let e={},t=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{ZS.sync(eT(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:ZS.sync(eT(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:ZS.sync(eT(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,qi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(z5,"getCustomFunctions");function J5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=it.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,qi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(J5,"getCustomFunction");function X5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("setting custom function file content");let r=it.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,qi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(X5,"setCustomFunction");function j5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function file");let r=it.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,qi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(j5,"dropCustomFunction");function Z5(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("adding component");let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(W5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,qi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(Z5,"addComponent");function e8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function project");let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=it.get(Me.CONFIG_PARAMS.APPS);if(!F5.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 nu.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,qi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(e8,"dropCustomFunctionProject");async function t8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.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(it.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(nM);let i=le.join(nM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),iM.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(t8,"packageComponent");async function r8(e){e.project&&(e.project=le.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.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=Y5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(iM.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 nu.addConfig(s,{package:i}),!n){await V5();let f=oM.get($5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(K5)return;let c=new Map;c.isWorker=!0;let u=(Dd(),Z(Ld)),_;u.setErrorReporter(f=>_=f);let l=k5(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(r8,"deployComponent");async function s8(){let e=nu.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(it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:it.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(it.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(s8,"getComponents");async function n8(e){let t=ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=nu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(oM.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):it.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(n8,"getComponentFile");async function i8(e){let t=ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(it.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(i8,"setComponentFile");async function o8(e){let t=ks.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(it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),nu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(o8,"dropComponent");aM.exports={customFunctionsStatus:Q5,getCustomFunctions:z5,getCustomFunction:J5,setCustomFunction:X5,dropCustomFunction:j5,addComponent:Z5,dropCustomFunctionProject:e8,packageComponent:t8,deployComponent:r8,getComponents:s8,getComponentFile:n8,setComponentFile:i8,dropComponent:o8}});var rT=T((w_e,uM)=>{"use strict";var Vs=require("joi"),cM=Fe();uM.exports={readTransactionLogValidator:a8,deleteTransactionLogsBeforeValidator:c8};function a8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return cM.validateBySchema(e,t)}a(a8,"readTransactionLogValidator");function c8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return cM.validateBySchema(e,t)}a(c8,"deleteTransactionLogsBeforeValidator")});var Md=T((L_e,EM)=>{"use strict";var sT=b(),Ud=st(),lM=$(),_M=X(),dM=nn(),{handleHDBError:jo,hdb_errors:u8}=j(),{HTTP_STATUS_CODES:Zo}=u8,{readTransactionLogValidator:l8,deleteTransactionLogsBeforeValidator:_8}=rT(),fM="This operation relies on clustering and cannot run with it disable.",d8="Logs successfully deleted from transaction log.",f8="All logs successfully deleted from transaction log.";EM.exports={readTransactionLog:E8,deleteTransactionLogsBefore:h8};async function*E8(e){let t=l8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,fM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lM.checkSchemaTableExist(r,s);if(n)throw jo(new Error,n,Zo.NOT_FOUND,void 0,void 0,!0);let i=dM.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===sT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(E8,"readTransactionLog");async function h8(e){let t=_8(e);if(t)throw jo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw jo(new Error,fM,Zo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lM.checkSchemaTableExist(r,s);if(i)throw jo(new Error,i,Zo.NOT_FOUND,void 0,void 0,!0);let o=dM.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=d8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=f8):d=(await Ud.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(h8,"deleteTransactionLogsBefore")});var mM=T((U_e,hM)=>{"use strict";var nT=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}};hM.exports=nT});var SM=T((P_e,pM)=>{"use strict";var iT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pM.exports=iT});var aT=T((B_e,RM)=>{"use strict";var TM=mM(),m8=SM(),{HDB_ERROR_MSGS:p8}=dr(),oT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=p8.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 TM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new m8(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 TM(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}};RM.exports=oT});var Hd=T((q_e,BM)=>{"use strict";var cT=xr(),Pd=Gr(),Qr=U_(),au=pi(),uT=Ai(),S8=gp(),T8=UC(),cu=gr(),vd=Lp(),ft=G(),R8=Mp(),g8=J_(),A8=ES(),O8=ed(),N8=hS(),b8=mS(),y8=TS(),I8=gS(),lT=NS(),mn=$(),w8=CD(),_T=CS(),OM=pd(),Wr=b(),NM=CU(),C8=Fo(),bM=Mc(),yM=(Ad(),Z(Zc)),IM=hr(),wr=tT(),L8=require("alasql"),wM=Md(),CM=Id(),LM=aT(),{handleHDBError:or,hdb_errors:DM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:iu}=DM,v=new Map,UM="delete",Zn="insert",pn="read",Fi="update",ou="describe",gM=au.describeSchema.name,AM=au.describeTable.name,MM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},D8="catchup",U8="handleGetJob",M8="handleGetJobsByStartDate",Bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},P8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],PM={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(cT.insert.name,new q(!1,[Zn]));v.set(cT.update.name,new q(!1,[Fi]));v.set(cT.upsert.name,new q(!1,[Zn,Fi]));v.set(Pd.searchByConditions.name,new q(!1,[pn]));v.set(Pd.searchByHash.name,new q(!1,[pn]));v.set(Pd.searchByValue.name,new q(!1,[pn]));v.set(Pd.search.name,new q(!1,[pn]));v.set(Qr.createSchema.name,new q(!0,[]));v.set(Qr.createTable.name,new q(!0,[]));v.set(Qr.createAttribute.name,new q(!1,[Zn]));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(au.describeSchema.name,new q(!1,[pn]));v.set(au.describeTable.name,new q(!1,[pn]));v.set(uT.deleteRecord.name,new q(!1,[UM]));v.set(cu.addUser.name,new q(!0,[]));v.set(cu.alterUser.name,new q(!0,[]));v.set(cu.dropUser.name,new q(!0,[]));v.set(cu.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(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(N8.name,new q(!0,[]));v.set(b8.name,new q(!0,[]));v.set(lT.setRoutes.name,new q(!0,[]));v.set(lT.getRoutes.name,new q(!0,[]));v.set(lT.deleteRoutes.name,new q(!0,[]));v.set(IM.setConfiguration.name,new q(!0,[]));v.set(y8.clusterStatus.name,new q(!0,[]));v.set(I8.name,new q(!0,[]));v.set(_T.getFingerprint.name,new q(!0,[]));v.set(_T.setLicense.name,new q(!0,[]));v.set(uT.deleteFilesBefore.name,new q(!0,[]));v.set(uT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(OM.restart.name,new q(!0,[]));v.set(OM.restartService.name,new q(!0,[]));v.set(S8.name,new q(!0,[]));v.set(T8.name,new q(!0,[pn]));v.set(C8.systemInformation.name,new q(!0,[]));v.set(IM.getConfiguration.name,new q(!0,[]));v.set(wM.readTransactionLog.name,new q(!0,[]));v.set(wM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(CM.installModules.name,new q(!0,[]));v.set(CM.auditModules.name,new q(!0,[]));v.set(bM.createTokens.name,new q(!1,[]));v.set(bM.refreshOperationToken.name,new q(!1,[]));v.set(yM.login.name,new q(!1,[]));v.set(yM.logout.name,new q(!1,[]));v.set(wr.customFunctionsStatus.name,new q(!0,[]));v.set(wr.getCustomFunctions.name,new q(!0,[]));v.set(wr.getComponents.name,new q(!0,[]));v.set(wr.getComponentFile.name,new q(!0,[]));v.set(wr.setComponentFile.name,new q(!0,[]));v.set(wr.dropComponent.name,new q(!0,[]));v.set(wr.getCustomFunction.name,new q(!0,[]));v.set(wr.setCustomFunction.name,new q(!0,[]));v.set(wr.dropCustomFunction.name,new q(!0,[]));v.set(wr.addComponent.name,new q(!0,[]));v.set(wr.dropCustomFunctionProject.name,new q(!0,[]));v.set(wr.packageComponent.name,new q(!0,[]));v.set(wr.deployComponent.name,new q(!0,[]));v.set(_T.getRegistrationInfo.name,new q(!1,[]));v.set(cu.userInfo.name,new q(!1,[]));v.set(au.describeAll.name,new q(!1,[]));v.set(U8,new q(!1,[]));v.set(M8,new q(!0,[]));v.set(D8,new q(!0,[]));v.set(Bd.CSV_DATA_LOAD,new q(!1,[Zn,Fi]));v.set(Bd.CSV_URL_LOAD,new q(!1,[Zn,Fi]));v.set(Bd.CSV_FILE_LOAD,new q(!1,[Zn,Fi]));v.set(Bd.IMPORT_FROM_S3,new q(!1,[Zn,Fi]));v.set(PM.EXPORT_TO_S3,new q(!0,[]));v.set(PM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[UM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[pn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Zn]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Fi]));BM.exports={verifyPerms:B8,verifyPermsAst:v8,verifyBulkLoadAttributePerms:q8};function v8(e,t,r){if(mn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(mn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),or(new Error);if(mn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new LM,n=new w8(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&&MM[r])throw or(new Error,wt.DROP_SYSTEM,iu.FORBIDDEN);if(c&&!u)return null;let _=NM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof L8.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=vM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=fT(t.role.permission,f,d[E]);dT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(v8,"verifyPermsAst");function B8(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,iu.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 LM;if(mn.isEmptyOrZeroLength(e.hdb_user.role)||mn.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&&MM[r])throw or(new Error,wt.DROP_SYSTEM,iu.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(P8.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=NM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===gM||r===AM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===gM&&(!d[n]||!d[n][ou]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===AM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ou]))return c.handleInvalidItem(wt.TABLE_NOT_FOUND(n,i))}}let f=vM(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=H8(e),h=fT(e.hdb_user.role.permission,n,i);return dT(E,h,r,i,n,c,s),c.getPermsResponse()}a(B8,"verifyPerms");function vM(e,t,r,s,n){if(mn.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),iu.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][ou]===!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[ou]===!1)s.addInvalidItem(wt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!mn.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(DM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(vM,"hasPermissions");function dT(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(mn.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[ou]===!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!==pn)throw or(new Error,wt.SYSTEM_TIMESTAMP_PERMS_ERR,iu.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(dT,"checkAttributePerms");function H8(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(H8,"getRecordAttributes");function fT(e,t,r){let s=new Map;if(mn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(fT,"getAttributePermissions");function q8(e,t,r,s,n,i,o){let c=new Set(i),u=fT(e,s,n);dT(c,u,t,n,s,o,r)}a(q8,"verifyBulkLoadAttributePerms")});var Fd=T((G_e,xM)=>{"use strict";xM.exports={evaluateSQL:X8,processAST:GM,convertSQLToAST:FM,checkASTPermissions:qM};var F8=xr(),HM=require("util"),G8=HM.callbackify(F8.insert),x8=Gr().search,k8=bw().update,V8=HM.callbackify(k8),$8=Iw().convertDelete,ei=require("alasql"),Y8=Hd(),qd=G(),K8=S_(),W8=$(),uu=b(),{hdb_errors:Q8,handleHDBError:ET}=j(),{HTTP_STATUS_CODES:hT}=Q8;K8(ei);var z8=403,J8="There was a problem performing this insert. Please check the logs and try again.",mT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function X8(e,t){let r=e.parsed_sql_object;if(!r){r=FM(e.sql);let s,n=r.ast.statements[0];if(n instanceof ei.yy.Insert?s=n.into.databaseid:n instanceof ei.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof ei.yy.Update||n instanceof ei.yy.Delete?s=n.table.databaseid:qd.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof ei.yy.Select)&&W8.isEmptyOrZeroLength(s))return t("No schema specified",null)}GM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(X8,"evaluateSQL");function qM(e,t){let r;try{r=Y8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(qM,"checkASTPermissions");function FM(e){let t=new mT;if(!e)throw ET(new Error,"The 'sql' parameter is missing from the request body",hT.BAD_REQUEST);try{let r=e.trim(),s=ei.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
17
|
-
`);throw s[1]?ET(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,hT.BAD_REQUEST):ET(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",hT.BAD_REQUEST)}return t}a(FM,"convertSQLToAST");function GM(e,t,r){try{let s=j8;if(!e.bypass_auth&&!t.permissions_checked){let i=qM(e,t);if(i&&i.length>0)return r(z8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case uu.VALID_SQL_OPS_ENUM.SELECT:s=x8,n=t.ast.statements[0];break;case uu.VALID_SQL_OPS_ENUM.INSERT:s=Z8;break;case uu.VALID_SQL_OPS_ENUM.UPDATE:s=V8;break;case uu.VALID_SQL_OPS_ENUM.DELETE:s=$8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(GM,"processAST");function j8(e,t){qd.info(e),t("unknown sql statement")}a(j8,"nullFunction");function Z8({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=e6(i,e.values)}catch(o){return r(o)}G8(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(Z8,"convertInsert");function e6(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]]=ei.compile(`SELECT ${n.toString()} AS [${uu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(J8)}}a(e6,"createDataObjects")});var pT=T((k_e,VM)=>{"use strict";var{S3:t6,GetObjectCommand:r6}=require("@aws-sdk/client-s3");VM.exports={getFileStreamFromS3:s6,getS3AuthObj:kM};async function s6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new r6(r))).Body}a(s6,"getFileStreamFromS3");function kM(e,t,r){return new t6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kM,"getS3AuthObj")});var Gd=T(($_e,ZM)=>{"use strict";var KM=Gr(),n6=Fd(),i6=pT(),{AsyncParser:o6,Transform:a6}=require("json2csv"),_u=require("stream"),Cr=$(),ST=require("fs-extra"),c6=require("path"),zr=G(),{promisify:WM}=require("util"),lu=$(),{handleHDBError:ot,hdb_errors:u6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:at}=u6,{streamAsJSON:l6}=kE(),{Upload:_6}=require("@aws-sdk/lib-storage"),$M=["search_by_value","search_by_hash","sql"],YM=["json","csv"],QM="json",zM="csv",d6="Successfully exported JSON locally.",f6="Successfully exported CSV locally.",E6=1e3,h6=KM.searchByHash,m6=KM.searchByValue,p6=WM(n6.evaluateSQL),S6=WM(_u.finished);ZM.exports={export_to_s3:A6,export_local:T6,toCsvStream:JM};async function T6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=XM(e);if(!Cr.isEmpty(t))throw zr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(Cr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),ot(new Error,ar.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(Cr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(c6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Cr.buildFolderPath(e.path,r);await R6(e.path);let n=await jM(e);return await g6(s,e.format,n)}a(T6,"export_local");async function R6(e){if(zr.trace("in confirmPath"),Cr.isEmptyOrZeroLength(e))throw ot(new Error,`Invalid path: ${e}`,at.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ST.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),ot(new Error,s,at.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),ot(new Error,r,at.BAD_REQUEST,void 0,void 0,!0)}return!0}a(R6,"confirmPath");async function g6(e,t,r){if(zr.trace("in saveToLocal"),lu.isEmptyOrZeroLength(e))throw ot(new Error,ar.INVALID_VALUE("file_path"),at.BAD_REQUEST,void 0,void 0,!0);if(lu.isEmptyOrZeroLength(t))throw ot(new Error,ar.INVALID_VALUE("Source format"),at.BAD_REQUEST,void 0,void 0,!0);if(lu.isEmpty(r))throw ot(new Error,ar.NOT_FOUND("Data"),at.BAD_REQUEST,void 0,void 0,!0);if(t===QM){let s=ST.createWriteStream(e);return l6(r).pipe(s),await S6(s),{message:d6,path:e}}else if(t===zM){let s=ST.createWriteStream(e),n=_u.Readable.from(r),i={},o={objectMode:!0};return await new o6(i,o).fromInput(n).toOutput(s).promise(!1),{message:f6,path:e}}throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST)}a(g6,"saveToLocal");async function A6(e){if(!e.s3||Object.keys(e.s3).length===0)throw ot(new Error,ar.MISSING_VALUE("S3 object"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,ar.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,ar.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,ar.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,ar.MISSING_VALUE("key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,ar.MISSING_VALUE("region"),at.BAD_REQUEST);let t=XM(e);if(!Cr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await jM(e)}catch(u){throw zr.error(u),u}let s,n=await i6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new _u.PassThrough;if(e.format===zM){i=e.s3.key+".csv";let u=JM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===QM){i=e.s3.key+".json";let u=new _u.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%E6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST);return new _6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(A6,"export_to_s3");function JM(e){let t=_u.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new a6(r,s);return t.pipe(n)}a(JM,"toCsvStream");function XM(e){if(zr.trace("in exportCoreValidation"),Cr.isEmpty(e.format))return"format missing";if(YM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YM.join(", ")}`;let t=e.search_operation.operation;if(Cr.isEmpty(t))return"search_operation.operation missing";if($M.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${$M.join(", ")}`}a(XM,"exportCoreValidation");async function jM(e){zr.trace("in getRecords");let t,r;if(lu.isEmpty(e.search_operation)||lu.isEmptyOrZeroLength(e.search_operation.operation))throw ot(new Error,ar.INVALID_VALUE("Search operation"),at.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=m6;break;case"search_by_hash":t=h6;break;case"sql":t=p6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),ot(new Error,r,at.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(jM,"getRecords")});var aP={};Qe(aP,{contentTypes:()=>RT,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>gT,serialize:()=>$d,serializeMessage:()=>jn});function O6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function gT(e){e.register(b6,{serializers:[{regex:/^application\/json$/,serializer:xd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(du).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?kd.Readable.from((0,$s.encodeIter)(t,du)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,TT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function 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=tP&&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,Sn.createBrotliCompress)({params:{[Sn.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?Sn.constants.BROTLI_MODE_TEXT:Sn.constants.BROTLI_MODE_GENERIC,[Sn.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>tP?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Sn.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function jn(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Vd(t);return r=t.serialize=s.serializer.serialize,r(e)}function y6(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||rP(e,s);return o=>y6(o).then(i)}return e&&Ct.get(e)?.deserialize||rP(e,s)}function rP(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 I6(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,TT,$s,Gi,Sn,kd,sP,nP,iP,du,Ct,RT,eP,oP,N6,b6,tP,Wo=Te(()=>{xd=D(kE()),TT=D(Gd()),$s=require("msgpackr"),Gi=require("cbor-x"),Sn=require("zlib"),kd=require("stream");Pr();sP=require("../../index"),nP=D(X()),iP=D(b()),du={useRecords:!1,useToJSON:!0},Ct=new Map,RT=Ct;lt.contentTypes=RT;(0,sP._assignPackageExport)("contentTypes",RT);Ct.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});eP=new Gi.Encoder(du);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(du).end(e)},serialize:eP.encode,deserialize:eP.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kd.Readable.from((0,$s.encodeIter)(e,du)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,TT.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(I6(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=QU(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(M5,"installModules");function QU(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(QU,"parseNPMStdErr");async function P5(e){Xo.info(`starting auditModules for request: ${e}`);let t=JU(e);if(t)throw zo(t,t.message,Jo.BAD_REQUEST);let{projects:r}=e;await Id(),await zU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=yd.join(zS,o);s[o]={npm_output:null,npm_error:null};try{let u=await nu("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=QU(u.stderr)}}return Xo.info(`finished auditModules with response ${s}`),s}a(P5,"auditModules");async function Id(){try{return await nu("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 zU(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(zS,i.toString());if(!await YU.pathExists(o)){t.push(i);continue}let u=yd.join(o,"package.json");await YU.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(zU,"checkProjectPaths");function JU(e){let t=bd.object({projects:bd.array().min(1).items(bd.string()).required(),dry_run:bd.boolean().default(!1)});return w5.validateBySchema(e,t)}a(JU,"modulesValidator")});var XS=T((A_e,rM)=>{"use strict";var jo=require("fs-extra"),JS=require("path"),Cd=F(),jU=$(),Ld=b(),tM=X(),v5=hr();rM.exports=B5;async function B5(){let e=H5(),t=tM.get(Ld.CONFIG_PARAMS.ROOTPATH),r=JS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Ld.PACKAGE_ROOT}},n=JS.join(t,"node_modules");await jo.ensureDir(n);let i,o=!0,c=!1;try{i=await jo.readJson(r)}catch(u){if(jU.isEmptyOrZeroLength(e))return;if(u.code!==Ld.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!jU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await ZU(_);s.dependencies[u]=l+_}if(!o){Cd.notify("Installing components"),await eM(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await ZU(_);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 eM(r,s,i))}a(B5,"installComponents");function H5(){let e=v5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(H5,"getComponentsConfig");async function ZU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":JS.extname(e)||await jo.pathExists(e)?"file:":"github:"}a(ZU,"getPkgPrefix");async function eM(e,t,r){Cd.trace("npm installing components package.json",t),await jo.writeFile(e,JSON.stringify(t,null," "));try{await wd().installAllRootModules(tM.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(eM,"installPackages")});var eT=T((b_e,oM)=>{"use strict";var Le=require("fs-extra"),jS=require("fast-glob"),_e=require("path"),nM=require("tar-fs"),N_e=require("uuid").v4,ZS=require("normalize-path"),ks=$U(),ft=F(),Me=b(),it=X(),iu=hr(),F5=$(),{PACKAGE_ROOT:q5}=b(),{handleHDBError:Tt,hdb_errors:G5}=j(),{basename:x5}=require("path"),k5=XS(),iM=X(),V5=b(),{Readable:$5}=require("stream"),{isMainThread:Y5}=require("worker_threads"),{HDB_ERROR_MSGS:qi,HTTP_STATUS_CODES:Rt}=G5,K5=_e.join(q5,"application-template"),sM=_e.join(it.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function W5(){ft.trace("getting custom api status");let e={};try{e={port:it.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,qi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,t)}return e}a(W5,"customFunctionsStatus");function Q5(){ft.trace("getting custom api endpoints");let e={},t=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{jS.sync(ZS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:jS.sync(ZS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:jS.sync(ZS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,qi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,ft.ERR,r)}return e}a(Q5,"getCustomFunctions");function z5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("getting custom api endpoint file content");let r=it.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,qi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(z5,"getCustomFunction");function J5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("setting custom function file content");let r=it.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,qi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,c)}}a(J5,"setCustomFunction");function X5(e){e.project&&(e.project=_e.parse(e.project).name),e.file&&(e.file=_e.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function file");let r=it.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,qi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,o)}}a(X5,"dropCustomFunction");function j5(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("adding component");let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=_e.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(K5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,qi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,ft.ERR,n)}}a(j5,"addComponent");function Z5(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);ft.trace("dropping custom function project");let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=it.get(Me.CONFIG_PARAMS.APPS);if(!F5.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 iu.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,qi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,ft.ERR,i)}}a(Z5,"dropCustomFunctionProject");async function e8(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.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(it.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(sM);let i=_e.join(sM,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(_e.join(n,"node_modules"))}),nM.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(e8,"packageComponent");async function t8(e){e.project&&(e.project=_e.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=it.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=$5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(nM.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 iu.addConfig(s,{package:i}),!n){await k5();let f=iM.get(V5.CONFIG_PARAMS.ROOTPATH);o=_e.join(f,"node_modules",s)}if(Y5)return;let c=new Map;c.isWorker=!0;let u=(Ud(),Z(Dd)),_;u.setErrorReporter(f=>_=f);let l=x5(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(t8,"deployComponent");async function r8(){let e=iu.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(it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:it.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(it.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(r8,"getComponents");async function s8(e){let t=ks.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=iu.getConfigObj()[e.project]||e.project==="harperdb"?_e.join(iM.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):it.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(s8,"getComponentFile");async function n8(e){let t=ks.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=_e.join(it.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(n8,"setComponentFile");async function i8(e){let t=ks.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(it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),iu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(i8,"dropComponent");oM.exports={customFunctionsStatus:W5,getCustomFunctions:Q5,getCustomFunction:z5,setCustomFunction:J5,dropCustomFunction:X5,addComponent:j5,dropCustomFunctionProject:Z5,packageComponent:e8,deployComponent:t8,getComponents:r8,getComponentFile:s8,setComponentFile:n8,dropComponent:i8}});var tT=T((I_e,cM)=>{"use strict";var Vs=require("joi"),aM=qe();cM.exports={readTransactionLogValidator:o8,deleteTransactionLogsBeforeValidator:a8};function o8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),from:Vs.date().timestamp(),to:Vs.date().timestamp(),limit:Vs.number().min(1)});return aM.validateBySchema(e,t)}a(o8,"readTransactionLogValidator");function a8(e){let t=Vs.object({schema:Vs.string().required(),table:Vs.string().required(),timestamp:Vs.date().timestamp().required()});return aM.validateBySchema(e,t)}a(a8,"deleteTransactionLogsBeforeValidator")});var Pd=T((C_e,fM)=>{"use strict";var rT=b(),Md=st(),uM=$(),lM=X(),_M=nn(),{handleHDBError:Zo,hdb_errors:c8}=j(),{HTTP_STATUS_CODES:ea}=c8,{readTransactionLogValidator:u8,deleteTransactionLogsBeforeValidator:l8}=tT(),dM="This operation relies on clustering and cannot run with it disable.",_8="Logs successfully deleted from transaction log.",d8="All logs successfully deleted from transaction log.";fM.exports={readTransactionLog:f8,deleteTransactionLogsBefore:E8};async function*f8(e){let t=u8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!lM.get(rT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,dM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=uM.checkSchemaTableExist(r,s);if(n)throw Zo(new Error,n,ea.NOT_FOUND,void 0,void 0,!0);let i=_M.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===rT.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(f8,"readTransactionLog");async function E8(e){let t=l8(e);if(t)throw Zo(t,t.message,ea.BAD_REQUEST,void 0,void 0,!0);if(!lM.get(rT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Zo(new Error,dM,ea.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=uM.checkSchemaTableExist(r,s);if(i)throw Zo(new Error,i,ea.NOT_FOUND,void 0,void 0,!0);let o=_M.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=_8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=d8):d=(await Md.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(E8,"deleteTransactionLogsBefore")});var hM=T((D_e,EM)=>{"use strict";var sT=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}};EM.exports=sT});var pM=T((M_e,mM)=>{"use strict";var nT=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mM.exports=nT});var oT=T((v_e,TM)=>{"use strict";var SM=hM(),h8=pM(),{HDB_ERROR_MSGS:m8}=dr(),iT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=m8.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 SM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new h8(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 SM(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}};TM.exports=iT});var Fd=T((H_e,vM)=>{"use strict";var aT=xr(),vd=Gr(),Qr=M_(),cu=Si(),cT=Oi(),p8=Rp(),S8=DC(),uu=gr(),Bd=Cp(),Et=F(),T8=Up(),R8=X_(),g8=fS(),A8=td(),O8=ES(),N8=hS(),b8=SS(),y8=RS(),uT=OS(),pn=$(),I8=wD(),lT=wS(),AM=Sd(),Wr=b(),OM=wU(),w8=Go(),NM=Pc(),bM=(Od(),Z(eu)),yM=hr(),wr=eT(),C8=require("alasql"),IM=Pd(),wM=wd(),CM=oT(),{handleHDBError:or,hdb_errors:LM}=j(),{HDB_ERROR_MSGS:wt,HTTP_STATUS_CODES:ou}=LM,v=new Map,DM="delete",ei="insert",Sn="read",Gi="update",au="describe",RM=cu.describeSchema.name,gM=cu.describeTable.name,UM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},L8="catchup",D8="handleGetJob",U8="handleGetJobsByStartDate",Hd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},M8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],MM={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(aT.insert.name,new q(!1,[ei]));v.set(aT.update.name,new q(!1,[Gi]));v.set(aT.upsert.name,new q(!1,[ei,Gi]));v.set(vd.searchByConditions.name,new q(!1,[Sn]));v.set(vd.searchByHash.name,new q(!1,[Sn]));v.set(vd.searchByValue.name,new q(!1,[Sn]));v.set(vd.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(cu.describeSchema.name,new q(!1,[Sn]));v.set(cu.describeTable.name,new q(!1,[Sn]));v.set(cT.deleteRecord.name,new q(!1,[DM]));v.set(uu.addUser.name,new q(!0,[]));v.set(uu.alterUser.name,new q(!0,[]));v.set(uu.dropUser.name,new q(!0,[]));v.set(uu.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(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(N8.name,new q(!0,[]));v.set(uT.setRoutes.name,new q(!0,[]));v.set(uT.getRoutes.name,new q(!0,[]));v.set(uT.deleteRoutes.name,new q(!0,[]));v.set(yM.setConfiguration.name,new q(!0,[]));v.set(b8.clusterStatus.name,new q(!0,[]));v.set(y8.name,new q(!0,[]));v.set(lT.getFingerprint.name,new q(!0,[]));v.set(lT.setLicense.name,new q(!0,[]));v.set(cT.deleteFilesBefore.name,new q(!0,[]));v.set(cT.deleteAuditLogsBefore.name,new q(!0,[]));v.set(AM.restart.name,new q(!0,[]));v.set(AM.restartService.name,new q(!0,[]));v.set(p8.name,new q(!0,[]));v.set(S8.name,new q(!0,[Sn]));v.set(w8.systemInformation.name,new q(!0,[]));v.set(yM.getConfiguration.name,new q(!0,[]));v.set(IM.readTransactionLog.name,new q(!0,[]));v.set(IM.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(wM.installModules.name,new q(!0,[]));v.set(wM.auditModules.name,new q(!0,[]));v.set(NM.createTokens.name,new q(!1,[]));v.set(NM.refreshOperationToken.name,new q(!1,[]));v.set(bM.login.name,new q(!1,[]));v.set(bM.logout.name,new q(!1,[]));v.set(wr.customFunctionsStatus.name,new q(!0,[]));v.set(wr.getCustomFunctions.name,new q(!0,[]));v.set(wr.getComponents.name,new q(!0,[]));v.set(wr.getComponentFile.name,new q(!0,[]));v.set(wr.setComponentFile.name,new q(!0,[]));v.set(wr.dropComponent.name,new q(!0,[]));v.set(wr.getCustomFunction.name,new q(!0,[]));v.set(wr.setCustomFunction.name,new q(!0,[]));v.set(wr.dropCustomFunction.name,new q(!0,[]));v.set(wr.addComponent.name,new q(!0,[]));v.set(wr.dropCustomFunctionProject.name,new q(!0,[]));v.set(wr.packageComponent.name,new q(!0,[]));v.set(wr.deployComponent.name,new q(!0,[]));v.set(lT.getRegistrationInfo.name,new q(!1,[]));v.set(uu.userInfo.name,new q(!1,[]));v.set(cu.describeAll.name,new q(!1,[]));v.set(D8,new q(!1,[]));v.set(U8,new q(!0,[]));v.set(L8,new q(!0,[]));v.set(Hd.CSV_DATA_LOAD,new q(!1,[ei,Gi]));v.set(Hd.CSV_URL_LOAD,new q(!1,[ei,Gi]));v.set(Hd.CSV_FILE_LOAD,new q(!1,[ei,Gi]));v.set(Hd.IMPORT_FROM_S3,new q(!1,[ei,Gi]));v.set(MM.EXPORT_TO_S3,new q(!0,[]));v.set(MM.EXPORT_LOCAL,new q(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[DM]));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]));vM.exports={verifyPerms:v8,verifyPermsAst:P8,verifyBulkLoadAttributePerms:H8};function P8(e,t,r){if(pn.isEmptyOrZeroLength(e))throw Et.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(t))throw Et.info("verify_perms_ast has an empty user parameter"),or(new Error);if(pn.isEmptyOrZeroLength(r))throw Et.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new CM,n=new I8(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&&UM[r])throw or(new Error,wt.DROP_SYSTEM,ou.FORBIDDEN);if(c&&!u)return null;let _=OM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof C8.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=PM(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=dT(t.role.permission,f,d[E]);_T(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw or(s)}}a(P8,"verifyPermsAst");function v8(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,ou.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new CM;if(pn.isEmptyOrZeroLength(e.hdb_user.role)||pn.isEmptyOrZeroLength(e.hdb_user.role.permission))return Et.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(wt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&UM[r])throw or(new Error,wt.DROP_SYSTEM,ou.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(M8.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=OM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RM||r===gM){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(wt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RM&&(!d[n]||!d[n][au]))return c.handleInvalidItem(wt.SCHEMA_NOT_FOUND(n));if(r===gM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][au]))return c.handleInvalidItem(wt.TABLE_NOT_FOUND(n,i))}}let f=PM(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=B8(e),h=dT(e.hdb_user.role.permission,n,i);return _T(E,h,r,i,n,c,s),c.getPermsResponse()}a(v8,"verifyPerms");function PM(e,t,r,s,n){if(pn.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),ou.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][au]===!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[au]===!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)&&(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(LM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(PM,"hasPermissions");function _T(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(pn.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[au]===!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,ou.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(_T,"checkAttributePerms");function B8(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(B8,"getRecordAttributes");function dT(e,t,r){let s=new Map;if(pn.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(dT,"getAttributePermissions");function H8(e,t,r,s,n,i,o){let c=new Set(i),u=dT(e,s,n);_T(c,u,t,n,s,o,r)}a(H8,"verifyBulkLoadAttributePerms")});var Gd=T((q_e,GM)=>{"use strict";GM.exports={evaluateSQL:J8,processAST:qM,convertSQLToAST:FM,checkASTPermissions:HM};var F8=xr(),BM=require("util"),q8=BM.callbackify(F8.insert),G8=Gr().search,x8=Nw().update,k8=BM.callbackify(x8),V8=yw().convertDelete,ti=require("alasql"),$8=Fd(),qd=F(),Y8=T_(),K8=$(),lu=b(),{hdb_errors:W8,handleHDBError:fT}=j(),{HTTP_STATUS_CODES:ET}=W8;Y8(ti);var Q8=403,z8="There was a problem performing this insert. Please check the logs and try again.",hT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function J8(e,t){let r=e.parsed_sql_object;if(!r){r=FM(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)&&K8.isEmptyOrZeroLength(s))return t("No schema specified",null)}qM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(J8,"evaluateSQL");function HM(e,t){let r;try{r=$8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(HM,"checkASTPermissions");function FM(e){let t=new hT;if(!e)throw fT(new Error,"The 'sql' parameter is missing from the request body",ET.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]?fT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ET.BAD_REQUEST):fT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ET.BAD_REQUEST)}return t}a(FM,"convertSQLToAST");function qM(e,t,r){try{let s=X8;if(!e.bypass_auth&&!t.permissions_checked){let i=HM(e,t);if(i&&i.length>0)return r(Q8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case lu.VALID_SQL_OPS_ENUM.SELECT:s=G8,n=t.ast.statements[0];break;case lu.VALID_SQL_OPS_ENUM.INSERT:s=j8;break;case lu.VALID_SQL_OPS_ENUM.UPDATE:s=k8;break;case lu.VALID_SQL_OPS_ENUM.DELETE:s=V8;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(qM,"processAST");function X8(e,t){qd.info(e),t("unknown sql statement")}a(X8,"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=Z8(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(j8,"convertInsert");function Z8(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 [${lu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(z8)}}a(Z8,"createDataObjects")});var mT=T((x_e,kM)=>{"use strict";var{S3:e6,GetObjectCommand:t6}=require("@aws-sdk/client-s3");kM.exports={getFileStreamFromS3:r6,getS3AuthObj:xM};async function r6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new t6(r))).Body}a(r6,"getFileStreamFromS3");function xM(e,t,r){return new e6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(xM,"getS3AuthObj")});var xd=T((V_e,jM)=>{"use strict";var YM=Gr(),s6=Gd(),n6=mT(),{AsyncParser:i6,Transform:o6}=require("json2csv"),du=require("stream"),Cr=$(),pT=require("fs-extra"),a6=require("path"),zr=F(),{promisify:KM}=require("util"),_u=$(),{handleHDBError:ot,hdb_errors:c6}=j(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:at}=c6,{streamAsJSON:u6}=VE(),{Upload:l6}=require("@aws-sdk/lib-storage"),VM=["search_by_value","search_by_hash","sql"],$M=["json","csv"],WM="json",QM="csv",_6="Successfully exported JSON locally.",d6="Successfully exported CSV locally.",f6=1e3,E6=YM.searchByHash,h6=YM.searchByValue,m6=KM(s6.evaluateSQL),p6=KM(du.finished);jM.exports={export_to_s3:g6,export_local:S6,toCsvStream:zM};async function S6(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=JM(e);if(!Cr.isEmpty(t))throw zr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(Cr.isEmpty(e.path))throw zr.error(ar.MISSING_VALUE("path")),ot(new Error,ar.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(Cr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(a6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Cr.buildFolderPath(e.path,r);await T6(e.path);let n=await XM(e);return await R6(s,e.format,n)}a(S6,"export_local");async function T6(e){if(zr.trace("in confirmPath"),Cr.isEmptyOrZeroLength(e))throw ot(new Error,`Invalid path: ${e}`,at.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await pT.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),ot(new Error,s,at.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),ot(new Error,r,at.BAD_REQUEST,void 0,void 0,!0)}return!0}a(T6,"confirmPath");async function R6(e,t,r){if(zr.trace("in saveToLocal"),_u.isEmptyOrZeroLength(e))throw ot(new Error,ar.INVALID_VALUE("file_path"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmptyOrZeroLength(t))throw ot(new Error,ar.INVALID_VALUE("Source format"),at.BAD_REQUEST,void 0,void 0,!0);if(_u.isEmpty(r))throw ot(new Error,ar.NOT_FOUND("Data"),at.BAD_REQUEST,void 0,void 0,!0);if(t===WM){let s=pT.createWriteStream(e);return u6(r).pipe(s),await p6(s),{message:_6,path:e}}else if(t===QM){let s=pT.createWriteStream(e),n=du.Readable.from(r),i={},o={objectMode:!0};return await new i6(i,o).fromInput(n).toOutput(s).promise(!1),{message:d6,path:e}}throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST)}a(R6,"saveToLocal");async function g6(e){if(!e.s3||Object.keys(e.s3).length===0)throw ot(new Error,ar.MISSING_VALUE("S3 object"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,ar.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,ar.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,ar.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,ar.MISSING_VALUE("key"),at.BAD_REQUEST);if(Cr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,ar.MISSING_VALUE("region"),at.BAD_REQUEST);let t=JM(e);if(!Cr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XM(e)}catch(u){throw zr.error(u),u}let s,n=await n6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new du.PassThrough;if(e.format===QM){i=e.s3.key+".csv";let u=zM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===WM){i=e.s3.key+".json";let u=new du.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%f6===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ot(new Error,ar.INVALID_VALUE("format"),at.BAD_REQUEST);return new l6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(g6,"export_to_s3");function zM(e){let t=du.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new o6(r,s);return t.pipe(n)}a(zM,"toCsvStream");function JM(e){if(zr.trace("in exportCoreValidation"),Cr.isEmpty(e.format))return"format missing";if($M.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${$M.join(", ")}`;let t=e.search_operation.operation;if(Cr.isEmpty(t))return"search_operation.operation missing";if(VM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${VM.join(", ")}`}a(JM,"exportCoreValidation");async function XM(e){zr.trace("in getRecords");let t,r;if(_u.isEmpty(e.search_operation)||_u.isEmptyOrZeroLength(e.search_operation.operation))throw ot(new Error,ar.INVALID_VALUE("Search operation"),at.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=h6;break;case"search_by_hash":t=E6;break;case"sql":t=m6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),ot(new Error,r,at.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XM,"getRecords")});var oP={};Qe(oP,{contentTypes:()=>TT,findBestSerializer:()=>$d,getDeserializer:()=>ta,registerContentHandlers:()=>RT,serialize:()=>Yd,serializeMessage:()=>Zn});function A6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function RT(e){e.register(N6,{serializers:[{regex:/^application\/json$/,serializer:kd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new xi.EncoderStream(fu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Vd.Readable.from((0,$s.encodeIter)(t,fu)):(0,$s.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,ST.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,$s.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 $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=eP&&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,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>eP?(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=$d(t);return r=t.serialize=s.serializer.serialize,r(e)}function b6(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||tP(e,s);return o=>b6(o).then(i)}return e&&Ct.get(e)?.deserialize||tP(e,s)}function tP(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 y6(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,ST,$s,xi,Tn,Vd,rP,sP,nP,fu,Ct,TT,ZM,iP,O6,N6,eP,Qo=Te(()=>{kd=D(VE()),ST=D(xd()),$s=require("msgpackr"),xi=require("cbor-x"),Tn=require("zlib"),Vd=require("stream");Pr();rP=require("../../index"),sP=D(X()),nP=D(b()),fu={useRecords:!1,useToJSON:!0},Ct=new Map,TT=Ct;lt.contentTypes=TT;(0,rP._assignPackageExport)("contentTypes",TT);Ct.set("application/json",{serializeStream:kd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ZM=new xi.Encoder(fu);Ct.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new xi.EncoderStream(fu).end(e)},serialize:ZM.encode,deserialize:ZM.decode,q:1});Ct.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Vd.Readable.from((0,$s.encodeIter)(e,fu)):(0,$s.pack)(e)},serialize:$s.pack,deserialize:$s.unpack,q:.9});Ct.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,ST.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(y6(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()}});oP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:O6,q:.8};Ct.set("*/*",oP);Ct.set("",oP);a(O6,"tryJSONParse");a(gT,"registerContentHandlers");N6=require("fastify-plugin"),b6=N6(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");tP=nP.default.get(iP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a($d,"serialize");a(jn,"serializeMessage");a(y6,"streamToBuffer");a(ea,"getDeserializer");a(rP,"deserializerUnknownType");a(I6,"transformIterable")});var Yd={};Qe(Yd,{start:()=>L6});async function C6(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&pl(e);let n=new Bi;try{e.responseHeaders=n;let i=e.url.slice(1),o=OT.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 Eu.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 Eu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Eu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,AT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){w6[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),AT.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?xi.warn(i):xi.info(i):xi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=$d(i.contentType?i:i.toString(),e,o),o}}function L6(e){AT=e,!cP&&(cP=!0,OT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return C6(t,r)}),e.server.ws(async(t,r,s)=>{fu++;let n=new is;uP||(uP=!0,Oc(l=>{fu>0&&l.push({metric:"ws-connections",connections:fu,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.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",()=>{fu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=OT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(jn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:fu}),"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=jn(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,Eu,Lt,w6,AT,cP,OT,uP,fu,lP=Te(()=>{Wo();xn();xi=D(G()),Eu=D(j());Sl();va();di();zS();Lt=new Uint8Array(8),w6=new Float64Array(Lt.buffer,0,1),AT={};a(C6,"http");fu=0;a(L6,"start")});var NT=T((tde,_P)=>{var{recordAction:Kd,recordActionBinary:D6}=(xn(),Z(N_)),U6=require("fastify-plugin"),M6=200;_P.exports=U6(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),D6(n.raw.statusCode<400,"success",_,d,l);let f=M6;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 wT=T((rde,mP)=>{var Xd=require("clone"),jd=Fe(),P6=$(),zd=b(),v6=G(),Wd=require("fs"),bT=require("joi"),{string:Jd}=bT.types(),{hdb_errors:B6,handleHDBError:hu}=j(),{HDB_ERROR_MSGS:H6,HTTP_STATUS_CODES:Qd}=B6,{common_validators:ta}=Ds(),dP=1e9,fP=" is required",q6=["insert","update","upsert"],yT={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:q6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},F6={schema:Jd.required(),table:Jd.required(),action:Jd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:G6,AWS_SECRET:x6,AWS_BUCKET:k6,AWS_FILE_KEY:V6,REGION:$6}=zd.S3_BUCKET_AUTH_KEYS,Y6={s3:{presence:!0},[`s3.${G6}`]:{presence:!0,type:"String"},[`s3.${x6}`]:{presence:!0,type:"String"},[`s3.${k6}`]:{presence:!0,type:"String"},[`s3.${V6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${$6}`]:{presence:!0,type:"String"}},EP=Xd(yT);EP.data.presence={message:fP};var hP=Xd(yT);hP.file_path.presence={message:fP};var K6=Object.assign(Xd(yT),Y6),IT=Xd(F6);IT.csv_url=Jd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();IT.passthrough_headers=bT.object();function W6(e){let t=jd.validateObject(e,EP);return Zd(e,t)}a(W6,"dataObject");function Q6(e){let t=jd.validateBySchema(e,bT.object(IT));return Zd(e,t)}a(Q6,"urlObject");function z6(e){let t=jd.validateObject(e,hP);return Zd(e,t)}a(z6,"fileObject");function J6(e){let t=jd.validateObject(e,K6);return Zd(e,t)}a(J6,"s3FileObject");function Zd(e,t){if(!t){let r=P6.checkGlobalSchemaTable(e.schema,e.table);if(r)return hu(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?hu(s,`No such file or directory ${s.path}`,Qd.BAD_REQUEST):s.code===zd.NODE_ERROR_CODES.EACCES?hu(s,`Permission denied ${s.path}`,Qd.BAD_REQUEST):hu(s)}try{let s=Wd.statSync(e.file_path).size;if(s>dP)return hu(new Error,H6.MAX_FILE_SIZE_ERR(s,dP),Qd.BAD_REQUEST)}catch(s){v6.error(s),console.error(s)}}}return t}a(Zd,"postValidateChecks");mP.exports={dataObject:W6,urlObject:Q6,fileObject:z6,s3FileObject:J6}});var CT=T((nde,pP)=>{"use strict";var mu=G(),ef=b();async function X6(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")?(mu.info(i.message),i):i.http_resp_msg?(mu.error(`Error calling operation: ${e.name}`),mu.error(i.http_resp_msg),i):(mu.error(`Error calling operation: ${e.name}`),mu.error(i),i)}}a(X6,"callOperationFunctionAsAwait");pP.exports={callOperationFunctionAsAwait:X6}});var TP=T((ode,SP)=>{"use strict";var LT=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}},DT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};SP.exports={BulkLoadFileObject:LT,BulkLoadDataObject:DT}});var gP=T((cde,RP)=>{"use strict";var UT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};RP.exports=UT});var qT=T((Ede,qP)=>{"use strict";var tf=xr(),sf=wT(),j6=require("needle"),Rs=b(),lde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:LP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Vi}=LP,sa=G(),MT=require("papaparse");ra.promisifyPapaParse();var gs=require("fs-extra"),Z6=require("path"),{chain:AP}=require("stream-chain"),OP=require("stream-json/streamers/StreamArray"),NP=require("stream-json/utils/Batch"),bP=require("stream-chain/utils/comp"),{finished:yP}=require("stream"),e9=X(),DP=CT(),t9=pT(),{BulkLoadFileObject:vT,BulkLoadDataObject:r9}=TP(),BT=aT(),{verifyBulkLoadAttributePerms:UP}=Hd(),_de=gP(),dde=st(),fde=nn(),{databases:s9}=(fe(),Z(Ce)),{coerceType:n9}=(nf(),Z(FT)),IP="No records parsed from csv file.",ki=`${e9.get("HDB_ROOT")}/tmp`,{schema_regex:i9}=Ds(),wP=1024*1024*2,CP=5e3,o9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};qP.exports={csvDataLoad:a9,csvURLLoad:c9,csvFileLoad:u9,importFromS3:l9};async function a9(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=vP(e.schema,e.table),i=MT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:PT.bind(null,n),dynamicTyping:!1}),o=new BT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&UP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Dt.BAD_REQUEST,void 0,void 0,!0);let u=new r9(e.action,e.schema,e.table,i.data);return s=await DP.callOperationFunctionAsAwait(BP,u,null),s.message===IP?IP:HP(s.records,s.number_written)}catch(n){throw $i(n)}}a(a9,"csvDataLoad");async function c9(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=`${ki}/${r}`;try{await _9(e,r)}catch(n){throw sa.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new vT(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 HT(n);return await rf(s),i}catch(n){throw await rf(s),$i(n)}}a(c9,"csvURLLoad");async function u9(e){let t=sf.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new vT(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 HT(r)}catch(s){throw $i(s)}}a(u9,"csvFileLoad");async function l9(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=Z6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new vT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await d9(n,e);let o=await HT(i);return await rf(r),o}catch(s){throw await rf(r),$i(s)}}a(l9,"importFromS3");async function _9(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)}E9(r,e.csv_url),await f9(t,r.raw)}a(_9,"downloadCSVFile");async function d9(e,t){try{let r=`${ki}/${e}`;await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await t9.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,Vi(Et.S3_DOWNLOAD_ERR))}}a(d9,"downloadFileFromS3");async function f9(e,t){try{await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,t)}catch(r){throw sa.error(Et.WRITE_TEMP_FILE_ERR),$e(r,Vi(Et.DEFAULT_BULK_LOAD_ERR))}}a(f9,"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 E9(e,t){if(e.statusCode!==LP.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(!o9[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(E9,"validateURLResponse");async function HT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await h9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await m9(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 HP(t.records,t.number_written)}catch(t){throw $i(t)}}a(HT,"fileLoad");async function MP(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&&UP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(MP,"validateChunk");async function PP(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 DP.callOperationFunctionAsAwait(BP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(Et.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(PP,"insertChunk");async function h9(e){let t={records:0,number_written:0},r=vP(e.schema,e.table);try{let s=new BT,n=gs.createReadStream(e.file_path,{highWaterMark:wP});n.setEncoding("utf8"),await MT.parsePromise(n,MP.bind(null,e,s),PT.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:wP}),n.setEncoding("utf8"),await MT.parsePromise(n,PP.bind(null,e,t),PT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(Et.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(h9,"callPapaParse");function vP(e,t){let r=s9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>n9(i,n));return s}a(vP,"createTransformMap");function PT(e,t,r){let s=e.get(r);return s?s(t):ra.autoCast(t)}a(PT,"typeFunction");async function m9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new BT,n=AP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),OP.withParser(),c=>c.value,new NP({batchSize:CP}),bP(async c=>{await MP(e,s,r,c)})]);await new Promise((c,u)=>{yP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=AP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),OP.withParser(),c=>c.value,new NP({batchSize:CP}),bP(async c=>{await PP(e,t,r,c)})]);return await new Promise((c,u)=>{yP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(Et.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(m9,"insertJson");async function BP(e){let t={};try{e.data&&e.data.length>0&&p9(e.data[0])?t=await S9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",sa.info(t.message))}catch(r){throw $i(r)}return t}a(BP,"callBulkFileLoad");function p9(e){let t=Object.keys(e);for(let r of t)if(!i9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(p9,"validateColumnNames");async function S9(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 $i(o)}}a(S9,"bulkFileLoad");function HP(e,t){return`successfully loaded ${t} of ${e} records`}a(HP,"buildResponseMsg");function $i(e){return $e(e,Vi(Et.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var GP=T((mde,FP)=>{"use strict";var GT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};FP.exports=GT});var VP=T((Sde,kP)=>{"use strict";var T9=b(),xP=require("moment"),R9=require("uuid").v4,xT=class{static{a(this,"JobObject")}constructor(){this.id=R9(),this.type=void 0,this.start_datetime=xP().valueOf(),this.created_datetime=xP().valueOf(),this.end_datetime=void 0,this.status=T9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};kP.exports=xT});var af=T((Rde,zP)=>{"use strict";var g9=require("uuid").v4,KP=xr(),WP=Gr(),A9=vs(),O9=No(),N9=GP(),Ye=b(),b9=VP(),y9=Bp(),Jr=G(),I9=Ja(),na=$(),{promisify:w9}=require("util"),Yi=require("moment"),C9=Fd(),of=wT(),$P=Gh(),{deleteTransactionLogsBeforeValidator:L9}=rT(),{handleHDBError:D9,hdb_errors:U9}=j(),{HTTP_STATUS_CODES:M9}=U9,YP=WP.searchByValue,P9=WP.searchByHash,v9=KP.insert,B9=w9(C9.evaluateSQL),H9=KP.update;zP.exports={addJob:G9,updateJob:k9,handleGetJob:q9,handleGetJobsByStartDate:F9,getJobById:QP};async function q9(e){try{let t=await QP(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(q9,"handleGetJob");async function F9(e){try{let t=await x9(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(F9,"handleGetJobsByStartDate");async function G9(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=$P(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$P(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=L9(e);break;default:break}if(s)throw D9(s,s.message,M9.BAD_REQUEST,void 0,void 0,!0);let n=new b9;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 A9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await YP(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=g9();try{o=await YP(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 I9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await v9(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(G9,"addJob");async function x9(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new N9(s,e.hdb_user);try{return await B9(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(x9,"getJobsInDateRange");async function QP(e){if(na.isEmptyOrZeroLength(e))return na.errorizeMessage("Invalid job ID specified.");let t=new O9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await P9(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(QP,"getJobById");async function k9(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=Yi().valueOf());let t=new y9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await H9(t),r}a(k9,"updateJob")});var tv=T((Ade,ev)=>{"use strict";var JP=$(),cr=b(),V9=require("moment"),cf=qT(),uf=G(),XP=af(),jP=Gd(),ZP=Ai(),$9=Ze(),Y9=Md(),kT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function K9(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(JP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(JP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case cr.JOB_TYPE_ENUM.csv_file_load:await Tn(e,cf.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Tn(e,cf.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Tn(e,cf.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Tn(e,cf.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Tn(e,jP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Tn(e,jP.export_to_s3);break;case cr.JOB_TYPE_ENUM.delete_files_before:case cr.JOB_TYPE_ENUM.delete_records_before:await Tn(e,ZP.deleteFilesBefore);break;case cr.JOB_TYPE_ENUM.delete_audit_logs_before:await Tn(e,ZP.deleteAuditLogsBefore);break;case cr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Tn(e,Y9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(K9,"parseMessage");async function Tn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=V9().valueOf(),await XP.updateJob(e.job),await W9(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 XP.updateJob(e.job)}catch(n){throw uf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Tn,"runJob");async function W9(e){uf.trace("launching job thread:",e),$9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(W9,"launchJobThread");ev.exports={parseMessage:K9,RunnerMessage:kT}});var sv=T((Nde,rv)=>{"use strict";var VT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};rv.exports=VT});var JT=T((yde,zT)=>{"use strict";var ff=Gr(),KT=Fd(),lf=qT(),Rn=U_(),_f=pi(),Su=Ai(),Q9=gp(),pu=gr(),df=Lp(),Ut=tT(),ht=G(),z9=Mp(),J9=J_(),X9=ES(),j9=ed(),Z9=hS(),e7=mS(),t7=TS(),r7=gS(),$T=NS(),nv=Gd(),s7=Hd(),WT=af(),P=b(),{hdb_errors:Ru,handleHDBError:Tu}=j(),{HTTP_STATUS_CODES:iv}=Ru,YT=CS(),ov=pd(),hv=require("util"),ia=xr(),n7=on(),i7=Fo(),av=tv(),cv=Mc(),uv=(Ad(),Z(Zc)),lv=hr(),_v=Md(),dv=Id(),{setServerUtilities:o7}=(nf(),Z(FT)),{CONTEXT:a7}=(as(),Z(ME)),{_assignPackageExport:c7}=require("../../index"),{transformReq:u7}=$(),{server:l7}=(Pr(),Z(to)),_7=CT(),fv=ff.searchByHash,d7=ff.searchByValue,f7=hv.promisify(ff.search),E7=hv.promisify(KT.evaluateSQL),h7={[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=sv();async function mv(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 _7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return h7[e.body.operation]&&n7.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(mv,"processLocalTransaction");var Ev=p7();zT.exports={chooseOperation:pv,getOperationFunction:Sv,operation:QT,processLocalTransaction:mv};o7(zT.exports);l7.operation=QT;function pv(e){let t;try{t=Sv(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=KT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=KT.checkASTPermissions(e,i);if(o)throw ht.error(`${iv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Tu(new Error,o,Ru.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=s7.verifyPerms(i,n);if(o)throw ht.error(`${iv.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Tu(new Error,o,Ru.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Tu(n,"There was an error when trying to choose an operation path")}return r}a(pv,"chooseOperation");function Sv(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),Ev.has(e.operation))return Ev.get(e.operation);throw Tu(new Error,Ru.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Ru.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Sv,"getOperationFunction");c7("operation",QT);function QT(e,t){e.hdb_user=this[a7]?.user,e.bypass_auth=!t;let r=pv(e);return mv({body:e},r)}a(QT,"operation");async function m7(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 Su.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(m7,"catchup");async function Ys(e){u7(e);let t,r;try{r=await WT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new av.RunnerMessage(t,e);return await av.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),Tu(s,n)}}a(Ys,"executeJob");function p7(){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(ff.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(fv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(fv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(d7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(f7)),e.set(P.OPERATIONS_ENUM.SQL,new H(E7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ys,lf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ys,lf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ys,lf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ys,lf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(Rn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(Rn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(Rn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(Rn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(Rn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(Rn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(Rn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(Rn.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(Su.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(pu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(pu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(pu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(pu.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(pu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(z9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(J9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(X9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(j9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(Z9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(e7)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(lv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(t7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(r7)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H($T.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H($T.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H($T.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Ys,nv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ys,Su.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ys,Su.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ys,nv.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(WT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(WT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(YT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(YT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(YT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(ov.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(ov.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(m7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(i7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ys,Su.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(Q9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(cv.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(cv.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(uv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(uv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(lv.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(_v.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ys,_v.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(dv.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(dv.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(Rn.getBackup)),e}a(p7,"initializeOperationFunctionMap")});var hf=T((wde,gv)=>{"use strict";var XT=b(),S7=$(),gu=G(),{handleHDBError:jT,hdb_errors:Ef}=j(),{isMainThread:T7}=require("worker_threads"),{Readable:R7}=require("stream"),Tv=require("os"),g7=require("util"),A7=$p(),O7=g7.promisify(A7.authorize),Rv=JT(),{createGzip:N7,constants:b7}=require("zlib");function y7(e){let t=`Found an uncaught exception with message: ${e.message}. ${Tv.EOL}Stack: ${e.stack} ${Tv.EOL}Terminating ${T7?"HDB":"thread"}.`;console.error(t),gu.fatal(t),process.exit(1)}a(y7,"handleServerUncaughtException");function I7(e,t,r){if(gu[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(I7,"serverErrorHandler");function w7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=jT(new Error,"Invalid JSON.",Ef.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(S7.isEmpty(e.body.operation)){let s=jT(new Error,"Request body must include an 'operation' property.",Ef.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(w7,"reqBodyValidationHandler");function C7(e,t,r){let s;e.body.operation!==XT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==XT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==XT.OPERATIONS_ENUM.LOGOUT?O7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{gu.warn(n),gu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(jT(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(C7,"authHandler");async function L7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Rv.chooseOperation(e.body);let n=await Rv.processLocalTransaction(e,s);if(n instanceof R7&&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(N7({level:b7.Z_BEST_SPEED})))}return n}catch(n){throw gu.error(n),n}}a(L7,"handlePostRequest");gv.exports={authHandler:C7,handlePostRequest:L7,handleServerUncaughtException:y7,serverErrorHandler:I7,reqBodyValidationHandler:w7}});var bv=T((Lde,Nv)=>{"use strict";var D7=require("fastify-plugin"),{handlePostRequest:Av,authHandler:U7,reqBodyValidationHandler:M7}=hf();async function P7(e){e.decorate("hdbCore",{preValidation:[M7,U7],request:t=>Ov(Av(t,response)),requestWithoutAuthentication:(t,r)=>Ov(Av(t,r,!0))})}a(P7,"hdbCore");async function Ov(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(Ov,"convertAsyncIterators");Nv.exports=D7(P7)});var Iv=T((Ude,yv)=>{"use strict";var ZT=require("fs"),oa=X();oa.initSync();var{CONFIG_PARAMS:Au}=b(),v7=1024*1024*1024;function B7(e){let t=oa.get(Au.HTTP_TIMEOUT),r=oa.get(Au.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:v7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=oa.get(Au.TLS_PRIVATEKEY),i=oa.get(Au.TLS_CERTIFICATE),o=oa.get(Au.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:ZT.readFileSync(`${n}`),cert:ZT.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()}});iP={type:"application/json",serializeStream:kd.streamAsJSON,serialize:JSON.stringify,deserialize:A6,q:.8};Ct.set("*/*",iP);Ct.set("",iP);a(A6,"tryJSONParse");a(RT,"registerContentHandlers");O6=require("fastify-plugin"),N6=O6(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");eP=sP.default.get(nP.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(Yd,"serialize");a(Zn,"serializeMessage");a(b6,"streamToBuffer");a(ta,"getDeserializer");a(tP,"deserializerUnknownType");a(y6,"transformIterable")});var Kd={};Qe(Kd,{start:()=>C6});async function w6(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=AT.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 hu.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 hu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new hu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,gT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){I6[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),gT.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?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=Yd(i.contentType?i:i.toString(),e,o),o}}function C6(e){gT=e,!aP&&(aP=!0,AT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return w6(t,r)}),e.server.ws(async(t,r,s)=>{Eu++;let n=new is;cP||(cP=!0,Nc(l=>{Eu>0&&l.push({metric:"ws-connections",connections:Eu,byThread:!0})}));let i;t.on("error",l=>{i=!0,ki.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",()=>{Eu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=AT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(Zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,br(h=>({count:h.count,total:Eu}),"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),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ki,hu,Lt,I6,gT,aP,AT,cP,Eu,uP=Te(()=>{Qo();kn();ki=D(F()),hu=D(j());Tl();Ba();fi();QS();Lt=new Uint8Array(8),I6=new Float64Array(Lt.buffer,0,1),gT={};a(w6,"http");Eu=0;a(C6,"start")});var OT=T((ede,lP)=>{var{recordAction:Wd,recordActionBinary:L6}=(kn(),Z(b_)),D6=require("fastify-plugin"),U6=200;lP.exports=D6(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),L6(n.raw.statusCode<400,"success",_,d,l);let f=U6;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 IT=T((tde,hP)=>{var jd=require("clone"),Zd=qe(),M6=$(),Jd=b(),P6=F(),Qd=require("fs"),NT=require("joi"),{string:Xd}=NT.types(),{hdb_errors:v6,handleHDBError:mu}=j(),{HDB_ERROR_MSGS:B6,HTTP_STATUS_CODES:zd}=v6,{common_validators:ra}=Ds(),_P=1e9,dP=" is required",H6=["insert","update","upsert"],bT={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:H6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},F6={schema:Xd.required(),table:Xd.required(),action:Xd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:q6,AWS_SECRET:G6,AWS_BUCKET:x6,AWS_FILE_KEY:k6,REGION:V6}=Jd.S3_BUCKET_AUTH_KEYS,$6={s3:{presence:!0},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String"},[`s3.${x6}`]:{presence:!0,type:"String"},[`s3.${k6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${V6}`]:{presence:!0,type:"String"}},fP=jd(bT);fP.data.presence={message:dP};var EP=jd(bT);EP.file_path.presence={message:dP};var Y6=Object.assign(jd(bT),$6),yT=jd(F6);yT.csv_url=Xd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();yT.passthrough_headers=NT.object();function K6(e){let t=Zd.validateObject(e,fP);return ef(e,t)}a(K6,"dataObject");function W6(e){let t=Zd.validateBySchema(e,NT.object(yT));return ef(e,t)}a(W6,"urlObject");function Q6(e){let t=Zd.validateObject(e,EP);return ef(e,t)}a(Q6,"fileObject");function z6(e){let t=Zd.validateObject(e,Y6);return ef(e,t)}a(z6,"s3FileObject");function ef(e,t){if(!t){let r=M6.checkGlobalSchemaTable(e.schema,e.table);if(r)return mu(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?mu(s,`No such file or directory ${s.path}`,zd.BAD_REQUEST):s.code===Jd.NODE_ERROR_CODES.EACCES?mu(s,`Permission denied ${s.path}`,zd.BAD_REQUEST):mu(s)}try{let s=Qd.statSync(e.file_path).size;if(s>_P)return mu(new Error,B6.MAX_FILE_SIZE_ERR(s,_P),zd.BAD_REQUEST)}catch(s){P6.error(s),console.error(s)}}}return t}a(ef,"postValidateChecks");hP.exports={dataObject:K6,urlObject:W6,fileObject:Q6,s3FileObject:z6}});var wT=T((sde,mP)=>{"use strict";var pu=F(),tf=b();async function J6(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")?(pu.info(i.message),i):i.http_resp_msg?(pu.error(`Error calling operation: ${e.name}`),pu.error(i.http_resp_msg),i):(pu.error(`Error calling operation: ${e.name}`),pu.error(i),i)}}a(J6,"callOperationFunctionAsAwait");mP.exports={callOperationFunctionAsAwait:J6}});var SP=T((ide,pP)=>{"use strict";var CT=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}},LT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};pP.exports={BulkLoadFileObject:CT,BulkLoadDataObject:LT}});var RP=T((ade,TP)=>{"use strict";var DT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};TP.exports=DT});var HT=T((fde,HP)=>{"use strict";var rf=xr(),nf=IT(),X6=require("needle"),Rs=b(),ude=ke(),sa=$(),{handleHDBError:$e,hdb_errors:CP}=j(),{HTTP_STATUS_CODES:Dt,HDB_ERROR_MSGS:ht,CHECK_LOGS_WRAPPER:$i}=CP,na=F(),UT=require("papaparse");sa.promisifyPapaParse();var gs=require("fs-extra"),j6=require("path"),{chain:gP}=require("stream-chain"),AP=require("stream-json/streamers/StreamArray"),OP=require("stream-json/utils/Batch"),NP=require("stream-chain/utils/comp"),{finished:bP}=require("stream"),Z6=X(),LP=wT(),e9=mT(),{BulkLoadFileObject:PT,BulkLoadDataObject:t9}=SP(),vT=oT(),{verifyBulkLoadAttributePerms:DP}=Fd(),lde=RP(),_de=st(),dde=nn(),{databases:r9}=(fe(),Z(Ce)),{coerceType:s9}=(of(),Z(FT)),yP="No records parsed from csv file.",Vi=`${Z6.get("HDB_ROOT")}/tmp`,{schema_regex:n9}=Ds(),IP=1024*1024*2,wP=5e3,i9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};HP.exports={csvDataLoad:o9,csvURLLoad:a9,csvFileLoad:c9,importFromS3:u9};async function o9(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=PP(e.schema,e.table),i=UT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:MT.bind(null,n),dynamicTyping:!1}),o=new vT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&DP(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 t9(e.action,e.schema,e.table,i.data);return s=await LP.callOperationFunctionAsAwait(vP,u,null),s.message===yP?yP:BP(s.records,s.number_written)}catch(n){throw Yi(n)}}a(o9,"csvDataLoad");async function a9(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=`${Vi}/${r}`;try{await l9(e,r)}catch(n){throw na.error(ht.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,$i(ht.DOWNLOAD_FILE_ERR(r)))}try{let n=new PT(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 BT(n);return await sf(s),i}catch(n){throw await sf(s),Yi(n)}}a(a9,"csvURLLoad");async function c9(e){let t=nf.fileObject(e);if(t)throw $e(t,t.message,Dt.BAD_REQUEST,void 0,void 0,!0);let r=new PT(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 BT(r)}catch(s){throw Yi(s)}}a(c9,"csvFileLoad");async function u9(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=`${Vi}/${n}`;let i=new PT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await _9(n,e);let o=await BT(i);return await sf(r),o}catch(s){throw await sf(r),Yi(s)}}a(u9,"importFromS3");async function l9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await X6("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)}f9(r,e.csv_url),await d9(t,r.raw)}a(l9,"downloadCSVFile");async function _9(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 e9.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,$i(ht.S3_DOWNLOAD_ERR))}}a(_9,"downloadFileFromS3");async function d9(e,t){try{await gs.mkdirp(Vi),await gs.writeFile(`${Vi}/${e}`,t)}catch(r){throw na.error(ht.WRITE_TEMP_FILE_ERR),$e(r,$i(ht.DEFAULT_BULK_LOAD_ERR))}}a(d9,"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 f9(e,t){if(e.statusCode!==CP.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(!i9[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(f9,"validateURLResponse");async function BT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await E9(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await h9(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 BP(t.records,t.number_written)}catch(t){throw Yi(t)}}a(BT,"fileLoad");async function UP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await rf.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&DP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(UP,"validateChunk");async function MP(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 LP.callOperationFunctionAsAwait(vP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,$i(ht.INSERT_CSV_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_CSV_ERR+" - "+c);r(u)}}a(MP,"insertChunk");async function E9(e){let t={records:0,number_written:0},r=PP(e.schema,e.table);try{let s=new vT,n=gs.createReadStream(e.file_path,{highWaterMark:IP});n.setEncoding("utf8"),await UT.parsePromise(n,UP.bind(null,e,s),MT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:IP}),n.setEncoding("utf8"),await UT.parsePromise(n,MP.bind(null,e,t),MT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,$i(ht.PAPA_PARSE_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.PAPA_PARSE_ERR+s)}}a(E9,"callPapaParse");function PP(e,t){let r=r9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>s9(i,n));return s}a(PP,"createTransformMap");function MT(e,t,r){let s=e.get(r);return s?s(t):sa.autoCast(t)}a(MT,"typeFunction");async function h9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new vT,n=gP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),AP.withParser(),c=>c.value,new OP({batchSize:wP}),NP(async c=>{await UP(e,s,r,c)})]);await new Promise((c,u)=>{bP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Dt.BAD_REQUEST);let o=gP([gs.createReadStream(e.file_path,{encoding:"utf-8"}),AP.withParser(),c=>c.value,new OP({batchSize:wP}),NP(async c=>{await MP(e,t,r,c)})]);return await new Promise((c,u)=>{bP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,$i(ht.INSERT_JSON_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.INSERT_JSON_ERR+s)}}a(h9,"insertJson");async function vP(e){let t={};try{e.data&&e.data.length>0&&m9(e.data[0])?t=await p9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",na.info(t.message))}catch(r){throw Yi(r)}return t}a(vP,"callBulkFileLoad");function m9(e){let t=Object.keys(e);for(let r of t)if(!n9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(m9,"validateColumnNames");async function p9(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 Yi(o)}}a(p9,"bulkFileLoad");function BP(e,t){return`successfully loaded ${t} of ${e} records`}a(BP,"buildResponseMsg");function Yi(e){return $e(e,$i(ht.DEFAULT_BULK_LOAD_ERR),Dt.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,ht.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Yi,"buildTopLevelErrMsg")});var qP=T((hde,FP)=>{"use strict";var qT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};FP.exports=qT});var kP=T((pde,xP)=>{"use strict";var S9=b(),GP=require("moment"),T9=require("uuid").v4,GT=class{static{a(this,"JobObject")}constructor(){this.id=T9(),this.type=void 0,this.start_datetime=GP().valueOf(),this.created_datetime=GP().valueOf(),this.end_datetime=void 0,this.status=S9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};xP.exports=GT});var cf=T((Tde,QP)=>{"use strict";var R9=require("uuid").v4,YP=xr(),KP=Gr(),g9=vs(),A9=bo(),O9=qP(),Ye=b(),N9=kP(),b9=vp(),Jr=F(),y9=Xa(),ia=$(),{promisify:I9}=require("util"),Ki=require("moment"),w9=Gd(),af=IT(),VP=xh(),{deleteTransactionLogsBeforeValidator:C9}=tT(),{handleHDBError:L9,hdb_errors:D9}=j(),{HTTP_STATUS_CODES:U9}=D9,$P=KP.searchByValue,M9=KP.searchByHash,P9=YP.insert,v9=I9(w9.evaluateSQL),B9=YP.update;QP.exports={addJob:q9,updateJob:x9,handleGetJob:H9,handleGetJobsByStartDate:F9,getJobById:WP};async function H9(e){try{let t=await WP(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(H9,"handleGetJob");async function F9(e){try{let t=await G9(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(F9,"handleGetJobsByStartDate");async function q9(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=VP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=VP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=C9(e);break;default:break}if(s)throw L9(s,s.message,U9.BAD_REQUEST,void 0,void 0,!0);let n=new N9;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 g9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await $P(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=R9();try{o=await $P(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 y9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await P9(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 G9(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 O9(s,e.hdb_user);try{return await v9(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(G9,"getJobsInDateRange");async function WP(e){if(ia.isEmptyOrZeroLength(e))return ia.errorizeMessage("Invalid job ID specified.");let t=new A9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await M9(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(WP,"getJobById");async function x9(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=Ki().valueOf());let t=new b9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await B9(t),r}a(x9,"updateJob")});var ev=T((gde,ZP)=>{"use strict";var zP=$(),cr=b(),k9=require("moment"),uf=HT(),lf=F(),JP=cf(),XP=xd(),jP=Oi(),V9=Ze(),$9=Pd(),xT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Y9(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(zP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(zP.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,uf.csvFileLoad);break;case cr.JOB_TYPE_ENUM.csv_url_load:await Rn(e,uf.csvURLLoad);break;case cr.JOB_TYPE_ENUM.csv_data_load:await Rn(e,uf.csvDataLoad);break;case cr.JOB_TYPE_ENUM.import_from_s3:await Rn(e,uf.importFromS3);break;case cr.JOB_TYPE_ENUM.empty_trash:break;case cr.JOB_TYPE_ENUM.export_local:await Rn(e,XP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Rn(e,XP.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,$9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Y9,"parseMessage");async function Rn(e,t){try{e.job.status=cr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=k9().valueOf(),await JP.updateJob(e.job),await K9(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):lf.error(`There was an error running ${t.name} job with id ${e.job.id}`),lf.error(s),e.job.message=s,e.job.status=cr.JOB_STATUS_ENUM.ERROR;try{await JP.updateJob(e.job)}catch(n){throw lf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Rn,"runJob");async function K9(e){lf.trace("launching job thread:",e),V9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[cr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(K9,"launchJobThread");ZP.exports={parseMessage:Y9,RunnerMessage:xT}});var rv=T((Ode,tv)=>{"use strict";var kT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};tv.exports=kT});var zT=T((bde,QT)=>{"use strict";var Ef=Gr(),YT=Gd(),_f=HT(),gn=M_(),df=Si(),Tu=Oi(),W9=Rp(),Su=gr(),ff=Cp(),Ut=eT(),mt=F(),Q9=Up(),z9=X_(),J9=fS(),X9=td(),j9=ES(),Z9=hS(),e7=SS(),t7=RS(),VT=OS(),sv=xd(),r7=Fd(),KT=cf(),P=b(),{hdb_errors:gu,handleHDBError:Ru}=j(),{HTTP_STATUS_CODES:nv}=gu,$T=wS(),iv=Sd(),Ev=require("util"),oa=xr(),s7=on(),n7=Go(),ov=ev(),av=Pc(),cv=(Od(),Z(eu)),uv=hr(),lv=Pd(),_v=wd(),{setServerUtilities:i7}=(of(),Z(FT)),{CONTEXT:o7}=(as(),Z(PE)),{_assignPackageExport:a7}=require("../../index"),{transformReq:c7}=$(),{server:u7}=(Pr(),Z(ro)),l7=wT(),dv=Ef.searchByHash,_7=Ef.searchByValue,d7=Ev.promisify(Ef.search),f7=Ev.promisify(YT.evaluateSQL),E7={[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=rv();async function hv(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 l7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return E7[e.body.operation]&&s7.setSchemaDataToGlobal(s=>{s&&mt.error(s)}),r}a(hv,"processLocalTransaction");var fv=m7();QT.exports={chooseOperation:mv,getOperationFunction:pv,operation:WT,processLocalTransaction:hv};i7(QT.exports);u7.operation=WT;function mv(e){let t;try{t=pv(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=YT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=YT.checkASTPermissions(e,i);if(o)throw mt.error(`${nv.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Ru(new Error,o,gu.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=r7.verifyPerms(i,n);if(o)throw mt.error(`${nv.FORBIDDEN} from operation ${e.operation}`),mt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Ru(new Error,o,gu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Ru(n,"There was an error when trying to choose an operation path")}return r}a(mv,"chooseOperation");function pv(e){if(mt.trace(`getOperationFunction with operation: ${e.operation}`),fv.has(e.operation))return fv.get(e.operation);throw Ru(new Error,gu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),gu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(pv,"getOperationFunction");a7("operation",WT);function WT(e,t){e.hdb_user=this[o7]?.user,e.bypass_auth=!t;let r=mv(e);return hv({body:e},r)}a(WT,"operation");async function h7(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 Tu.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(h7,"catchup");async function Ys(e){c7(e);let t,r;try{r=await KT.addJob(e),t=r.createdJob,mt.info("addJob result",r);let s=new ov.RunnerMessage(t,e);return await ov.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),Ru(s,n)}}a(Ys,"executeJob");function m7(){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(Ef.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H(dv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H(dv)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(_7)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(d7)),e.set(P.OPERATIONS_ENUM.SQL,new H(f7)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Ys,_f.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Ys,_f.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Ys,_f.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Ys,_f.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(df.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(df.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(df.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(df.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Tu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(Su.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(Su.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(Su.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(Su.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(ff.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(ff.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(ff.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(ff.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(Su.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(Q9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(z9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(J9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(X9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(j9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Z9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(uv.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(e7.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(t7)),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(Ys,sv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Ys,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Ys,Tu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Ys,sv.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(iv.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(iv.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(h7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(n7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Ys,Tu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(W9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(av.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(av.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(cv.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(cv.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(uv.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(lv.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Ys,lv.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(_v.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(_v.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(gn.getBackup)),e}a(m7,"initializeOperationFunctionMap")});var mf=T((Ide,Rv)=>{"use strict";var JT=b(),p7=$(),Au=F(),{handleHDBError:XT,hdb_errors:hf}=j(),{isMainThread:S7}=require("worker_threads"),{Readable:T7}=require("stream"),Sv=require("os"),R7=require("util"),g7=Vp(),A7=R7.promisify(g7.authorize),Tv=zT(),{createGzip:O7,constants:N7}=require("zlib");function b7(e){let t=`Found an uncaught exception with message: ${e.message}. ${Sv.EOL}Stack: ${e.stack} ${Sv.EOL}Terminating ${S7?"HDB":"thread"}.`;console.error(t),Au.fatal(t),process.exit(1)}a(b7,"handleServerUncaughtException");function y7(e,t,r){if(Au[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:hf.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(y7,"serverErrorHandler");function I7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=XT(new Error,"Invalid JSON.",hf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(p7.isEmpty(e.body.operation)){let s=XT(new Error,"Request body must include an 'operation' property.",hf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(I7,"reqBodyValidationHandler");function w7(e,t,r){let s;e.body.operation!==JT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==JT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==JT.OPERATIONS_ENUM.LOGOUT?A7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Au.warn(n),Au.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(XT(n,i,hf.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(w7,"authHandler");async function C7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Tv.chooseOperation(e.body);let n=await Tv.processLocalTransaction(e,s);if(n instanceof T7&&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(O7({level:N7.Z_BEST_SPEED})))}return n}catch(n){throw Au.error(n),n}}a(C7,"handlePostRequest");Rv.exports={authHandler:w7,handlePostRequest:C7,handleServerUncaughtException:b7,serverErrorHandler:y7,reqBodyValidationHandler:I7}});var Nv=T((Cde,Ov)=>{"use strict";var L7=require("fastify-plugin"),{handlePostRequest:gv,authHandler:D7,reqBodyValidationHandler:U7}=mf();async function M7(e){e.decorate("hdbCore",{preValidation:[U7,D7],request:t=>Av(gv(t,response)),requestWithoutAuthentication:(t,r)=>Av(gv(t,r,!0))})}a(M7,"hdbCore");async function Av(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(Av,"convertAsyncIterators");Ov.exports=L7(M7)});var yv=T((Dde,bv)=>{"use strict";var jT=require("fs"),aa=X();aa.initSync();var{CONFIG_PARAMS:Ou}=b(),P7=1024*1024*1024;function v7(e){let t=aa.get(Ou.HTTP_TIMEOUT),r=aa.get(Ou.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:P7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=aa.get(Ou.TLS_PRIVATEKEY),i=aa.get(Ou.TLS_CERTIFICATE),o=aa.get(Ou.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:jT.readFileSync(`${n}`),cert:jT.readFileSync(i)+(o?`
|
|
27
27
|
|
|
28
|
-
`+ZT.readFileSync(o):"")},s.http2=!0}return s}a(B7,"getServerOptions");yv.exports=B7});var Lv=T((Pde,Cv)=>{"use strict";var eR=X();eR.initSync();var{CONFIG_PARAMS:wv}=b();function H7(){let e=eR.get(wv.HTTP_CORSACCESSLIST),t=eR.get(wv.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(H7,"getCORSOptions");Cv.exports=H7});var Mv=T((Bde,Uv)=>{"use strict";var Dv=X();Dv.initSync();var q7=b();function F7(){return Dv.get(q7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(F7,"getHeaderTimeoutConfig");Uv.exports=F7});var sR={};Qe(sR,{customFunctionsServer:()=>k7,handleFile:()=>x7,ready:()=>Y7});async function x7(e,t,r,s){if(!gn){let c=tR.get(rR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);gn=Kv(c),lt.http((await gn).server)}let n=await gn,i=(0,vv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Pv.has(i)){Pv.add(i);try{n.register($7(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function k7(){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 V7();let e=tR.get(rR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=gn=await Kv(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 V7(){try{De.info("Custom Functions starting configuration."),await xv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function $7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Bv.existsSync)(e)&&r.register(Gv.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 Kv(e){De.info("Custom Functions starting buildServer.");let t=(0,kv.default)(e),r=(0,Hv.default)(t);r.server.headersTimeout=(0,$v.default)(),r.setErrorHandler(Yv.serverErrorHandler);let s=(0,Vv.default)();return s&&r.register(qv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Fv.default),await r.register(G7),await r.after(),gT(r),De.info("Custom Functions completed buildServer."),r}function Y7(){if(gn)return gn.then?gn.then(e=>e.ready()):gn.ready()}var vv,Bv,Hv,qv,Fv,Gv,tR,rR,De,G7,xv,kv,Vv,$v,Yv,gn,Pv,Wv=Te(()=>{vv=require("path"),Bv=require("fs"),Hv=D(require("fastify")),qv=D(require("@fastify/cors")),Fv=D(NT()),Gv=D(require("@fastify/autoload")),tR=D(X()),rR=D(b()),De=D(G()),G7=D(bv()),xv=D(gr()),kv=D(Iv()),Vv=D(Lv()),$v=D(Mv()),Yv=D(hf());Wo();Pr();Pv=new Set;a(x7,"handleFile");a(k7,"customFunctionsServer");a(V7,"setUp");a($7,"buildRouteFolder");a(Kv,"buildServer");a(Y7,"ready")});var nR={};Qe(nR,{start:()=>K7});function K7(e){return{handleFile(t,r,s){zv||(zv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Qv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Jv.default)(n,(0,Xv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Qv.set(r,s)}}}var Jv,Xv,Qv,zv,jv=Te(()=>{Jv=D(require("send")),Xv=require("fs"),Qv=new Map;a(K7,"start")});function z7(e,t=1,r){if(iR++,(0,Ki.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)});Q7.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=pf.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)r0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{oR?oR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),iR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function s0(e=0,t){if(typeof e=="string")try{(0,Tf.existsSync)(e)&&(0,Tf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=J7:r=X7(t):r=aR;let s=(0,ua.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=r0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),oR=!0,r(o,(c,u)=>{if(!c){if(Zv){let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});Zv.deliverSocket(l,e,u),l.resume()}else iR>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"),z7(0));br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});tee(l,c,e)}br(!0,"socket-routed")})};let n=Rc();t0.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 aR(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>=mf)return mf=i,t(r);s=i}mf=0,t(r)}function J7(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);aR(e,o=>{la.set(s,{worker:o,lastUsed:i}),t(o)})}function X7(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);aR(s,d=>{la.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function Z7(){mf=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 tee(e,t,r){let s=eee++;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 Ki,ua,Sf,t0,Tf,W7,aa,ca,r0,Zv,iR,Q7,oR,mf,e0,la,j7,pf,eee,n0=Te(()=>{Ki=D(Ze()),ua=require("net"),Sf=D(b()),t0=D(G()),Tf=require("fs");xn();({isMainThread:W7}=require("worker_threads")),aa=[],ca=[],r0=[],iR=0,Q7=[];W7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(z7,"startHTTPWorker");a(s0,"startSocketServer");mf=0;a(aR,"findMostIdleWorker");e0=36e5,la=new Map;a(J7,"findByRemoteAddressAffinity");a(X7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+e0<e&&la.delete(t)},e0).unref();j7=1e3;a(Z7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(Z7);pf=new Map,eee=1;a(tee,"proxySocket")});var c0=T((Qde,a0)=>{"use strict";var ree=require("cluster"),As=X();As.initSync();var o0=b(),Yde=require("util"),An=G(),cR=require("fs"),see=require("fastify"),Kde=Rc(),nee=require("@fastify/cors"),iee=require("@fastify/compress"),oee=require("@fastify/static"),aee=NT(),cee=require("path"),{PACKAGE_ROOT:uee}=b(),lee=on(),_ee=$(),dee=gr(),fee=rc(),{server:Eee}=(Pr(),Z(to)),{authHandler:hee,handlePostRequest:mee,serverErrorHandler:pee,reqBodyValidationHandler:See}=hf(),Wde=require("net"),{registerContentHandlers:Tee}=(Wo(),Z(aP)),Ree=6e4,gee=1024*1024*1024,Aee="TRUE",{CONFIG_PARAMS:On}=o0,Wi;a0.exports={hdbServer:i0,start:i0};async function i0(e){try{An.info("In Fastify server"+process.cwd()),An.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),An.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=ree.isMaster,await Oee();let t=As.get(On.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=Nee(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{Eee.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),An.error(r),An.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),An.fatal(t),process.exit(1)}}a(i0,"operationsServer");async function Oee(){An.trace("Configuring HarperDB process."),lee.setSchemaDataToGlobal(),await dee.setUsersToGlobal(),await fee.getLicense()}a(Oee,"setUp");function Nee(e){An.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=bee(e),r=see(t);r.server.headersTimeout=Iee(),r.setErrorHandler(pee);let s=yee();s&&r.register(nee,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(aee),r.register(iee),r.register(oee,{root:cee.join(uee,"studio")}),Tee(r);let n=As.get(o0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!_ee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[See,hee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),mee(i,o)}),r.get("/health",()=>"HarperDB is running."),An.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Nee,"buildServer");function bee(e){let t=As.get(On.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(On.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:gee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(On.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(On.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(On.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:cR.readFileSync(n),cert:cR.readFileSync(i)+(o?`
|
|
28
|
+
`+jT.readFileSync(o):"")},s.http2=!0}return s}a(v7,"getServerOptions");bv.exports=v7});var Cv=T((Mde,wv)=>{"use strict";var ZT=X();ZT.initSync();var{CONFIG_PARAMS:Iv}=b();function B7(){let e=ZT.get(Iv.HTTP_CORSACCESSLIST),t=ZT.get(Iv.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(B7,"getCORSOptions");wv.exports=B7});var Uv=T((vde,Dv)=>{"use strict";var Lv=X();Lv.initSync();var H7=b();function F7(){return Lv.get(H7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(F7,"getHeaderTimeoutConfig");Dv.exports=F7});var rR={};Qe(rR,{customFunctionsServer:()=>x7,handleFile:()=>G7,ready:()=>$7});async function G7(e,t,r,s){if(!An){let c=eR.get(tR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);An=Yv(c),lt.http((await An).server)}let n=await An,i=(0,Pv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Mv.has(i)){Mv.add(i);try{n.register(V7(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 x7(){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 k7();let e=eR.get(tR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=An=await Yv(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 k7(){try{De.info("Custom Functions starting configuration."),await Gv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function V7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,vv.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 Yv(e){De.info("Custom Functions starting buildServer.");let t=(0,xv.default)(e),r=(0,Bv.default)(t);r.server.headersTimeout=(0,Vv.default)(),r.setErrorHandler($v.serverErrorHandler);let s=(0,kv.default)();return s&&r.register(Hv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Fv.default),await r.register(q7),await r.after(),RT(r),De.info("Custom Functions completed buildServer."),r}function $7(){if(An)return An.then?An.then(e=>e.ready()):An.ready()}var Pv,vv,Bv,Hv,Fv,qv,eR,tR,De,q7,Gv,xv,kv,Vv,$v,An,Mv,Kv=Te(()=>{Pv=require("path"),vv=require("fs"),Bv=D(require("fastify")),Hv=D(require("@fastify/cors")),Fv=D(OT()),qv=D(require("@fastify/autoload")),eR=D(X()),tR=D(b()),De=D(F()),q7=D(Nv()),Gv=D(gr()),xv=D(yv()),kv=D(Cv()),Vv=D(Uv()),$v=D(mf());Qo();Pr();Mv=new Set;a(G7,"handleFile");a(x7,"customFunctionsServer");a(k7,"setUp");a(V7,"buildRouteFolder");a(Yv,"buildServer");a($7,"ready")});var sR={};Qe(sR,{start:()=>Y7});function Y7(e){return{handleFile(t,r,s){Qv||(Qv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Wv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,zv.default)(n,(0,Jv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Wv.set(r,s)}}}var zv,Jv,Wv,Qv,Xv=Te(()=>{zv=D(require("send")),Jv=require("fs"),Wv=new Map;a(Y7,"start")});function Q7(e,t=1,r){if(nR++,(0,Wi.startWorker)("server/threads/threadServer.js",{name:Tf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===Tf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});W7.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=Sf.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)t0[c.localPort](null,c)}}}),r){let s=setInterval(()=>{iR?iR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Wi.shutdownWorkers)(),nR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function r0(e=0,t){if(typeof e=="string")try{(0,Rf.existsSync)(e)&&(0,Rf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=z7:r=J7(t):r=oR;let s=(0,la.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=t0[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),iR=!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 nR>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"),Q7(0));br(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new la.Socket({handle:o,writable:!0,readable:!0});eee(l,c,e)}br(!0,"socket-routed")})};let n=gc();e0.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 oR(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>=pf)return pf=i,t(r);s=i}pf=0,t(r)}function z7(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);oR(e,o=>{_a.set(s,{worker:o,lastUsed:i}),t(o)})}function J7(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);oR(s,d=>{_a.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function j7(){pf=0;for(let e of ca)e.expectedIdle=e.recentELU.idle+X7,e.requests=1;ca.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function eee(e,t,r){let s=Z7++;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(),Sf.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")),Sf.delete(s)),n.event=="destroy"&&(e.destroy(),Sf.delete(s))})}var Wi,la,Tf,e0,Rf,K7,ca,ua,t0,jv,nR,W7,iR,pf,Zv,_a,X7,Sf,Z7,s0=Te(()=>{Wi=D(Ze()),la=require("net"),Tf=D(b()),e0=D(F()),Rf=require("fs");kn();({isMainThread:K7}=require("worker_threads")),ca=[],ua=[],t0=[],nR=0,W7=[];K7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Q7,"startHTTPWorker");a(r0,"startSocketServer");pf=0;a(oR,"findMostIdleWorker");Zv=36e5,_a=new Map;a(z7,"findByRemoteAddressAffinity");a(J7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of _a)r.lastUsed+Zv<e&&_a.delete(t)},Zv).unref();X7=1e3;a(j7,"updateWorkerIdleness");(0,Wi.setMonitorListener)(j7);Sf=new Map,Z7=1;a(eee,"proxySocket")});var a0=T((Wde,o0)=>{"use strict";var tee=require("cluster"),As=X();As.initSync();var i0=b(),$de=require("util"),On=F(),aR=require("fs"),ree=require("fastify"),Yde=gc(),see=require("@fastify/cors"),nee=require("@fastify/compress"),iee=require("@fastify/static"),oee=OT(),aee=require("path"),{PACKAGE_ROOT:cee}=b(),uee=on(),lee=$(),_ee=gr(),dee=sc(),{server:fee}=(Pr(),Z(ro)),{authHandler:Eee,handlePostRequest:hee,serverErrorHandler:mee,reqBodyValidationHandler:pee}=mf(),Kde=require("net"),{registerContentHandlers:See}=(Qo(),Z(oP)),Tee=6e4,Ree=1024*1024*1024,gee="TRUE",{CONFIG_PARAMS:Nn}=i0,Qi;o0.exports={hdbServer:n0,start:n0};async function n0(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=tee.isMaster,await Aee();let t=As.get(Nn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Qi=Oee(t),await Qi.ready(),e||(e={}),e.isOperationsServer=!0,Qi.server.cantCleanupProperly=!0;try{fee.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(n0,"operationsServer");async function Aee(){On.trace("Configuring HarperDB process."),uee.setSchemaDataToGlobal(),await _ee.setUsersToGlobal(),await dee.getLicense()}a(Aee,"setUp");function Oee(e){On.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Nee(e),r=ree(t);r.server.headersTimeout=yee(),r.setErrorHandler(mee);let s=bee();s&&r.register(see,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(oee),r.register(nee),r.register(iee,{root:aee.join(cee,"studio")}),See(r);let n=As.get(i0.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!lee.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[pee,Eee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),hee(i,o)}),r.get("/health",()=>"HarperDB is running."),On.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Oee,"buildServer");function Nee(e){let t=As.get(Nn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Nn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Ree,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:aR.readFileSync(n),cert:aR.readFileSync(i)+(o?`
|
|
29
29
|
|
|
30
|
-
`+cR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(bee,"getServerOptions");function yee(){let e=As.get(On.OPERATIONSAPI_NETWORK_CORS),t=As.get(On.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Aee)&&(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(yee,"getCORSOpts");function Iee(){return As.get(On.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Ree}a(Iee,"getHeaderTimeoutConfig")});var R0=T((Zde,T0)=>{"use strict";var{decode:wee}=require("msgpackr"),{isMainThread:Jde,parentPort:Cee,threadId:Xde}=require("worker_threads"),_0=st(),Nn=ke(),Lee=b(),Ou=G(),u0=X(),d0=b();Ze();var Dee=nn(),{recordAction:Uee,recordActionBinary:Mee}=(xn(),Z(N_)),{publishToStream:Pee}=_0,jde={durable:Nn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Nn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},vee,Bee,Hee,f0,E0;T0.exports={initialize:h0,workQueueListener:S0,setSubscription:qee,setIgnoreOrigin:Gee,getDatabaseSubscriptions:Fee};async function h0(){E0=!0,Ou.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await _0.getNATSReferences();vee=e,Bee=e.info.server_name,Hee=t,f0=r}a(h0,"initialize");var gf=new Map;function qee(e,t,r){let s=gf.get(e);s||gf.set(e,s=new Map),s.set(t,r),E0||h0().then(S0)}a(qee,"setSubscription");function Fee(){return gf}a(Fee,"getDatabaseSubscriptions");var m0;function Gee(e){m0=e}a(Gee,"setIgnoreOrigin");var p0=100,l0=new Array(p0),Rf=0;async function S0(){let t=await(await f0.consumers.get(Nn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Nn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();Cee?.on("message",async r=>{let{type:s}=r;s===d0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await l0[Rf],l0[Rf]=xee(r).catch(s=>{Ou.error(s)}),++Rf>=p0&&(Rf=0)}a(S0,"workQueueListener");async function xee(e){let t=wee(e.data);Uee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=u0.get(Lee.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Nn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Nn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Nn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!m0),Mee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Nn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Ou.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Ou.trace(`messageProcessor nats msg id: ${e.headers.get(Nn.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:uR(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:uR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:uR(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})}u0.get(d0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Pee(e.subject.split(".").slice(0,-1).join("."),Dee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ou.error(o)}e.ack()}a(xee,"messageProcessor");function uR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(uR,"convertOperation")});var If={};Qe(If,{disableNATS:()=>Vee,publishToStream:()=>yf,setNATSReplicator:()=>lR,setPublishToStream:()=>$ee,setSubscription:()=>ER,start:()=>kee});function kee(){Of.default.get(Nf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Kee()}function Vee(e=!0){b0=e}function $ee(e,t){yf=e,ER=t}function Kee(){if(b0||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];lR(n,r,i)}}mR((r,s)=>{lR(r.tableName,r.databaseName,r),s&&I0(r)}),!g0&&(g0=!0)}function lR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){I0(i)}static subscribe(){let i=new is;return ER(t,e,i),i}static subscribeOnThisThread(i){return i<Yee}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=y0;return i}a(s,"getNATSTransaction")}function I0(e){let t=Of.default.get(Nf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);yf(`${dR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,fR.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 A0,dR,fR,O0,N0,Of,Nf,bf,b0,yf,ER,Yee,y0,g0,Af,_R,hR=Te(()=>{fe();as();A0=D(st()),dR=D(ke()),fR=D(nn());va();O0=D(R0()),N0=D(mr()),Of=D(X()),Nf=D(b()),bf=D(G());a(kee,"start");a(Vee,"disableNATS");yf=A0.publishToStream,ER=O0.setSubscription;a($ee,"setPublishToStream");Yee=2;a(Kee,"assignReplicationSource");a(lR,"setNATSReplicator");a(I0,"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(`${dR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,fR.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)}},_R=class extends Af{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,N0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};y0=new _R});async function C0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await pR.getResource(e,{});n=new TR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await pR.get(e);i&&i.delete()}n=new Cf(e,t)}return n}function SR(){return wf++,wf>65500&&(wf=1),wf}var w0,_a,pR,wf,Cf,TR,L0=Te(()=>{fe();jc();w0=D(mr()),_a=D(G());di();pR=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(C0,"getSession");wf=1;a(SR,"getNextMessageId");Cf=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=Xn.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=SR());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=SR();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=Xn.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=[]}},TR=class extends Cf{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=SR(),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,w0.getNextMonotonicTime)()),(0,_a.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),pR.put(this.sessionRecord)),t.qos}}});var gR={};Qe(gR,{start:()=>Qee});async function Qee({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}=M0(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;Wee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,P0.getSuperUser)());let{onMessage:u,onClose:_}=M0(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 M0(e,t,r,s,n){U0||(U0=!0,Oc(d=>{Lf>0&&d.push({metric:"mqtt-connections",connections:Lf,byThread:!0})}));let i;Lf++;let o,c={protocolVersion:4},u=(0,Df.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Lf--,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 lt.getUser(d.username,d.password.toString()),(0,RR.get)(bn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&D0.notify({username:s.username,status:bn.AUTH_AUDIT_STATUS.SUCCESS,type:bn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,RR.get)(bn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&D0.error({username:s.username,status:bn.AUTH_AUDIT_STATUS.FAILURE,type:bn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=C0({user:s,...d}),o=await o}catch(N){return(0,Xr.error)(N),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,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,Df.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return jn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Df,P0,RR,bn,Xr,D0,Wee,U0,Lf,v0=Te(()=>{Df=require("mqtt-packet");L0();P0=D(gr());Wo();xn();Pr();RR=D(X()),bn=D(b()),Xr=D(G()),D0=(0,Xr.loggerWithTag)("auth-event"),Wee=!0;a(Qee,"start");Lf=0;a(M0,"onSocket")});var H0,B0,AR,q0=Te(()=>{H0=require("os"),B0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,H0.platform)()!="win32"&&(AR=require("node-unix-socket").createReuseportFd)});var Ld={};Qe(Ld,{component_errors:()=>da,loadComponent:()=>Uf,loadComponentDirectories:()=>W0,setErrorReporter:()=>jee});function W0(e,t){t&&(NR=t),e&&(bR=e);let r=[];if((0,Os.existsSync)(OR)){let n=(0,Os.readdirSync)(OR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(OR,o);r.push(Uf(c,NR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Uf(s,NR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{K0=!0})}function jee(e){yu=e}async function Uf(e,t,r,s,n,i){if(!G0.has(e)){G0.set(e,!0),n&&(bR=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,Y0.getConfigObj)():(0,x0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=yR;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,$0.getHdbBasePath)().length){N=null;break}if(N)f=await Uf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Xee[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(Nu.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!F0.includes(I)){let N=IR.get(wR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&bu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!AR)&&(F0.push(I),s0(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),bR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,V0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==yR[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,k0.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 Jee(Q);Nu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Nu.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}`,yu?.(x),((0,fa.getWorkerIndex)()===0?console:bu.default).error(x),t.set(d.path||"/",new Iu(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}`,yu?.(h),((0,fa.getWorkerIndex)()===0?console:bu.default).error(h),t.set(d.path||"/",new Iu(h),null,!0),da.set(s?l:(0,gt.basename)(e),h.message)}}if(Nu.isMainThread&&!K0&&i&&(0,fa.watchDir)(e,async()=>W0()),o.extensionModule)return await gl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;yu?.(new Error(l)),((0,fa.getWorkerIndex)()===0?console:bu.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}`,yu?.(o),t.set("",new Iu(o))}}}var Os,gt,Nu,x0,IR,wR,k0,fa,bu,V0,$0,zee,Y0,Jee,OR,bR,K0,NR,da,Xee,yR,F0,G0,yu,Iu,Dd=Te(()=>{Os=require("fs"),gt=require("path"),Nu=require("worker_threads"),x0=require("yaml"),IR=D(X()),wR=D(b());kA();KA();WA();lP();Wv();jv();k0=D(require("fast-glob")),fa=D(Ze()),bu=D(G());BE();Pr();V0=D(j());as();fe();n0();$0=D(X()),zee=D(c0());Ad();hR();v0();Y0=D(hr());q0();({readFile:Jee}=Os.promises),OR=IR.get(wR.CONFIG_PARAMS.COMPONENTSROOT),bR=new Map,da=new Map;a(W0,"loadComponentDirectories");Xee={REST:Yd,rest:Yd,graphqlSchema:vE,jsResource:qE,fastifyRoutes:sR,login:GE,static:nR,operationsApi:zee,customFunctions:{},http:{},clustering:If,authentication:Zc,mqtt:gR},yR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(yR,"static",{value:{files:"web/**"}});F0=[],G0=new Map;a(jee,"setErrorReporter");a(Uf,"loadComponent");Iu=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 J0=T((Lfe,z0)=>{var{isMainThread:Q0}=require("worker_threads"),{getTables:Zee}=(fe(),Z(Ce)),{loadComponentDirectories:ete,loadComponent:tte}=(Dd(),Z(Ld)),{resetResources:rte}=(jc(),Z(LU)),ste=jS(),nte=hr(),{dirname:ite}=require("path"),{getConnection:ote}=st(),ate=X(),cte=b(),CR=new Map;async function ute(e=!1){!Q0&&ate.get(cte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ote();try{Q0&&await ste()}catch(s){console.error(s)}let t=rte();Zee(),t.isWorker=e,await tte(ite(nte.getConfigFilePath()),t,"hdb",!0,CR),await ete(CR,t);let r=[];for(let[s]of CR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ute,"loadRootComponents");z0.exports.loadRootComponents=ute});var Ze=T((Ufe,ri)=>{"use strict";var{Worker:lte,MessageChannel:_te,parentPort:Ks,isMainThread:PR,threadId:dte,workerData:yn}=require("worker_threads"),{PACKAGE_ROOT:fte}=b(),{join:eB,isAbsolute:Ete,extname:hte}=require("path"),{server:tB}=(Pr(),Z(to)),{watch:mte,readdir:pte}=require("fs/promises"),{totalmem:X0}=require("os"),vf=b(),Ste=X(),In=G(),{randomBytes:Tte}=require("crypto"),{_assignPackageExport:Rte}=require("../../index"),gte=b(),j0=1024*1024,ti=[],jr=[],Ate=50,vR=1e4,Ote="restart",rB="request_thread_info",sB="resource_report",nB="thread_info",iB="added-port",Nte="ack",LR;Rte("threads",jr);ri.exports={startWorker:DR,restartWorkers:HR,shutdownWorkers:Cte,workers:ti,setMonitorListener:Hte,onMessageFromWorkers:Lte,onMessageByType:_B,broadcast:Ute,broadcastWithAcknowledgement:Pte,setChildListenerByType:wte,getWorkerIndex:oB,getWorkerCount:aB,getTicketKeys:cB,setMainIsWorker:yte,setTerminateTimeout:bte,restartNumber:yn?.restartNumber||1};jr.onMessageByType=_B;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 BR;function bte(e){vR=e}a(bte,"setTerminateTimeout");function oB(){return yn?yn.workerIndex:BR?0:void 0}a(oB,"getWorkerIndex");function aB(){return yn?yn.workerCount:BR?1:void 0}a(aB,"getWorkerCount");function yte(e){BR=e}a(yte,"setMainIsWorker");var Mf;function cB(){return Mf||(Mf=PR?Tte(48):yn.ticketKeys,Mf)}a(cB,"getTicketKeys");Object.defineProperty(tB,"workerIndex",{get(){return oB()}});Object.defineProperty(tB,"workerCount",{get(){return aB()}});var uB={[rB](e,t){vte(t)},[sB](e,t){Bte(t,e)}};function DR(e,t={}){let r=process.constrainedMemory?.()||X0();r=Math.min(r,X0(),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 _te;_.existingPort=u,i.push(_),o.push(_.port2)}hte(e)||(e+=".js");let c=new lte(Ete(e)?e:eB(fte,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:ri.exports.restartNumber,ticketKeys:cB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:iB,port:u,threadId:c.threadId},[u]);return Bf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>DR(e,t),c.on("error",u=>{console.error("Worker error:",u),In.error("Worker error:",u)}),c.on("exit",u=>{ti.splice(ti.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Ate?(t.unexpectedRestarts=c.unexpectedRestarts+1,DR(e,t)):In.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{uB[u.type]?.(u,c)}),ti.push(c),Fte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(DR,"startWorker");var Ite=[vf.THREAD_TYPES.HTTP];async function HR(e=null,t=2,r=!0){if(PR){if(r){let{loadRootComponents:o}=J0();await o()}ri.exports.restartNumber++,t<1&&(t=t*ti.length);let s=[],n=[];for(let o of ti.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;In.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ri.exports.restartNumber,type:vf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Ite.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),vR*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===gte.ITC_EVENT_TYPES.CHILD_STARTED&&(In.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");In.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)&&Ste.get(vf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:Ote,workerType:e})}a(HR,"restartWorkers");function wte(e,t){uB[e]=t}a(wte,"setChildListenerByType");function Cte(e){return HR(e,1/0,!1)}a(Cte,"shutdownWorkers");var lB=[];function Lte(e){lB.push(e)}a(Lte,"onMessageFromWorkers");var UR=new Map;function _B(e,t){let r=UR.get(e);r||UR.set(e,r=[]),r.push(t)}a(_B,"onMessageByType");var Dte=10;async function Ute(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Dte&&(t=0,await new Promise(setImmediate))}catch(s){In.error("Unable to send message to worker",s)}}a(Ute,"broadcast");var Pf=new Map,Mte=1;function Pte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Mte++,i=a(()=>{Pf.delete(n),--r===0&&t(),s!==Ks&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Pf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Pf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){In.error("Unable to send message to worker",n)}r===0&&t()})}a(Pte,"broadcastWithAcknowledgement");function vte(e){e.postMessage({type:nB,workers:dB()})}a(vte,"sendThreadInfo");function dB(){let e=Date.now();return ti.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(dB,"getChildWorkerInfo");function Bte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Bte,"recordResourceReport");var MR;function Hte(e){MR=e}a(Hte,"setMonitorListener");var qte=1e3,Z0=!1;function Fte(){Z0||(Z0=!0,setInterval(()=>{for(let e of ti){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}MR&&MR()},qte).unref())}a(Fte,"startMonitoring");var Gte=1e3;if(Ks){Bf(Ks);for(let e=0,t=yn.addPorts.length;e<t;e++){let r=yn.addPorts[e];r.threadId=yn.addThreadIds[e],Bf(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:sB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gte).unref(),LR=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:rB});function r(s){s.type===nB&&(Ks.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else LR=dB;ri.exports.getThreadInfo=LR;function Bf(e,t){jr.push(e),e.on("message",r=>{if(r.type===iB)r.port.threadId=r.threadId,Bf(r.port);else if(r.type===Nte){let s=Pf.get(r.id);s&&s()}else{for(let n of lB)n(r,e);let s=UR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){In.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(Bf,"addPort");if(PR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await pte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(eB(s,i.name));try{for await(let{filename:i}of mte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await HR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ri.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ks.on("message",async e=>{let{type:t}=e;t===vf.ITC_EVENT_TYPES.SHUTDOWN&&(ri.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{In.warn("Thread did not voluntarily terminate",dte),process.exit(0)},vR).unref())})});function EB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ea||((0,Cu.onMessageByType)(fB,d=>{hB(d.path)}),(0,Cu.onMessageByType)(xte,d=>{(0,wu.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 FR(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 hB(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:qR,exclusiveStart:!0})){qR=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,wu.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,wu.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"},qR,!0)}function mB(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,Cu.broadcast)({type:fB,path:n}),hB(n,!0)})}}var wu,Cu,fB,xte,Ea,qfe,FR,qR,pB=Te(()=>{wu=D(G()),Cu=D(Ze());va();jc();oo();fB="transaction",xte="transaction-await",qfe=Buffer.alloc(4096);a(EB,"addSubscription");FR=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"}}},qR=Date.now();a(hB,"notifyFromTransactionData");a(mB,"listenToCommits")});var FT={};Qe(FT,{coerceType:()=>xf,makeTable:()=>$f,setServerUtilities:()=>Jte,updateResource:()=>Mu});function $f(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=[]),mB(i,u);let S=ch(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,xu,WB=10,QB=6;E&&tg();class ct 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]:ct;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,Lu);switch(M.type){case"put":return k._writeUpdate(z,Lu);case"delete":return k._writeDelete(Lu);case"publish":return k._writePublish(z,Lu);case"invalidate":return k.invalidate(Lu);default:Ke.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ie;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ke.error("Bad subscription event",k);continue}if(k.source=m,ie)if(k.beginTxn)ie.resolve();else{U(k,ie);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let Pt of k.writes)try{ne.push(U(Pt,k))}catch(kt){throw kt.message+=" writing "+JSON.stringify(Pt)+" of event "+JSON.stringify(k),kt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),Pt;for(let kt of k.attributes)ne.find(ii=>ii.name===kt.name)||(ne.push(kt),Pt=!0);Pt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),vu.signalSchemaChange(new Bu.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,vu.signalUserChange(new Bu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){Sa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=wn(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return ZR(m,g,{transaction:U},L,M=>{if(M?Mu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Qs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=eE(m,M,g,R);if(V)return y?.disregardReadTxn(),R[xR]=!0,VR(V,z=>(Mu(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=eE(this[we],this[Ws],this[me]);if(m)return this[xR]=!0,VR(m,g=>{this[Ws]=g,this[Re]=g.value,this[Gf]=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,tE()}static enableAuditing(m=!0){E=m,m&&tg(),ct.audit=m}static coerceId(m){return m===""?null:xf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(ct.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ct.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));vu.signalSchemaChange(new Bu.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=Vu(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=kR(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=Vu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=kR(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=Vu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=kR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return Vu(m)?.delete}update(m,g){if(!wn(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[vt]=m}else R=this[vt],R&&(m=Object.assign(R,m)),this[vt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),wn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ws],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[Ws],L,Hf,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,qf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{ku(m,g,null)}),E)S(m,null,L,C,qf,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,NB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=wn(C),L=this[we];Sa(L);let y=this[Ws];this[GR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[TB]||_l(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),Mu(this,V));let ie=V?.value;this[GR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(ku(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 ct.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=wn(this[me]),C=this[we];Sa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),Mu(this,y)),!(y?.version>L)&&(ku(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ws],L,0,E,this[me],0,"delete"),E||tE()):i.remove(this[we]))}}),!0}search(m){let g=wn(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Qs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>xf(Ne,Ee)):xf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,OB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===Uu.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===Uu.SEARCH_TYPES.CONTAINS||Ee===Uu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Uu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=$te:k.estimated_count=Vte}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=CE(M,y,C,ct,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(LE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=CE(ne,y,C,ct,m.allowFullScan);k=k.concat(Pt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=ie(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function ie(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},Pt=m.ensureLoaded!==!1;function kt(ii,He){if(Pt&&He!==void 0){let lr=!z.onlyIfCached&&eE(He,ii,z,this);if(lr)return lr.then(XB=>kt(XB))}let bs=ii?.value;if(!bs)return Ff.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Ff.SKIP;return bs}return a(kt,"processEntry"),k.map(ii=>ZR(ii,z,ne,!1,kt))}return a(ie,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=EB(ct,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 Qs.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||AB(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||AB(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,kf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ws]?.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[Gf],timestamp:this[Ws]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[GR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=wn(this[me]),R=this[we]||null;Sa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ws],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&&tE(),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 Qs.ClientError(g.join(". "))}getUpdatedTime(){return this[Gf]}wasLoadedFromSource(){return N?!!this[xR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Qs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Qs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),ct.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),ct.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(){fl(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Du(),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 Du();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 Du();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()}}ct.updatedAttributes();let zB=ct.prototype;return zB[TB]=!0,d&&ct.setTTLExpiration(d/1e3),B&&JB(),ct;function ku(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,Pu.getIndexedValues)(M);if(V){SB&&L.prefetch(V.map(z=>({key:z,value:W})),gB);for(let z=0,ie=V.length;z<ie;z++)L.remove(V[z],W)}if(V=(0,Pu.getIndexedValues)(U),V){SB&&L.prefetch(V.map(z=>({key:z,value:W})),gB);for(let z=0,ie=V.length;z<ie;z++)L.put(V[z],W)}}return C}a(ku,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>RB)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,kf.writeKey)(W,Qte,0)>RB)throw new Error("Primary key size is too large: "+W.length);return!0}a(Sa,"checkValidId");function ZR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>QB&&(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<WB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(ZR,"loadLocalRecord");function Vu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return zte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(Vu,"getTablePermissions");function eE(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Hf|qf)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=eg(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 Qs.ServerError("Entry is not cached",504);return}else return L}}}a(eE,"ensureLoadedFromSource");function wn(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new _i,m.lmdbDb=i,m;m=g}while(!0)}else return new ml}a(wn,"txnForContext");async function eg(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&(Hf|qf)?L(eg(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Wte)});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;VR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Pt,kt;try{for(let lr of ct.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;kt=C&Hf;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,Pu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(br(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}wn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=ku(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Pt||null,M,0,"delete",!!kt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(eg,"getFromSource");function tE(){if(es!==jR&&(jR=es,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(xu&&clearTimeout(xu),!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`),xu=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(xu);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+Kte<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(ct.evict(L,y,U),R++),await Du();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(tE,"scheduleCleanup");function tg(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(tg,"addDeleteRemoval");function JB(){(0,Qi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&ct.evict(g,C.value,C.version),await Du()}}catch(W){Ke.error("Error in evicting old records",W)}},Yte).unref()}a(JB,"runRecordExpirationEviction")}function kR(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 gB(){}function Jte(e){NB=e}function xf(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"&&!Xte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Vf.autoCast)(e)}function AB(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 VR(e,t,r){return e?.then?e.then(t,r):t(e)}function Mu(e,t){e[Ws]=t,e[Re]=t?.value??null,e[Gf]=t?.version}var Ns,Ff,Pu,OB,Uu,Hu,Qs,vu,Bu,Ke,kf,Qi,Vf,kte,NB,Vte,$te,Yte,Kte,SB,Wte,Gf,TB,Ws,GR,xR,Lu,Hf,qf,Qte,RB,zte,tEe,Xte,Du,nf=Te(()=>{Ns=D(b()),Ff=require("lmdb"),Pu=D(mr()),OB=require("lodash");as();IE();Uu=D(ze()),Hu=D(X());pB();Qs=D(j()),vu=D(an()),Bu=D(ds());fe();Sl();Ke=D(G());hl();di();kf=require("ordered-binary"),Qi=D(Ze());oo();Vf=D($());xa();xn();kte=new Uint8Array(9);kte[8]=192;Vte=1e8,$te=1e7,Yte=6e4,Kte=864e5;Hu.initSync();SB=Hu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Wte=1e4,Gf=Symbol.for("version"),TB=Symbol.for("incremental-update"),Ws=Symbol("entry"),GR=Symbol("is-saving"),xR=Symbol("loaded-from-source"),Lu={isNotification:!0,ensureLoaded:!1},Hf=1,qf=8,Qte=Buffer.allocUnsafeSlow(8192),RB=1978,zte={read:!0,insert:!0,update:!0,delete:!0},tEe=(0,Vf.convertToMS)(Hu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a($f,"makeTable");a(kR,"attributesAsObject");a(gB,"noop");a(Jte,"setServerUtilities");Xte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(xf,"coerceType");a(AB,"isDescendantId");Du=a(()=>new Promise(setImmediate),"rest");a(VR,"when");a(Mu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>Xm,dropTableMeta:()=>sre,getDatabases:()=>hs,getTables:()=>jte,onUpdatedTable:()=>mR,readMetaDb:()=>qu,resetDatabases:()=>Zte,table:()=>et,tables:()=>pr});function jte(){return zf||hs(),pr||{}}function hs(){if(zf)return xe;zf=!0,pa=new Map;let e=(0,xt.getHdbBasePath)()&&(0,qe.join)((0,xt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),t=(0,xt.get)(Dr.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)(Dr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Lr.existsSync)(e)?e:(0,qe.join)((0,xt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Lr.existsSync)(e))for(let r of(0,Lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qu((0,qe.join)(e,r.name),null,s)}if((0,Lr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Lr.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,Lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);qu((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,Lr.existsSync)(n))for(let o of(0,Lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,qe.extname)(o.name).toLowerCase()===".mdb"&&qu((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,Lr.existsSync)(u)&&qu(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[Jf]}}return pa=null,xe}}function Zte(){zf=!1;for(let[,e]of si)e.needsDeletion=!0;hs();for(let[e,t]of si)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),si.delete(e));return xe}function qu(e,t,r=KR,s,n){let i=new $R.default(e,!1);try{let o=si.get(e);o?o.needsDeletion=!1:(o=(0,Kf.open)(i),si.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Yf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Lr.existsSync)(s)&&(i.path=s,_=(0,Kf.open)(i),_.isLegacy=!0):_=Nl(o));let l=wB(r),d=l[Jf],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)(Dr.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 zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Cl(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=CB(l,E,$f({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 WR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function wB(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[Jf]=r,pa.set(e,r)}return t}function CB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=KR),hs();let r=wB(e),s=(0,qe.join)((0,xt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),n=(0,xt.get)(Dr.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)(Dr.CONFIG_PARAMS.STORAGE_PATH)||((0,Lr.existsSync)(s)?s:(0,qe.join)((0,xt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=si.get(o);if(!c){let u=new $R.default(o,!1);c=(0,Kf.open)(u),si.set(o,c)}return c}async function Xm(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;si.delete(n.path),n.status==="open"&&(await n.close(),await bB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[Jf]}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=KR);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 zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Nl(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)(Dr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=Cl(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Yf.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=CB(d,e,$f({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(Yf.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 zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fu.workerData?.restartNumber)&&(I=!0,F(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Fu.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=rre(f,Q,Y):I&&Wf.signalSchemaChange(new Qf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of WR)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 rre(e,t,r){try{let s=e.schemaVersion;await Wf.signalSchemaChange(new Qf.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,yB.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)}),Fu.workerData&&Fu.workerData.restartNumber!==IB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>ere?await n:u>tre&&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 Wf.signalSchemaChange(new Qf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function sre({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 mR(e){WR.push(e)}var xt,Yf,Kf,qe,Lr,ma,zi,$R,Dr,bB,YR,yB,Wf,Qf,Fu,Zr,IB,KR,Jf,pr,xe,ha,WR,zf,si,pa,ere,tre,fe=Te(()=>{xt=D(X()),Yf=D(ze()),Kf=require("lmdb"),qe=require("path"),Lr=require("fs"),ma=D(ve());nf();zi=D(Ll()),$R=D(Ul()),Dr=D(b()),bB=D(require("fs-extra")),YR=require("../../index"),yB=D(mr()),Wf=D(an()),Qf=D(ds()),Fu=require("worker_threads"),Zr=D(G()),IB=D(Ze());oo();xa();KR="data",Jf=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,YR._assignPackageExport)("databases",xe);(0,YR._assignPackageExport)("tables",pr);ha=Symbol.for("next-table-id"),WR=[],si=new Map;a(jte,"getTables");a(hs,"getDatabases");a(Zte,"resetDatabases");a(qu,"readMetaDb");a(wB,"ensureDB");a(CB,"setTable");a(mc,"database");a(Xm,"dropDatabase");a(et,"table");ere=1e3,tre=10;a(rre,"runIndexing");a(sre,"dropTableMeta");a(mR,"onUpdatedTable")});var $=T((lEe,VB)=>{"use strict";var ni=require("path"),PB=require("fs-extra"),ur=G(),LB=require("fs-extra"),Xf=require("os"),nre=require("net"),ire=require("recursive-iterator"),We=b(),ore=Pg(),DB=require("papaparse"),jf=require("moment"),{inspect:are}=require("util"),UB=require("is-number"),uEe=require("lodash"),cre=require("minimist"),ure=require("https"),lre=require("http"),{hdb_errors:Zf}=j(),_re=/^((\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)))$/,vB=require("util").promisify(setTimeout),dre=100,fre=5,Ere="",hre=4,MB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};VB.exports={isEmpty:Ur,isEmptyOrZeroLength:zs,arrayHasEmptyValues:Sre,arrayHasEmptyOrZeroLengthValues:Tre,buildFolderPath:Rre,isBoolean:BB,errorizeMessage:mre,stripFileExtension:Are,autoCast:Ore,autoCastJSON:HB,autoCastJSONDeep:zR,removeDir:Nre,compareVersions:bre,isCompatibleDataVersion:yre,escapeRawValue:Ire,unescapeValue:wre,stringifyProps:Cre,timeoutPromise:Dre,isClusterOperation:Mre,getClusterUser:vre,checkGlobalSchemaTable:Pre,getHomeDir:FB,getPropsFilePath:Lre,promisifyPapaParse:Bre,removeBOM:GB,createEventPromise:Hre,checkProcessRunning:qre,checkSchemaTableExist:Fre,checkSchemaExists:xB,checkTableExists:kB,getStartOfTomorrowInSeconds:Gre,getLimitKey:xre,isObject:gre,isNotEmptyAndHasValue:pre,autoCasterIsNumberCheck:qB,backtickASTSchemaItems:kre,isPortTaken:Ure,createForkArgs:Vre,autoCastBoolean:$re,async_set_timeout:vB,getTableHashAttribute:Yre,doesSchemaExist:Kre,doesTableExist:Wre,stringifyObj:Qre,ms_to_time:zre,changeExtension:Jre,getEnvCliRootPath:JR,noBootFile:Xre,httpRequest:jre,transformReq:Zre,convertToMS:ese,PACKAGE_ROOT:We.PACKAGE_ROOT};function mre(e){return e instanceof Error?e:new Error(e)}a(mre,"errorizeMessage");function Ur(e){return e==null}a(Ur,"isEmpty");function pre(e){return!Ur(e)&&(e||e===0||e===""||BB(e))}a(pre,"isNotEmptyAndHasValue");function zs(e){return Ur(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function Sre(e){if(Ur(e))return!0;for(let t=0;t<e.length;t++)if(Ur(e[t]))return!0;return!1}a(Sre,"arrayHasEmptyValues");function Tre(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(Tre,"arrayHasEmptyOrZeroLengthValues");function Rre(...e){try{return e.join(ni.sep)}catch{console.error(e)}}a(Rre,"buildFolderPath");function BB(e){return Ur(e)?!1:e===!0||e===!1}a(BB,"isBoolean");function gre(e){return Ur(e)?!1:typeof e=="object"}a(gre,"isObject");function Are(e){return zs(e)?Ere:e.slice(0,-hre)}a(Are,"stripFileExtension");function Ore(e){return Ur(e)||e===""||typeof e!="string"?e:MB[e]!==void 0?MB[e]:qB(e)===!0?Number(e):_re.test(e)?new Date(e):e}a(Ore,"autoCast");function HB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(HB,"autoCastJSON");function zR(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=zR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=zR(r);s!==r&&(e[t]=s)}return e}else return HB(e)}a(zR,"autoCastJSONDeep");function qB(e){if(e.startsWith("0.")&&UB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&UB(e))}a(qB,"autoCasterIsNumberCheck");async function Nre(e){if(zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await LB.emptyDir(e),await LB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(Nre,"removeDir");function bre(e,t){if(zs(e)){ur.info("Invalid current version sent as parameter.");return}if(zs(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(bre,"compareVersions");function yre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(yre,"isCompatibleDataVersion");function Ire(e){if(Ur(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(Ire,"escapeRawValue");function wre(e){if(Ur(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(wre,"unescapeValue");function Cre(e,t){if(Ur(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+Xf.EOL}!zs(s)&&s[0]===";"?r+=" "+s+n+Xf.EOL:zs(s)||(r+=s+"="+n+Xf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Cre,"stringifyProps");function FB(){let e;try{e=Xf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(FB,"getHomeDir");function Lre(){let e=ni.join(FB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return PB.existsSync(e)||(e=ni.join(__dirname,"../","hdb_boot_properties.file")),e}a(Lre,"getPropsFilePath");function Dre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Dre,"timeoutPromise");async function Ure(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=nre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Ure,"isPortTaken");function Mre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Mre,"isClusterOperation");function Pre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Zf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Zf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Pre,"checkGlobalSchemaTable");function vre(e,t){if(Ur(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ur(e)||zs(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(vre,"getClusterUser");function Bre(){DB.parsePromise=function(e,t,r){return new Promise(function(s,n){DB.parse(e,{header:!0,transformHeader:GB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Bre,"promisifyPapaParse");function GB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(GB,"removeBOM");function Hre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${are(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(Hre,"createEventPromise");async function qre(e){let t=!0,r=0;do await vB(dre*r++),(await ore.findPs(e)).length>0&&(t=!1);while(t&&r<fre);if(t)throw new Error(`process ${e} was not started`)}a(qre,"checkProcessRunning");function Fre(e,t){let r=xB(e);if(r)return r;let s=kB(e,t);if(s)return s}a(Fre,"checkSchemaTableExist");function xB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Zf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(xB,"checkSchemaExists");function kB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Zf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(kB,"checkTableExists");function Gre(){let e=jf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=jf().utc().unix();return e-t}a(Gre,"getStartOfTomorrowInSeconds");function xre(){return jf().utc().format("DD-MM-YYYY")}a(xre,"getLimitKey");function kre(e){try{let t=new ire(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(kre,"backtickASTSchemaItems");function Vre(e){return[e]}a(Vre,"createForkArgs");function $re(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($re,"autoCastBoolean");function Yre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Yre,"getTableHashAttribute");function Kre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Kre,"doesSchemaExist");function Wre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Wre,"doesTableExist");function Qre(e){try{return JSON.stringify(e)}catch{return e}}a(Qre,"stringifyObj");function zre(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(zre,"ms_to_time");function Jre(e,t){let r=ni.basename(e,ni.extname(e));return ni.join(ni.dirname(e),r+t)}a(Jre,"changeExtension");function JR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=cre(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(JR,"getEnvCliRootPath");var QR;function Xre(){if(QR)return QR;let e=JR();JR()&&PB.pathExistsSync(ni.join(e,We.HDB_CONFIG_FILE))&&(QR=!0)}a(Xre,"noBootFile");function jre(e,t){let r;return e.protocol==="http:"?r=lre:r=ure,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 Zre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Zre,"transformReq");function ese(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(ese,"convertToMS")});var XR=b(),$B=$(),Gu=G(),tse=on(),rse=gr(),sse=JT(),{start:nse}=(hR(),Z(If)),{closeConnection:ise}=st(),YB=require("moment"),KB=af(),{cloneDeep:ose}=require("lodash"),ase=process.env[XR.PROCESS_NAME_ENV_PROP],Ji=ase.substring(4);a(async function(){let t={id:Ji,request:void 0},r=0;try{Gu.notify("Starting job:",Ji),nse(),tse.setSchemaDataToGlobal(),await rse.setUsersToGlobal();let s=await KB.getJobById(Ji);if($B.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Ji}`);let{request:n}=s[0];if($B.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=ose(n);let i=sse.getOperationFunction(n);Gu.trace("Running operation:",n.operation,"for job",Ji);let o=await i.job_operation_function(n);Gu.trace("Result from job:",Ji,o),t.status=XR.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=YB().valueOf(),Gu.notify("Successfully completed job:",Ji)}catch(s){r=1,Gu.error(s),t.status=XR.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=YB().valueOf()}finally{await KB.updateJob(t),await ise(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
|
|
30
|
+
`+aR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Nee,"getServerOptions");function bee(){let e=As.get(Nn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Nn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===gee)&&(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(bee,"getCORSOpts");function yee(){return As.get(Nn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Tee}a(yee,"getHeaderTimeoutConfig")});var T0=T((jde,S0)=>{"use strict";var{decode:Iee}=require("msgpackr"),{isMainThread:zde,parentPort:wee,threadId:Jde}=require("worker_threads"),l0=st(),bn=ke(),Cee=b(),Nu=F(),c0=X(),_0=b();Ze();var Lee=nn(),{recordAction:Dee,recordActionBinary:Uee}=(kn(),Z(b_)),{publishToStream:Mee}=l0,Xde={durable:bn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:bn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Pee,vee,Bee,d0,f0;S0.exports={initialize:E0,workQueueListener:p0,setSubscription:Hee,setIgnoreOrigin:qee,getDatabaseSubscriptions:Fee};async function E0(){f0=!0,Nu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await l0.getNATSReferences();Pee=e,vee=e.info.server_name,Bee=t,d0=r}a(E0,"initialize");var Af=new Map;function Hee(e,t,r){let s=Af.get(e);s||Af.set(e,s=new Map),s.set(t,r),f0||E0().then(p0)}a(Hee,"setSubscription");function Fee(){return Af}a(Fee,"getDatabaseSubscriptions");var h0;function qee(e){h0=e}a(qee,"setIgnoreOrigin");var m0=100,u0=new Array(m0),gf=0;async function p0(){let t=await(await d0.consumers.get(bn.WORK_QUEUE_CONSUMER_NAMES.stream_name,bn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();wee?.on("message",async r=>{let{type:s}=r;s===_0.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await u0[gf],u0[gf]=Gee(r).catch(s=>{Nu.error(s)}),++gf>=m0&&(gf=0)}a(p0,"workQueueListener");async function Gee(e){let t=Iee(e.data);Dee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=c0.get(Cee.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&&!h0),Uee(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;Nu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Nu.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=Af.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:cR(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:cR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:cR(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})}c0.get(_0.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Mee(e.subject.split(".").slice(0,-1).join("."),Lee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Nu.error(o)}e.ack()}a(Gee,"messageProcessor");function cR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(cR,"convertOperation")});var wf={};Qe(wf,{disableNATS:()=>kee,publishToStream:()=>If,setNATSReplicator:()=>uR,setPublishToStream:()=>Vee,setSubscription:()=>fR,start:()=>xee});function xee(){Nf.default.get(bf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Yee()}function kee(e=!0){N0=e}function Vee(e,t){If=e,fR=t}function Yee(){if(N0||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];uR(n,r,i)}}hR((r,s)=>{uR(r.tableName,r.databaseName,r),s&&y0(r)}),!R0&&(R0=!0)}function uR(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){y0(i)}static subscribe(){let i=new is;return fR(t,e,i),i}static subscribeOnThisThread(i){return i<$ee}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 Of(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=b0;return i}a(s,"getNATSTransaction")}function y0(e){let t=Nf.default.get(bf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);If(`${_R.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dR.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 g0,_R,dR,A0,O0,Nf,bf,yf,N0,If,fR,$ee,b0,R0,Of,lR,ER=Te(()=>{fe();as();g0=D(st()),_R=D(ke()),dR=D(nn());Ba();A0=D(T0()),O0=D(mr()),Nf=D(X()),bf=D(b()),yf=D(F());a(xee,"start");a(kee,"disableNATS");If=g0.publishToStream,fR=A0.setSubscription;a(Vee,"setPublishToStream");$ee=2;a(Yee,"assignReplicationSource");a(uR,"setNATSReplicator");a(y0,"publishSchema");Of=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=Nf.default.get(bf.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||(yf.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(If(`${_R.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,dR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw yf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},lR=class extends Of{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,O0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};b0=new lR});async function w0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await mR.getResource(e,{});n=new SR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await mR.get(e);i&&i.delete()}n=new Lf(e,t)}return n}function pR(){return Cf++,Cf>65500&&(Cf=1),Cf}var I0,da,mR,Cf,Lf,SR,C0=Te(()=>{fe();Zc();I0=D(mr()),da=D(F());fi();mR=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");Cf=1;a(pR,"getNextMessageId");Lf=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=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=pR());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=pR();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=[]}},SR=class extends Lf{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=pR(),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,I0.getNextMonotonicTime)()),(0,da.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),mR.put(this.sessionRecord)),t.qos}}});var RR={};Qe(RR,{start:()=>Wee});async function Wee({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;Kee&&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,Nc(d=>{Df>0&&d.push({metric:"mqtt-connections",connections:Df,byThread:!0})}));let i;Df++;let o,c={protocolVersion:4},u=(0,Uf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Df--,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 lt.getUser(d.username,d.password.toString()),(0,TR.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,TR.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,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,Uf.generate)(h,c);t(S),br(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 Uf,M0,TR,yn,Xr,L0,Kee,D0,Df,P0=Te(()=>{Uf=require("mqtt-packet");C0();M0=D(gr());Qo();kn();Pr();TR=D(X()),yn=D(b()),Xr=D(F()),L0=(0,Xr.loggerWithTag)("auth-event"),Kee=!0;a(Wee,"start");Df=0;a(U0,"onSocket")});var B0,v0,gR,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"&&(gR=require("node-unix-socket").createReuseportFd)});var Dd={};Qe(Dd,{component_errors:()=>fa,loadComponent:()=>Mf,loadComponentDirectories:()=>K0,setErrorReporter:()=>Xee});function K0(e,t){t&&(OR=t),e&&(NR=e);let r=[];if((0,Os.existsSync)(AR)){let n=(0,Os.readdirSync)(AR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(AR,o);r.push(Mf(c,OR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Mf(s,OR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{Y0=!0})}function Xee(e){Iu=e}async function Mf(e,t,r,s,n,i){if(!q0.has(e)){q0.set(e,!0),n&&(NR=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,$0.getConfigObj)():(0,G0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=bR;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,V0.getHdbBasePath)().length){N=null;break}if(N)f=await Mf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Jee[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(bu.isMainThread&&(f=await f.startOnMainThread?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!F0.includes(I)){let N=yR.get(IR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&yu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!gR)&&(F0.push(I),r0(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:lt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),NR.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!==bR[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: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 zee(Q);bu.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else bu.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}`,Iu?.(x),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(x),t.set(d.path||"/",new wu(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}`,Iu?.(h),((0,Ea.getWorkerIndex)()===0?console:yu.default).error(h),t.set(d.path||"/",new wu(h),null,!0),fa.set(s?l:(0,gt.basename)(e),h.message)}}if(bu.isMainThread&&!Y0&&i&&(0,Ea.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?`;Iu?.(new Error(l)),((0,Ea.getWorkerIndex)()===0?console:yu.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}`,Iu?.(o),t.set("",new wu(o))}}}var Os,gt,bu,G0,yR,IR,x0,Ea,yu,k0,V0,Qee,$0,zee,AR,NR,Y0,OR,fa,Jee,bR,F0,q0,Iu,wu,Ud=Te(()=>{Os=require("fs"),gt=require("path"),bu=require("worker_threads"),G0=require("yaml"),yR=D(X()),IR=D(b());xA();YA();KA();uP();Kv();Xv();x0=D(require("fast-glob")),Ea=D(Ze()),yu=D(F());HE();Pr();k0=D(j());as();fe();s0();V0=D(X()),Qee=D(a0());Od();ER();P0();$0=D(hr());H0();({readFile:zee}=Os.promises),AR=yR.get(IR.CONFIG_PARAMS.COMPONENTSROOT),NR=new Map,fa=new Map;a(K0,"loadComponentDirectories");Jee={REST:Kd,rest:Kd,graphqlSchema:BE,jsResource:qE,fastifyRoutes:rR,login:xE,static:sR,operationsApi:Qee,customFunctions:{},http:{},clustering:wf,authentication:eu,mqtt:RR},bR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(bR,"static",{value:{files:"web/**"}});F0=[],q0=new Map;a(Xee,"setErrorReporter");a(Mf,"loadComponent");wu=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((Cfe,Q0)=>{var{isMainThread:W0}=require("worker_threads"),{getTables:jee}=(fe(),Z(Ce)),{loadComponentDirectories:Zee,loadComponent:ete}=(Ud(),Z(Dd)),{resetResources:tte}=(Zc(),Z(CU)),rte=XS(),ste=hr(),{dirname:nte}=require("path"),{getConnection:ite}=st(),ote=X(),ate=b(),wR=new Map;async function cte(e=!1){!W0&&ote.get(ate.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ite();try{W0&&await rte()}catch(s){console.error(s)}let t=tte();jee(),t.isWorker=e,await ete(nte(ste.getConfigFilePath()),t,"hdb",!0,wR),await Zee(wR,t);let r=[];for(let[s]of wR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(cte,"loadRootComponents");Q0.exports.loadRootComponents=cte});var Ze=T((Dfe,si)=>{"use strict";var{Worker:ute,MessageChannel:lte,parentPort:Ks,isMainThread:MR,threadId:_te,workerData:In}=require("worker_threads"),{PACKAGE_ROOT:dte}=b(),{join:Z0,isAbsolute:fte,extname:Ete}=require("path"),{server:eB}=(Pr(),Z(ro)),{watch:hte,readdir:mte}=require("fs/promises"),{totalmem:J0}=require("os"),Bf=b(),pte=X(),wn=F(),{randomBytes:Ste}=require("crypto"),{_assignPackageExport:Tte}=require("../../index"),Rte=b(),X0=1024*1024,ri=[],jr=[],gte=50,PR=1e4,Ate="restart",tB="request_thread_info",rB="resource_report",sB="thread_info",nB="added-port",Ote="ack",CR;Tte("threads",jr);si.exports={startWorker:LR,restartWorkers:BR,shutdownWorkers:wte,workers:ri,setMonitorListener:Bte,onMessageFromWorkers:Cte,onMessageByType:lB,broadcast:Dte,broadcastWithAcknowledgement:Mte,setChildListenerByType:Ite,getWorkerIndex:iB,getWorkerCount:oB,getTicketKeys:aB,setMainIsWorker:bte,setTerminateTimeout:Nte,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 vR;function Nte(e){PR=e}a(Nte,"setTerminateTimeout");function iB(){return In?In.workerIndex:vR?0:void 0}a(iB,"getWorkerIndex");function oB(){return In?In.workerCount:vR?1:void 0}a(oB,"getWorkerCount");function bte(e){vR=e}a(bte,"setMainIsWorker");var Pf;function aB(){return Pf||(Pf=MR?Ste(48):In.ticketKeys,Pf)}a(aB,"getTicketKeys");Object.defineProperty(eB,"workerIndex",{get(){return iB()}});Object.defineProperty(eB,"workerCount",{get(){return oB()}});var cB={[tB](e,t){Pte(t)},[rB](e,t){vte(t,e)}};function LR(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 lte;_.existingPort=u,i.push(_),o.push(_.port2)}Ete(e)||(e+=".js");let c=new ute(fte(e)?e:Z0(dte,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 Hf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>LR(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<gte?(t.unexpectedRestarts=c.unexpectedRestarts+1,LR(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),Fte(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(LR,"startWorker");var yte=[Bf.THREAD_TYPES.HTTP];async function BR(e=null,t=2,r=!0){if(MR){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:Bf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=yte.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),PR*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===Rte.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}=Sd();r&&(e==="http"||!e)&&pte.get(Bf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ks.postMessage({type:Ate,workerType:e})}a(BR,"restartWorkers");function Ite(e,t){cB[e]=t}a(Ite,"setChildListenerByType");function wte(e){return BR(e,1/0,!1)}a(wte,"shutdownWorkers");var uB=[];function Cte(e){uB.push(e)}a(Cte,"onMessageFromWorkers");var DR=new Map;function lB(e,t){let r=DR.get(e);r||DR.set(e,r=[]),r.push(t)}a(lB,"onMessageByType");var Lte=10;async function Dte(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Lte&&(t=0,await new Promise(setImmediate))}catch(s){wn.error("Unable to send message to worker",s)}}a(Dte,"broadcast");var vf=new Map,Ute=1;function Mte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=Ute++,i=a(()=>{vf.delete(n),--r===0&&t(),s!==Ks&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,vf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of vf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){wn.error("Unable to send message to worker",n)}r===0&&t()})}a(Mte,"broadcastWithAcknowledgement");function Pte(e){e.postMessage({type:sB,workers:_B()})}a(Pte,"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 vte(e,t){e.resources=t,e.resources.updated=Date.now()}a(vte,"recordResourceReport");var UR;function Bte(e){UR=e}a(Bte,"setMonitorListener");var Hte=1e3,j0=!1;function Fte(){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}UR&&UR()},Hte).unref())}a(Fte,"startMonitoring");var qte=1e3;if(Ks){Hf(Ks);for(let e=0,t=In.addPorts.length;e<t;e++){let r=In.addPorts[e];r.threadId=In.addThreadIds[e],Hf(r)}setInterval(()=>{let e=process.memoryUsage();Ks.postMessage({type:rB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},qte).unref(),CR=a(()=>new Promise((e,t)=>{Ks.on("message",r),Ks.postMessage({type:tB});function r(s){s.type===sB&&(Ks.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else CR=_B;si.exports.getThreadInfo=CR;function Hf(e,t){jr.push(e),e.on("message",r=>{if(r.type===nB)r.port.threadId=r.threadId,Hf(r.port);else if(r.type===Ote){let s=vf.get(r.id);s&&s()}else{for(let n of uB)n(r,e);let s=DR.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(Hf,"addPort");if(MR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await mte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Z0(s,i.name));try{for await(let{filename:i}of hte(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await BR(),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 Ks.on("message",async e=>{let{type:t}=e;t===Bf.ITC_EVENT_TYPES.SHUTDOWN&&(si.exports.restartNumber=e.restartNumber,Ks.unref(),setTimeout(()=>{wn.warn("Thread did not voluntarily terminate",_te),process.exit(0)},PR).unref())})});function fB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ha||((0,Lu.onMessageByType)(dB,d=>{EB(d.path)}),(0,Lu.onMessageByType)(Gte,d=>{(0,Cu.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 FR(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(!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:HR,exclusiveStart:!0})){HR=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,Cu.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,Cu.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"},HR,!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,Lu.broadcast)({type:dB,path:n}),EB(n,!0)})}}var Cu,Lu,dB,Gte,ha,Hfe,FR,HR,mB=Te(()=>{Cu=D(F()),Lu=D(Ze());Ba();Zc();ao();dB="transaction",Gte="transaction-await",Hfe=Buffer.alloc(4096);a(fB,"addSubscription");FR=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"}}},HR=Date.now();a(EB,"notifyFromTransactionData");a(hB,"listenToCommits")});var FT={};Qe(FT,{coerceType:()=>kf,makeTable:()=>Yf,setServerUtilities:()=>zte,updateResource:()=>Pu});function Yf(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=uh(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,XR,ku,KB=10,WB=6;E&&eg();class ct 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]:ct;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,Du);switch(M.type){case"put":return k._writeUpdate(z,Du);case"delete":return k._writeDelete(Du);case"publish":return k._writePublish(z,Du);case"invalidate":return k.invalidate(Du);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"}),Bu.signalSchemaChange(new Hu.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,Bu.signalUserChange(new Hu.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=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 jR(m,g,{transaction:U},L,M=>{if(M?Pu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Qs.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=tE(m,M,g,R);if(V)return y?.disregardReadTxn(),R[GR]=!0,kR(V,z=>(Pu(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=tE(this[we],this[Ws],this[me]);if(m)return this[GR]=!0,kR(m,g=>{this[Ws]=g,this[Re]=g.value,this[xf]=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,rE()}static enableAuditing(m=!0){E=m,m&&eg(),ct.audit=m}static coerceId(m){return m===""?null:kf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(ct.tableName+"/"+m.name),r[m.name]?.drop();l.remove(ct.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));Bu.signalSchemaChange(new Hu.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=xR(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=xR(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=xR(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];Ta(C),Cn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ws],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[Ws],L,Ff,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,qf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Vu(m,g,null)}),E)S(m,null,L,C,qf,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];Ta(L);let y=this[Ws];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=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),Pu(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 ct.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];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),Pu(this,y)),!(y?.version>L)&&(Vu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ws],L,0,E,this[me],0,"delete"),E||rE()):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,Qs.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>kf(Ne,Ee)):kf(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===Mu.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===Mu.SEARCH_TYPES.CONTAINS||Ee===Mu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===Mu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=Vte:k.estimated_count=kte}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))):Gf.SKIP);else{let k=LE(M,y,C,ct,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(DE);V=ie(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],Pt=LE(ne,y,C,ct,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&&tE(He,oi,z,this);if(lr)return lr.then(JB=>kt(JB))}let bs=oi?.value;if(!bs)return Gf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Gf.SKIP;return bs}return a(kt,"processEntry"),k.map(oi=>jR(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(ct,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 Qs.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,Vf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ws]?.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[xf],timestamp:this[Ws]?.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;Ta(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ws],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&&rE(),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 Qs.ClientError(g.join(". "))}getUpdatedTime(){return this[xf]}wasLoadedFromSource(){return N?!!this[GR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Qs.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Qs.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),ct.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),ct.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 Uu(),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 Uu();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 Uu();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()}}ct.updatedAttributes();let QB=ct.prototype;return QB[SB]=!0,d&&ct.setTTLExpiration(d/1e3),B&&zB(),ct;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,vu.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,vu.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 Ta(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,Vf.writeKey)(W,Wte,0)>TB)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>WB&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let ie of z)ie()}),te=[],be=[],Mt>2&&Mt--}else se=Mt,Mt<KB&&Mt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(jR,"loadLocalRecord");function $u(W){if(!W)return;let m=W.role.permission;if(m.super_user)return Qte;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 tE(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Ff|qf)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=ZR(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 Qs.ServerError("Entry is not cached",504);return}else return L}}}a(tE,"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 ZR(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&(Ff|qf)?L(ZR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},Kte)});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;kR(Ge(M,async Ee=>{let Ne=performance.now(),ne,Pt,kt;try{for(let lr of ct.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;kt=C&Ff;let He=M.lastModified||kt&&R;Pt=kt||He>R||!U,He||(He=(0,vu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(br(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):ie(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}Cn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=Vu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&Pt||null,M,M.expiresAt,"put",!!kt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&Pt||null,M,0,"delete",!!kt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(ZR,"getFromSource");function rE(){if(es!==XR&&(XR=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(()=>G=G.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+Yte<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(ct.evict(L,y,U),R++),await Uu();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(rE,"scheduleCleanup");function eg(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(eg,"addDeleteRemoval");function zB(){(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()&&ct.evict(g,C.value,C.version),await Uu()}}catch(W){Ke.error("Error in evicting old records",W)}},$te).unref()}a(zB,"runRecordExpirationEviction")}function xR(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 zte(e){OB=e}function kf(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"&&!Jte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,$f.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 kR(e,t,r){return e?.then?e.then(t,r):t(e)}function Pu(e,t){e[Ws]=t,e[Re]=t?.value??null,e[xf]=t?.version}var Ns,Gf,vu,AB,Mu,Fu,Qs,Bu,Hu,Ke,Vf,zi,$f,xte,OB,kte,Vte,$te,Yte,pB,Kte,xf,SB,Ws,qR,GR,Du,Ff,qf,Wte,TB,Qte,eEe,Jte,Uu,of=Te(()=>{Ns=D(b()),Gf=require("lmdb"),vu=D(mr()),AB=require("lodash");as();wE();Mu=D(ze()),Fu=D(X());mB();Qs=D(j()),Bu=D(an()),Hu=D(ds());fe();Tl();Ke=D(F());ml();fi();Vf=require("ordered-binary"),zi=D(Ze());ao();$f=D($());ka();kn();xte=new Uint8Array(9);xte[8]=192;kte=1e8,Vte=1e7,$te=6e4,Yte=864e5;Fu.initSync();pB=Fu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Kte=1e4,xf=Symbol.for("version"),SB=Symbol.for("incremental-update"),Ws=Symbol("entry"),qR=Symbol("is-saving"),GR=Symbol("loaded-from-source"),Du={isNotification:!0,ensureLoaded:!1},Ff=1,qf=8,Wte=Buffer.allocUnsafeSlow(8192),TB=1978,Qte={read:!0,insert:!0,update:!0,delete:!0},eEe=(0,$f.convertToMS)(Fu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Yf,"makeTable");a(xR,"attributesAsObject");a(RB,"noop");a(zte,"setServerUtilities");Jte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(kf,"coerceType");a(gB,"isDescendantId");Uu=a(()=>new Promise(setImmediate),"rest");a(kR,"when");a(Pu,"updateResource")});var Ce={};Qe(Ce,{database:()=>pc,databases:()=>xe,dropDatabase:()=>jm,dropTableMeta:()=>rre,getDatabases:()=>hs,getTables:()=>Xte,onUpdatedTable:()=>hR,readMetaDb:()=>qu,resetDatabases:()=>jte,table:()=>et,tables:()=>pr});function Xte(){return Jf||hs(),pr||{}}function hs(){if(Jf)return xe;Jf=!0,Sa=new Map;let e=(0,xt.getHdbBasePath)()&&(0,Fe.join)((0,xt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),t=(0,xt.get)(Dr.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)(Dr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Lr.existsSync)(e)?e:(0,Fe.join)((0,xt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Lr.existsSync)(e))for(let r of(0,Lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qu((0,Fe.join)(e,r.name),null,s)}if((0,Lr.existsSync)((0,pa.getBaseSchemaPath)())){for(let r of(0,Lr.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,Lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);qu((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,Lr.existsSync)(n))for(let o of(0,Lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&qu((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,Lr.existsSync)(u)&&qu(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[Xf]}}return Sa=null,xe}}function jte(){Jf=!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 qu(e,t,r=YR,s,n){let i=new VR.default(e,!1);try{let o=ni.get(e);o?o.needsDeletion=!1:(o=(0,Wf.open)(i),ni.set(e,o));let c=new Ji.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Kf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Lr.existsSync)(s)&&(i.path=s,_=(0,Wf.open)(i),_.isLegacy=!0):_=bl(o));let l=IB(r),d=l[Xf],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)(Dr.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 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,Yf({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 KR)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)),Sa&&!Sa.has(e)){let r=new Set;t[Xf]=r,Sa.set(e,r)}return t}function wB(e,t,r){return e[t]=r,r}function pc({database:e,table:t}){e||(e=YR),hs();let r=IB(e),s=(0,Fe.join)((0,xt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),n=(0,xt.get)(Dr.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)(Dr.CONFIG_PARAMS.STORAGE_PATH)||((0,Lr.existsSync)(s)?s:(0,Fe.join)((0,xt.getHdbBasePath)(),Dr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ni.get(o);if(!c){let u=new VR.default(o,!1);c=(0,Wf.open)(u),ni.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;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[Xf]}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=YR);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 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)(Dr.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(Kf.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=wB(d,e,Yf({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(Kf.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){G(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,G(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new Ji.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.workerData?.restartNumber)&&(I=!0,G(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<Gu.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=tre(f,Q,Y):I&&Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of KR)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 tre(e,t,r){try{let s=e.schemaVersion;await Qf.signalSchemaChange(new zf.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)}),Gu.workerData&&Gu.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>Zte?await n:u>ere&&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 Qf.signalSchemaChange(new zf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function rre({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 hR(e){KR.push(e)}var xt,Kf,Wf,Fe,Lr,pa,Ji,VR,Dr,NB,$R,bB,Qf,zf,Gu,Zr,yB,YR,Xf,pr,xe,ma,KR,Jf,ni,Sa,Zte,ere,fe=Te(()=>{xt=D(X()),Kf=D(ze()),Wf=require("lmdb"),Fe=require("path"),Lr=require("fs"),pa=D(ve());of();Ji=D(Dl()),VR=D(Ml()),Dr=D(b()),NB=D(require("fs-extra")),$R=require("../../index"),bB=D(mr()),Qf=D(an()),zf=D(ds()),Gu=require("worker_threads"),Zr=D(F()),yB=D(Ze());ao();ka();YR="data",Xf=Symbol("defined-tables");(0,xt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,$R._assignPackageExport)("databases",xe);(0,$R._assignPackageExport)("tables",pr);ma=Symbol.for("next-table-id"),KR=[],ni=new Map;a(Xte,"getTables");a(hs,"getDatabases");a(jte,"resetDatabases");a(qu,"readMetaDb");a(IB,"ensureDB");a(wB,"setTable");a(pc,"database");a(jm,"dropDatabase");a(et,"table");Zte=1e3,ere=10;a(tre,"runIndexing");a(rre,"dropTableMeta");a(hR,"onUpdatedTable")});var $=T((uEe,kB)=>{"use strict";var ii=require("path"),MB=require("fs-extra"),ur=F(),CB=require("fs-extra"),jf=require("os"),sre=require("net"),nre=require("recursive-iterator"),We=b(),ire=Mg(),LB=require("papaparse"),Zf=require("moment"),{inspect:ore}=require("util"),DB=require("is-number"),cEe=require("lodash"),are=require("minimist"),cre=require("https"),ure=require("http"),{hdb_errors:eE}=j(),lre=/^((\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),_re=100,dre=5,fre="",Ere=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};kB.exports={isEmpty:Ur,isEmptyOrZeroLength:zs,arrayHasEmptyValues:pre,arrayHasEmptyOrZeroLengthValues:Sre,buildFolderPath:Tre,isBoolean:vB,errorizeMessage:hre,stripFileExtension:gre,autoCast:Are,autoCastJSON:BB,autoCastJSONDeep:QR,removeDir:Ore,compareVersions:Nre,isCompatibleDataVersion:bre,escapeRawValue:yre,unescapeValue:Ire,stringifyProps:wre,timeoutPromise:Lre,isClusterOperation:Ure,getClusterUser:Pre,checkGlobalSchemaTable:Mre,getHomeDir:FB,getPropsFilePath:Cre,promisifyPapaParse:vre,removeBOM:qB,createEventPromise:Bre,checkProcessRunning:Hre,checkSchemaTableExist:Fre,checkSchemaExists:GB,checkTableExists:xB,getStartOfTomorrowInSeconds:qre,getLimitKey:Gre,isObject:Rre,isNotEmptyAndHasValue:mre,autoCasterIsNumberCheck:HB,backtickASTSchemaItems:xre,isPortTaken:Dre,createForkArgs:kre,autoCastBoolean:Vre,async_set_timeout:PB,getTableHashAttribute:$re,doesSchemaExist:Yre,doesTableExist:Kre,stringifyObj:Wre,ms_to_time:Qre,changeExtension:zre,getEnvCliRootPath:zR,noBootFile:Jre,httpRequest:Xre,transformReq:jre,convertToMS:Zre,PACKAGE_ROOT:We.PACKAGE_ROOT};function hre(e){return e instanceof Error?e:new Error(e)}a(hre,"errorizeMessage");function Ur(e){return e==null}a(Ur,"isEmpty");function mre(e){return!Ur(e)&&(e||e===0||e===""||vB(e))}a(mre,"isNotEmptyAndHasValue");function zs(e){return Ur(e)||e.length===0||e.size===0}a(zs,"isEmptyOrZeroLength");function pre(e){if(Ur(e))return!0;for(let t=0;t<e.length;t++)if(Ur(e[t]))return!0;return!1}a(pre,"arrayHasEmptyValues");function Sre(e){if(zs(e))return!0;for(let t=0;t<e.length;t++)if(zs(e[t]))return!0;return!1}a(Sre,"arrayHasEmptyOrZeroLengthValues");function Tre(...e){try{return e.join(ii.sep)}catch{console.error(e)}}a(Tre,"buildFolderPath");function vB(e){return Ur(e)?!1:e===!0||e===!1}a(vB,"isBoolean");function Rre(e){return Ur(e)?!1:typeof e=="object"}a(Rre,"isObject");function gre(e){return zs(e)?fre:e.slice(0,-Ere)}a(gre,"stripFileExtension");function Are(e){return Ur(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:HB(e)===!0?Number(e):lre.test(e)?new Date(e):e}a(Are,"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 QR(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=QR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QR(r);s!==r&&(e[t]=s)}return e}else return BB(e)}a(QR,"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 Ore(e){if(zs(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(Ore,"removeDir");function Nre(e,t){if(zs(e)){ur.info("Invalid current version sent as parameter.");return}if(zs(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(Nre,"compareVersions");function bre(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(bre,"isCompatibleDataVersion");function yre(e){if(Ur(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(yre,"escapeRawValue");function Ire(e){if(Ur(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(Ire,"unescapeValue");function wre(e,t){if(Ur(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}!zs(s)&&s[0]===";"?r+=" "+s+n+jf.EOL:zs(s)||(r+=s+"="+n+jf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(wre,"stringifyProps");function FB(){let e;try{e=jf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(FB,"getHomeDir");function Cre(){let e=ii.join(FB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return MB.existsSync(e)||(e=ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(Cre,"getPropsFilePath");function Lre(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Lre,"timeoutPromise");async function Dre(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=sre.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Dre,"isPortTaken");function Ure(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){ur.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Ure,"isClusterOperation");function Mre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Mre,"checkGlobalSchemaTable");function Pre(e,t){if(Ur(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ur(e)||zs(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(Pre,"getClusterUser");function vre(){LB.parsePromise=function(e,t,r){return new Promise(function(s,n){LB.parse(e,{header:!0,transformHeader:qB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(vre,"promisifyPapaParse");function qB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(qB,"removeBOM");function Bre(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;ur.info(`Got cluster status event response: ${ore(n)}`);try{i.cancel()}catch{ur.error("Error trying to cancel timeout.")}s(n)})})}a(Bre,"createEventPromise");async function Hre(e){let t=!0,r=0;do await PB(_re*r++),(await ire.findPs(e)).length>0&&(t=!1);while(t&&r<dre);if(t)throw new Error(`process ${e} was not started`)}a(Hre,"checkProcessRunning");function Fre(e,t){let r=GB(e);if(r)return r;let s=xB(e,t);if(s)return s}a(Fre,"checkSchemaTableExist");function GB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return eE.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 eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xB,"checkTableExists");function qre(){let e=Zf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Zf().utc().unix();return e-t}a(qre,"getStartOfTomorrowInSeconds");function Gre(){return Zf().utc().format("DD-MM-YYYY")}a(Gre,"getLimitKey");function xre(e){try{let t=new nre(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(xre,"backtickASTSchemaItems");function kre(e){return[e]}a(kre,"createForkArgs");function Vre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Vre,"autoCastBoolean");function $re(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a($re,"getTableHashAttribute");function Yre(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Yre,"doesSchemaExist");function Kre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(Kre,"doesTableExist");function Wre(e){try{return JSON.stringify(e)}catch{return e}}a(Wre,"stringifyObj");function Qre(e){let t=Zf.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(Qre,"ms_to_time");function zre(e,t){let r=ii.basename(e,ii.extname(e));return ii.join(ii.dirname(e),r+t)}a(zre,"changeExtension");function zR(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=are(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zR,"getEnvCliRootPath");var WR;function Jre(){if(WR)return WR;let e=zR();zR()&&MB.pathExistsSync(ii.join(e,We.HDB_CONFIG_FILE))&&(WR=!0)}a(Jre,"noBootFile");function Xre(e,t){let r;return e.protocol==="http:"?r=ure:r=cre,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(Xre,"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 Zre(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(Zre,"convertToMS")});var JR=b(),VB=$(),xu=F(),ese=on(),tse=gr(),rse=zT(),{start:sse}=(ER(),Z(wf)),{closeConnection:nse}=st(),$B=require("moment"),YB=cf(),{cloneDeep:ise}=require("lodash"),ose=process.env[JR.PROCESS_NAME_ENV_PROP],Xi=ose.substring(4);a(async function(){let t={id:Xi,request:void 0},r=0;try{xu.notify("Starting job:",Xi),sse(),ese.setSchemaDataToGlobal(),await tse.setUsersToGlobal();let s=await YB.getJobById(Xi);if(VB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Xi}`);let{request:n}=s[0];if(VB.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=ise(n);let i=rse.getOperationFunction(n);xu.trace("Running operation:",n.operation,"for job",Xi);let o=await i.job_operation_function(n);xu.trace("Result from job:",Xi,o),t.status=JR.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=$B().valueOf(),xu.notify("Successfully completed job:",Xi)}catch(s){r=1,xu.error(s),t.status=JR.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=$B().valueOf()}finally{await YB.updateJob(t),await nse(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
|