harperdb 4.2.2 → 4.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/harperdb.js +24 -24
- package/bin/lite.js +18 -18
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +15 -15
- package/launchServiceScripts/launchNatsReplyService.js +15 -15
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +15 -15
- package/npm-shrinkwrap.json +629 -575
- package/package.json +14 -14
- package/server/jobs/jobProcess.js +15 -15
- package/server/threads/threadServer.js +18 -18
- package/studio/fonts/FontAwesome.otf +0 -0
- package/studio/fonts/fontawesome-webfont.eot +0 -0
- package/studio/fonts/fontawesome-webfont.svg +2671 -0
- package/studio/fonts/fontawesome-webfont.ttf +0 -0
- package/studio/fonts/fontawesome-webfont.woff +0 -0
- package/studio/fonts/fontawesome-webfont.woff2 +0 -0
- package/studio/images/logo.png +0 -0
- package/utility/scripts/restartHdb.js +15 -15
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
"use strict";var jB=Object.create;var Ta=Object.defineProperty;var XB=Object.getOwnPropertyDescriptor;var ZB=Object.getOwnPropertyNames;var eH=Object.getPrototypeOf,tH=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 ZB(t))!tH.call(e,n)&&n!==r&&Ta(e,n,{get:()=>t[n],enumerable:!(s=XB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?jB(eH(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 rH=require("fast-glob"),{statSync:rE,existsSync:sE,readFileSync:sH,writeFileSync:nH}=require("fs"),{spawnSync:iH,spawn:oH,execFileSync:use}=require("child_process"),{isMainThread:aH}=require("worker_threads"),{join:Cn,relative:sg}=require("path"),{PACKAGE_ROOT:es}=b(),{tmpdir:cH,platform:uH}=require("os");require("source-map-support").install();var lH=["resources","server","dataLayer","components"],Ra="ts-build",nE,_H=__filename.endsWith("tsBuild.js");if(_H){if(aH){let r;try{rE(Cn(es,Ra)),r=!0}catch{}if(r)for(let s of rH.sync(lH.map(n=>n+"/**/*.ts"),{cwd:es})){let n=0,i=0;try{n=rE(Cn(es,s)).mtimeMs-5e3,i=rE(Cn(es,Ra,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),nE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),nE=!0;if(nE){let s=Cn(es,"node_modules/.bin/tsc");uH()==="win32"&&(s+=".cmd");let n=iH(s,{cwd:es});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=Cn(cH(),"harperdb-tsc.pid"),o;if(sE(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:es,detached:!0,stdio:"ignore"});nH(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(es)&&!s[0].includes("node_modules")){let i=sg(es,s[0]),o;i.startsWith(Ra)?o=Cn(es,sg(Ra,i)):o=Cn(es,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 Ur=require("path"),dH=require("fs"),{relative:_se,join:dse}=Ur,{existsSync:fH}=dH;function EH(){let e=__dirname;for(;!fH(Ur.join(e,"package.json"));){let t=Ur.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(EH,"getHDBPackageRoot");var Ln=EH(),og="js",Yu=og,hH="harperdb-config.yaml",mH="defaultConfig.yaml",pH="hdb",ag=`harperdb.${Yu}`,cg=`customFunctionsServer.${Yu}`,SH=`restartHdb.${Yu}`,oE="HarperDB",$u="Custom Functions",Ku="Clustering Hub",Wu="Clustering Leaf",TH="Clustering Ingest Service",RH="Clustering Reply Service",gH="foreground.pid",AH="hdb.pid",OH="data",NH={HDB:oE,CLUSTERING_HUB:Ku,CLUSTERING_LEAF:Wu,CLUSTERING_INGEST_SERVICE:TH,CLUSTERING_REPLY_SERVICE:RH,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"},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: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"},wH={CLUSTERING_HUB_PROC_DESCRIPTOR:Ku,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wu},iE={HDB:Ur.join(Ln,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Ln,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Ln,"server/nats"),CLUSTERING_LEAF:Ur.join(Ln,"server/nats")},CH={HDB:Ur.join(iE.HDB,ag),CUSTOM_FUNCTIONS:Ur.join(iE.CUSTOM_FUNCTIONS,cg)},LH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},DH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},ug="support@harperdb.io",UH="customer-success@harperdb.io",lg=1,MH=4141,_g="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",PH="https://www.harperdb.io/product",vH=`For support, please submit a request at ${_g} or contact ${ug}`,dg=`For license support, please contact ${UH}`,BH="None of the specified records were found.",HH="hash attribute not found",qH=`Your current license only supports ${lg} role. ${dg}`,FH="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",jH=999999,XH="*",ZH="--max-old-space-size=",eq="system",tq="__hdb_hash",rq=".harperdb",sq=".hdb",nq="keys",iq="hdb_boot_properties.file",oq=".updateConfig.json",aq="SIGTSTP",cq=24,uq=6e4,lq=448,_q="blob",dq="trash",fq="database",Eq="schema",hq="transactions",mq=".count",pq="id",Sq="PROCESS_NAME",fg={SETTINGS_PATH_KEY:"settings_path"},Eg=require("lodash"),Tq={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"},Rq={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},gq={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Aq={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"},Oq={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:",Nq={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"},bq={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"},yq="060493.ks",Iq=".license",wq={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"},Cq={CSV:".csv",JSON:".json"},Lq={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Dq={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 Uq={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Mq={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"},Pq=Eg.invert(hg),vq={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 Bq={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Hq={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"},qq={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"},Fq={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Gq={VERSION_DEFAULT:"2.2.0"},xq={DEVELOPMENT:8192,DEFAULT:512},kq={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"},Vq={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"},$q={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},pg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Yq=Symbol("metadata"),Kq="__clustering__",Wq=Object.values(pg),Qq=15984864e5,Sg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},zq=Eg.invert(Sg),Jq={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},jq=111,Xq=`\r
|
|
2
|
-
`,
|
|
3
|
-
`}a(
|
|
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:DF.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(vF,"findPs")});var ze=T((gse,Bg)=>{"use strict";var BF="__dbis__",HF="__txns__",qF="__environment_name__",FF="__dbi_defintion__",GF={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"},xF=["__createdtime__","__updatedtime__"],kF="\uFFFF",vg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},VF=Object.values(vg);Bg.exports={AUDIT_STORE_NAME:HF,INTERNAL_DBIS_NAME:BF,DBI_DEFINITION_NAME:FF,SEARCH_TYPES:GF,TIMESTAMP_NAMES:xF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:qF,TRANSACTIONS_DBI_NAMES_ENUM:vg,TRANSACTIONS_DBIS:VF,OVERFLOW_MARKER:kF}});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"},$F=xg[Fg.INTERNAL_SERVER_ERROR],YF={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.`},KF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},WF={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"},QF={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"},zF={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"},JF={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},jF={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},XF={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},ZF={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`},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}`},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={...kg,...WF,...YF,...JF,...jF,...XF,...ZF,...eG,...zF,...Vg,...$g,...tG,...rG,...KF};Yg.exports={CHECK_LOGS_WRAPPER:Gg,HDB_ERROR_MSGS:sG,DEFAULT_ERROR_MSGS:xg,DEFAULT_ERROR_RESP:$F,HTTP_STATUS_CODES:Fg,LMDB_ERRORS_ENUM:QF,AUTHENTICATION_ERROR_MSGS:kg,VALIDATION_ERROR_MSGS:Vg,ITC_ERRORS:$g}});var X=T((Nse,Qg)=>{"use strict";var Zi=dr(),nG=G(),iG=b(),Xu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Kg),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&nG[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=iG.LOG_LEVELS.ERROR,n=null,i=!1){if(Wg(e))return e;let o=new Xu(e,t,r,s,n);return i&&delete o.stack,o}a(Kg,"handleHDBError");function Wg(e){return e.__proto__.constructor.name===Xu.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 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,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},aG="certificate.pem",cG="privateKey.pem",uG="ca.pem";zg.exports={CERTIFICATE_VALUES:oG,CERTIFICATE_PEM_NAME:aG,PRIVATEKEY_PEM_NAME:cG,CA_PEM_NAME:uG}});var Fe=T((Ise,jg)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};jg.exports={validateObject:lG,validateObjectAsync:_G,validateBySchema:dG};function lG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(lG,"validateObject");async function _G(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(_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 SE=T((Lse,rA)=>{"use strict";var tA=require("fs-extra"),ue=require("joi"),fG=require("os"),{boolean:Ie,string:ys,number:At,array:pE}=ue.types(),{totalmem:Xg}=require("os"),eo=require("path"),EG=G(),el=$(),Cse=Jg(),Zg=b(),hG=Fe(),eA="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",ai=At.min(0).required(),tl=pE.items({host:ys.required(),port:ai}).empty(null),Xs;rA.exports={configValidator:OG,routesValidator:CG,route_constraints:tl};function OG(e){if(Xs=e.rootPath,el.isEmpty(Xs))throw gG;let t=Ie.required(),r=At.min(0).max(1e3).empty(null).default(wG),s=ys.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Zu),n=ys.optional().empty(null),i=ys.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(Zu),c=ue.custom(bG).empty(null).default(Zu),u=e.clustering?.enabled;if(el.isEmpty(u))throw AG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ai,routes:tl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ai}).required()}).required(),network:ue.object({port:ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:ai,routes:tl}).required(),streams:ue.object({maxAge:At.min(120).allow(null).optional(),maxBytes:At.min(1).allow(null).optional(),maxMsgs:At.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:ys.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:At.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:At}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval:ys.custom(IG).optional().empty(null),maxSize:ys.custom(yG).optional().empty(null),path:ys.optional().empty(null).default(Zu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:pE.optional(),headersTimeout:At.min(1).optional(),keepAliveTimeout:At.min(1).optional(),port:At.optional().empty(null),securePort:At.optional().empty(null),timeout:At.min(1).optional()}).optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:ys.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.object({compressionThreshold:At.optional(),cors:Ie.optional(),corsAccessList:pE.optional(),headersTimeout:At.min(1).optional(),port:At.min(0).optional().empty(null),securePort:At.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(OG,"configValidator");function NG(e){return tA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(NG,"doesPathExist");function bG(e,t){ue.assert(e,ys.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 Zu(e,t){if(!el.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(el.isEmpty(Xs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return eo.join(Xs,mG);case"logging.root":return eo.join(Xs,eA);case"clustering.leafServer.streams.path":return eo.join(Xs,"clustering","leaf");case"storage.path":let s=eo.join(Xs,Zg.LEGACY_DATABASES_DIR_NAME);return tA.existsSync(s)?s:eo.join(Xs,Zg.DATABASES_DIR_NAME);case"logging.rotation.path":return eo.join(Xs,eA);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Zu,"setDefaultRoot");function CG(e){let t=ue.object({routes:tl});return hG.validateBySchema({routes:e},t)}a(CG,"routesValidator")});var to={};Qe(to,{server:()=>lt});var sA,lt,Mr=Te(()=>{sA=require("../../index"),lt={};(0,sA._assignPackageExport)("server",lt)});var Er=T((Mse,dA)=>{"use strict";var fr=b(),ht=$(),_t=G(),{configValidator:LG,routesValidator:nA}=SE(),Wt=require("fs-extra"),DG=require("yaml"),ts=require("path"),UG=require("is-number"),oA=require("properties-reader"),MG=require("lodash"),{handleHDBError:PG}=X(),{HTTP_STATUS_CODES:vG,HDB_ERROR_MSGS:rl}=dr(),Use=require("minimist"),{server:BG}=(Mr(),Z(to)),{DATABASES_PARAM_CONFIG:Ia,CONFIG_PARAMS:Zs,CONFIG_PARAM_MAP:rs}=fr,HG="Unable to get config value because config is uninitialized",qG="Config successfully initialized",FG="Error backing up config file",GG="Empty parameter sent to getConfigValue",aA=ts.join(fr.PACKAGE_ROOT,"config","yaml",fr.HDB_DEFAULT_CONFIG_FILE),xG="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,Ot,nl;dA.exports={createConfigFile:kG,getDefaultConfig:VG,getConfigValue:uA,initConfig:RE,flattenConfig:ro,updateConfigValue:lA,updateConfigObject:YG,getConfiguration:QG,setConfiguration:zG,readConfigFile:AE,getClusteringRoutes:JG,initOldConfig:_A,getConfigFromFile:jG,getConfigFilePath:ci,addConfig:XG,deleteConfigFromFile:ZG,getConfigObj:ex};function kG(e){let t=Dn(aA);sl=ro(t.toJSON());let r;for(let o in e){let c=rs[o.toLowerCase()];if(c===Zs.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();Ot=ro(s);let n=t.getIn(["rootPath"]),i=ts.join(n,fr.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),_t.trace(`Config file written to ${i}`)}a(kG,"createConfigFile");function cA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ht.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ia.TABLES))for(let i in s[n][Ia.TABLES])for(let o in s[n][Ia.TABLES][i]){let c=s[n][Ia.TABLES][i][o],u=[Zs.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=[Zs.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 VG(e){if(sl===void 0){let r=Dn(aA);sl=ro(r.toJSON())}let t=rs[e.toLowerCase()];if(t!==void 0)return sl[t.toLowerCase()]}a(VG,"getDefaultConfig");function uA(e){if(e==null){_t.error(GG);return}if(Ot===void 0){_t.trace(HG);return}let t=rs[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(uA,"getConfigValue");function ci(e=ht.getPropsFilePath()){let t=ht.getEnvCliRootPath();return t?ts.join(t,fr.HDB_CONFIG_FILE):oA(e).get(fr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function RE(e=!1){if(Ot===void 0||e){let t;if(!ht.noBootFile()){t=ht.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.constants.R_OK)}catch(i){throw _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!==fr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Dn(r)}catch(i){if(i.code===fr.NODE_ERROR_CODES.ENOENT){_t.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw _t.error(i),new Error(`Error reading HarperDB config file at ${r}`)}$G(s,r),gE(s);let n=s.toJSON();if(BG.config=n,Ot=ro(n),Ot.logging_rotation_rotate)for(let i in iA)Ot[i]&&_t.error(`Config ${iA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);_t.trace(qG)}}a(RE,"initConfig");function $G(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ts.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(_t.trace("Updating config file with missing config params"),Wt.writeFileSync(t,String(e)))}a($G,"checkForUpdatedConfig");function gE(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 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 YG(e,t){Ot===void 0&&(Ot={});let r=rs[e.toLowerCase()];if(r===void 0){_t.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(YG,"updateConfigObject");function lA(e,t,r=void 0,s=!1,n=!1,i=!1){Ot===void 0&&RE();let o=uA(rs.hdb_root),c=ts.join(o,fr.HDB_CONFIG_FILE),u=Dn(c),_;if(r===void 0&&e.toLowerCase()===Zs.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=rs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=TE(f,t);u.setIn([...E],h)}else for(let f in r){let E=rs[f.toLowerCase()];if(E===Zs.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=fr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=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=ts.join(l,fr.HDB_CONFIG_FILE);s===!0&&KG(c,l),Wt.writeFileSync(d,String(u)),n&&(Ot=ro(u.toJSON())),_t.trace(`Config parameter: ${e} updated with value: ${t}`)}a(lA,"updateConfigValue");function KG(e,t){try{let r=ts.join(t,"backup",`${fr.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),_t.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){_t.error(FG),_t.error(r)}}a(KG,"backupConfigFile");var WG=["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])&&!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;!Zs[u.toUpperCase()]&&rs[u]&&(n[rs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(ro,"flattenConfig");function TE(e,t){if(e===Zs.CLUSTERING_NODENAME||e===Zs.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)||ht.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return ht.autoCast(t)}a(TE,"castConfigValue");function QG(){let e=ht.getPropsFilePath(),t=ci(e);return Dn(t).toJSON()}a(QG,"getConfiguration");async function zG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return lA(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 AE(){let e=ht.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!ht.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 DG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Dn,"parseYamlDoc");function JG(){let e=AE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ht.isEmptyOrZeroLength(t)?[]:t;let r=nA(t);if(r)throw rl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ht.isEmptyOrZeroLength(s)?[]:s;let n=nA(s);if(n)throw rl.CONFIG_VALIDATION(n.message);if(!ht.isEmptyOrZeroLength(s)&&!ht.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ht.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw rl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(JG,"getClusteringRoutes");function _A(e){let t=oA(e);Ot={};for(let r in rs){let s=t.get(r.toUpperCase());if(ht.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=rs[r].toLowerCase();n===Zs.LOGGING_ROOT?Ot[n]=ts.dirname(s):Ot[n]=s}return Ot}a(_A,"initOldConfig");function jG(e){let t=AE();return MG.get(t,e.replaceAll("_","."))}a(jG,"getConfigFromFile");async function XG(e,t){let r=Dn(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ci(),String(r))}a(XG,"addConfig");function ZG(e){let t=ci(ht.getPropsFilePath()),r=Dn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=ts.join(s,fr.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a(ZG,"deleteConfigFromFile");function ex(){return nl||(RE(),nl)}a(ex,"getConfigObj")});var j=T((vse,hA)=>{"use strict";var OE=require("fs-extra"),ss=require("path"),fA=require("os"),tx=require("properties-reader"),wa=G(),ui=$(),ee=b(),il=Er(),rx="Error initializing environment manager",ol="BOOT_PROPS_FILE_PATH",EA=!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={};hA.exports={BOOT_PROPS_FILE_PATH:ol,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=il.getConfigValue(e);return t===void 0?en[e]:t}a(ox,"get");function he(e,t){sx[e]&&(en[e]=t),il.updateConfigObject(e,t)}a(he,"setProperty");function ax(){let e;try{e=ui.getPropsFilePath(),OE.accessSync(e,OE.constants.F_OK|OE.constants.R_OK),EA=!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[ol]=e,!0}catch{return wa.trace(`Environment manager found no properties file at ${e}`),!1}}a(ax,"doesPropFileExist");function cx(e=!1){try{(EA||ax()||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(rx),wa.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=ss.join(__dirname,"../../","unitTests");en[ol]=ss.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ss.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,fA.userInfo()?fA.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ss.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ss.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ss.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ss.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ss.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,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,ss.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(ux,"initTestEnvironment")});var ve=T((Hse,AA)=>{"use strict";var Ma=b(),lx=$(),Qt=j(),Pa=require("path"),_x=require("minimist"),mA=require("fs-extra"),pA=require("lodash");Qt.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(Qt.getHdbBasePath()!==void 0)return La=Qt.get(Un.STORAGE_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(SA,"getBaseSchemaPath");function TA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=gA(al),Da}a(TA,"getSystemSchemaPath");function RA(){if(Ua!==void 0)return Ua;if(Qt.getHdbBasePath()!==void 0)return Ua=Qt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(RA,"getTransactionAuditStoreBasePath");function dx(e,t){let r=Qt.get(Un.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Pa.join(RA(),e.toString())}a(dx,"getTransactionAuditStorePath");function gA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ma.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Pa.join(SA(),e)}a(gA,"getSchemaPath");function fx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,_x(process.argv));let s=r[Un.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[al];if(!c)continue;let u=Qt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return pA.set(u,[al,Ca.TABLES,t,Ca.PATH],_),Qt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return pA.set(u,[al,Ca.PATH],l),Qt.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),Qt.setProperty(Un.STORAGE_PATH,n),i}return TA()}a(fx,"initSystemSchemaPaths");function Ex(){La=void 0,Da=void 0,Ua=void 0}a(Ex,"resetPaths");AA.exports={getBaseSchemaPath:SA,getSystemSchemaPath:TA,getTransactionAuditStorePath:dx,getTransactionAuditStoreBasePath:RA,getSchemaPath:gA,initSystemSchemaPaths:fx,resetPaths:Ex}});var hr=T((xse,IA)=>{"use strict";var hx=dr().LMDB_ERRORS_ENUM,Fse=require("lmdb"),mx=ze(),Gse=require("buffer").Buffer,{OVERFLOW_MARKER:OA,MAX_SEARCH_KEY_LENGTH:cl}=mx,NA=["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(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(Rx,"getIndexedValues");var ul=0,bA=0;function yA(){bA=Date.now()-performance.now()}a(yA,"adjustStartTime");yA();var gx=6e4;setInterval(yA,gx).unref();function Ax(){let e=performance.now()+bA;return e>ul?(ul=e,e):(ul+=488e-6,ul)}a(Ax,"getNextMonotonicTime");IA.exports={validateEnv:px,stringifyData:Sx,convertKeyValueToWrite:Tx,getNextMonotonicTime:Ax,getIndexedValues:Rx}});var wA,ns,NE,va=Te(()=>{wA=require("events"),ns=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 Pr(e){return e[Bt]||(e[Bt]=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 is.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new is.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new is.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new is.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=CA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function 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[Bt],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[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function _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[Bt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Re]===i){if(_l(n))return!0}else return!0}else return!0}}return!1}var is,Bt,ll,li,dl,hl=Te(()=>{os();is=D(X()),Bt=Symbol("own-data");a(Pr,"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 yx(){bx=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},Nx).unref()}var yE,LA,Ox,bE,_i,ml,Nx,bx,IE=Te(()=>{yE=D(hr()),LA=D(G());os();Ox=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<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=[]}},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(){}},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 _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");os();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]=ws.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case mt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new so.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new so.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=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 mt.SEARCH_TYPES.EQUALS:case void 0:return Is(r,n=>n===s);case mt.SEARCH_TYPES.CONTAINS:return Is(r,n=>n?.toString().includes(s));case mt.SEARCH_TYPES.ENDS_WITH:case mt.SEARCH_TYPES._ENDS_WITH:return Is(r,n=>n?.toString().endsWith(s));case mt.SEARCH_TYPES.STARTS_WITH:case mt.SEARCH_TYPES._STARTS_WITH:return Is(r,n=>typeof n=="string"&&n.startsWith(s));case mt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Is(r,n=>(0,ws.compareKeys)(n,s[0])>=0&&(0,ws.compareKeys)(n,s[1])<=0);case"gt":case mt.SEARCH_TYPES.GREATER_THAN:case mt.SEARCH_TYPES._GREATER_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)>0);case"ge":case mt.SEARCH_TYPES.GREATER_THAN_EQUAL:case mt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)>=0);case mt.SEARCH_TYPES.LESS_THAN:case"lt":case mt.SEARCH_TYPES._LESS_THAN:return Is(r,n=>(0,ws.compareKeys)(n,s)<0);case"le":case mt.SEARCH_TYPES.LESS_THAN_EQUAL:case mt.SEARCH_TYPES._LESS_THAN_EQUAL:return Is(r,n=>(0,ws.compareKeys)(n,s)<=0);case"ne":return Is(r,n=>(0,ws.compareKeys)(n,s)!==0);default:throw new so.ClientError(`Unknown query comparator "${t}"`)}}function Is(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function 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=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:UA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var so,mt,ws,MA,Ix,PA,UA,wx,wE,Sl=Te(()=>{so=D(X()),mt=D(ze()),ws=require("ordered-binary"),MA=require("lmdb"),Ix={"<":"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(Is,"attributeComparator");UA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,wx=/([^&|*=]+)([&|*=]*)/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:()=>as,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>GA,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 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 vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[we]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[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 Br(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[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function 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,as,GA,Re,Cx,Nt,Tl,UE,os=Te(()=>{HA=require("crypto");va();qA=require("../../index"),FA=D(X());hl();di();Sl();me=Symbol.for("context"),we=Symbol.for("primary-key"),as=Symbol("is-collection"),GA=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=vr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=BA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[as]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,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):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=BA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[as])return this.constructor.create(this[we],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[as]}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&&Cx[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[as]=!0),n}subscribe(t){return new ns}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ns}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,qA._assignPackageExport)("Resource",Nt);a(Lx,"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(vr,"transactional");a(Br,"missingMethod");a(DE,"selectFromObject");a(BA,"transformForSelect")});var vE={};Qe(vE,{loadGQLSchema:()=>Mx,start:()=>PE,startOnMainThread:()=>Ux});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):Dx.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,Dx,Ux,Mx,kA=Te(()=>{Rl=require("path");fe();xA=D(Ze()),Dx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(PE,"start");Ux=PE,Mx=PE({ensureTable:et}).handleFile});async function gl(e){return Px?(Ha||(Ha=vx(Hx)),(await(await Ha).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"}),Ha=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,$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:mr,databases:xe})}};let s=await(0,VA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ha}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:mr}}var VA,$A,Px,Ha,BE=Te(()=>{os();fe();VA=require("fs/promises"),$A=require("path"),Px=!1;a(gl,"secureImport");a(vx,"getCompartment");a(Bx,"secureOnlyFetch");a(Hx,"getGlobalVars")});var qE={};Qe(qE,{handleFile:()=>qx});async function qx(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(qx,"handleFile")});var GE={};Qe(GE,{start:()=>Fx});function Fx({resources:e}){e.set("login",FE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var FE,WA=Te(()=>{os();a(Fx,"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:Gx}=require("stream"),xx=1e4;JA.exports={streamAsJSON(e){return new xE({value:e})}};var xE=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),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>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 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"),kx=require("alasql"),$E=require("clone"),jA=$(),{handleHDBError:XA,hdb_errors:Vx}=X(),{HDB_ERROR_MSGS:ZA,HTTP_STATUS_CODES:eO}=Vx,{getDatabases:$x}=(fe(),Z(Ce)),Yx=["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=$x();if(!r[t.databaseid])throw XA(new Error,ZA.SCHEMA_NOT_FOUND(t.databaseid),eO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XA(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 kx.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)!jA.isEmpty(i)&&!jA.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&&Yx.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:()=>pr,setAuditRetention:()=>Kx,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)===XE){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},JE/10).unref())}),t}function Kx(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):Hr.set(th),u=9),f(0),f(t),d(r),no.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,io.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(eh.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),no.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(no.setUint16(u,E|32768),u+=2):E<1056964608?(no.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,no.setUint32(u+1,E),u+=5)}}function pr(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&jE?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,Hr,no,AO,OO,JE,Fa,jE,EO,XE,hO,mO,NO,ZE,oo=Te(()=>{io=require("ordered-binary"),Ol=D(j()),SO=D(ze()),TO=D(b()),RO=D(Ze()),gO=D($());xa();eh=D(G());(0,Ol.initSync)();Hr=Buffer.alloc(1024),no=new DataView(Hr.buffer,Hr.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(Kx,"setAuditRetention");jE=16,EO=1,XE=2,hO=3,mO=4,NO={put:EO|jE,[EO]:"put",delete:XE,[XE]:"delete",message:hO|jE,[hO]:"message",invalidate:mO,[mO]:"invalidate"};a(bl,"createAuditEntry");a(pr,"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:()=>Wx,METADATA:()=>ka,NO_TIMESTAMP:()=>rh,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>th,RecordEncoder:()=>oh,TIMESTAMP_ASSIGN_LAST:()=>zx,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,Qx.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=Jx.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=pr(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,Wx,ka,co,Qx,rh,wO,zx,CO,sh,ah,nh,Il,ao,wl,ih,oh,Jx,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]),Wx=Symbol("local-timestamp"),ka=Symbol("metadata"),co=new Uint8Array(8),Qx=new DataView(co.buffer,0,8),rh=0,wO=0,zx=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");Jx=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=j(),_h=b(),{RecordEncoder:jx}=(xa(),Z(DO));lh.initSync();var Xx=lh.get(_h.CONFIG_PARAMS.STORAGE_COMPRESSION),Zx=lh.get(_h.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ek=_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=Xx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Zx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:jx},this.alwaysLazyProperty=s=>s===ek)}};UO.exports=uh});var Ul=T((Pne,PO)=>{"use strict";var uo=j(),Va=b();uo.initSync();var tk=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),rk=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=tk,this.noFSAccess=!0,MO!==void 0&&(this.overlappingSync=MO),this.noReadAhead=rk}};PO.exports=Dl;Dl.MAX_DBS=1e4});var Ue=T((Bne,$O)=>{"use strict";var fh=require("lmdb"),cs=require("fs-extra"),Sr=require("path"),Ml=hr(),HO=G(),zt=dr().LMDB_ERRORS_ENUM,Pl=fO(),Eh=Ll(),qO=Ul(),Mn=ze(),vO=b(),{table:sk,resetDatabases:nk}=(fe(),Z(Ce)),BO=j(),us=Mn.INTERNAL_DBIS_NAME,FO=Mn.DBI_DEFINITION_NAME,ik="data.mdb",ok="lock.mdb",$a=".mdb",ak="-lock",dh=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=qr(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(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(vl,"pathEnvNameValidation");async function hh(e,t,r=!0){try{await cs.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Sr.join(e,t+$a);return await cs.access(s,cs.constants.R_OK|cs.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await cs.access(Sr.join(e,t,ik),cs.constants.R_OK|cs.constants.F_OK),Sr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(hh,"validateEnvironmentPath");function Bl(e,t){if(Ml.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Bl,"validateEnvDBIName");async function ck(e,t,r=!1,s=!1){vl(e,t);let n=Sr.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===zt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await cs.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(us,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(ck,"createEnvironment");async function uk(e,t,r,s=!0){vl(e,t),t=t.toString();let n=Sr.join(e,t);return sk({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(uk,"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=Sr.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++)qr(u,_[l]);return u[Mn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(GO,"openEnvironment");async function lk(e,t,r=!1){vl(e,t),t=t.toString();let s=Sr.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 cs.remove(n),await cs.remove(n===s?n+ak:Sr.join(Sr.dirname(n),ok))}a(lk,"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=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(mh,"getCachedEnvironmentName");function _k(e){Ml.validateEnv(e);let t=Object.create(null),r=qr(e,us);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==us)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(_k,"listDBIDefinitions");function kO(e){Ml.validateEnv(e);let t=[],r=qr(e,us);for(let{key:s}of r.getRange({start:!1}))s!==us&&t.push(s);return t}a(kO,"listDBIs");function dk(e,t){let s=qr(e,us).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(dk,"getDBIDefinition");function VO(e,t,r,s=!r){if(Bl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return qr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new Eh(r,s===!0),o=e.openDB(t,i),c=new Pl(r===!0,s);return o[FO]=c,qr(e,us).putSync(t,c),e.dbis[t]=o,o}throw n}}a(VO,"createDBI");function qr(e,t){if(Bl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==us?r=dk(e,t):r=new Pl,r===void 0)throw new Error(zt.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(zt.DBI_DOES_NOT_EXIST):n}return s[FO]=r,e.dbis[t]=s,s}a(qr,"openDBI");function fk(e,t){Bl(e,t),t=t.toString();let r=qr(e,t),s=r.getStats();return r[Mn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(fk,"statDBI");async function Ek(e,t){try{let r=Sr.join(e,t+$a);return(await cs.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(Ek,"environmentDataSize");function hk(e,t){if(Bl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);qr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],qr(e,us).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===zt.DBI_DOES_NOT_EXIST)VO(e,i,i!==t,i===t),s=!0;else throw o}}s&&nk()}a(mk,"initializeDBIs");$O.exports={openDBI:qr,openEnvironment:GO,createEnvironment:ck,listDBIs:kO,listDBIDefinitions:_k,createDBI:VO,dropDBI:hk,statDBI:fk,deleteEnvironment:lk,initializeDBIs:mk,TransactionCursor:dh,environmentDataSize:Ek,copyEnvironment:uk,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 pk=Ue(),Sk=KO(),Tk=QO(),Rk=JO(),Cs=hr(),Ya=dr().LMDB_ERRORS_ENUM,gk=ze(),tn=b(),Ak=$(),Ok=require("uuid"),$ne=require("lmdb"),{handleHDBError:Nk,hdb_errors:bk}=X(),{OVERFLOW_MARKER:Yne,MAX_SEARCH_KEY_LENGTH:Kne}=gk,jO=j();jO.initSync();var Hl=jO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Rh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function yk(e,t,r,s,n=Cs.getNextMonotonicTime()){Nh(e,t,r,s),gh(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 Ah(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=Cs.getIndexedValues(c),_=e.dbis[o];if(u){Hl&&_.prefetch(u.map(l=>({key:l,value:n})),ql);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Hl&&e.dbis[t].prefetch([n],ql),e.dbis[t].put(n,s,s[Ei])})}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[Ei]))&&(e[Ei]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Rh]))&&(e[Rh]=r||Cs.getNextMonotonicTime()):delete e[Rh]}a(XO,"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),pk.initializeDBIs(e,t,r)}a(gh,"initializeTransaction");async function Ck(e,t,r,s,n=Cs.getNextMonotonicTime()){Nh(e,t,r,s),gh(e,t,r);let i=new Tk,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(Ck,"updateRecords");async function Lk(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Nh(e,t,r,s)}catch(u){throw Nk(u,u.message,bk.HTTP_STATUS_CODES.BAD_REQUEST)}gh(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=Oh(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Ah(o,c,s,i,n)}a(Lk,"upsertRecords");async function Ah(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),wk(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(XO(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=Cs.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=Cs.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 Dk(e,t,r){if(Cs.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(Dk,"validateBasic");function Nh(e,t,r,s){if(Dk(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:yk,updateRecords:Ck,upsertRecords:Lk}});var hi=T((zne,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 Ls=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"}},Mk=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(),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()),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()).required();function Bk(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(Bk,"checkValidTable");function Hk(e,t){return tN.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Hk,"validateSchemaExists");function qk(e,t){let r=t.state.ancestors[0].schema;return tN.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(qk,"validateTableExists");function Fk(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(Fk,"validateSchemaName");rN.exports={common_validators:Pn,schema_regex:_o,hdb_schema_table:Mk,validateSchemaExists:Hk,validateTableExists:qk,validateSchemaName:Fk,checkValidTable:Bk,hdb_database:Pk,hdb_table:vk}});var Fl=T((Xne,sN)=>{var{common_validators:Ds}=Ls(),Wa=Fe(),Ka="is required",tt={database:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},schema:{presence:!1,format:Ds.schema_format,length:Ds.schema_length},table:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length},hash_attribute:{presence:!0,format:Ds.schema_format,length:Ds.schema_length}};function 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 Gk(e){return e=Qa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(Gk,"schema_object");function xk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.validateObject(e,tt)}a(xk,"table_object");function kk(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,Wa.validateObject(e,tt)}a(kk,"create_table_object");function Vk(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(Vk,"attribute_object");function $k(e){return e=Qa(e),tt.table.presence={message:Ka},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Wa.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");sN.exports={schema_object:Gk,create_table_object:kk,table_object:xk,attribute_object:Vk,describe_table:$k,validateTableResidence:Yk}});var iN=T((eie,nN)=>{"use strict";var Kk=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||Kk.v4(),this.schema_table=`${this.schema}.${this.table}`}};nN.exports=bh});var Gl=T((rie,oN)=>{"use strict";var Wk=iN(),yh=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}};oN.exports=yh});var cN=T((nie,aN)=>{"use strict";aN.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 xl=T((oie,fN)=>{"use strict";var Jk=b(),Ih=Ue(),jk=lo(),{getSystemSchemaPath:Xk,getSchemaPath:Zk}=ve(),eV=hi(),tV=Fl(),rV=Gl(),sV=cN(),{handleHDBError:uN,hdb_errors:_N}=X(),lN=$(),{HTTP_STATUS_CODES:nV}=_N,wh=eV.hdb_attribute,dN=[];for(let e=0;e<wh.attributes.length;e++)dN.push(wh.attributes[e].attribute);var iV="inserted";fN.exports=oV;async function oV(e){let t=tV.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,nV.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 rV(e.schema,e.table,e.attribute,e.id);try{let i=await Ih.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}`);Ih.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ih.openEnvironment(Xk(),Jk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await jk.insertRecords(o,wh.hash_attribute,dN,[n]);return sV(iV,c,{records:[n]},u)}catch(i){throw i}}a(oV,"lmdbCreateAttribute")});var Lh=T((cie,hN)=>{var{hdb_table:aV,hdb_database:EN}=Ls(),cV=Fe(),Ch=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=Ch.object({database:EN,schema:EN,table:aV,records:Ch.array().items(Ch.object().custom(lV)).required()});hN.exports=function(e){return cV.validateBySchema(e,_V)}});var za=T((_ie,pN)=>{"use strict";var sn=$(),mN=G(),lie=Lh(),{getDatabases:dV}=(fe(),Z(Ce)),{ClientError:mi}=X();pN.exports=fV;function fV(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=dV()[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(fV,"insertUpdateValidate")});var Ja=T((fie,SN)=>{"use strict";var EV=b().OPERATIONS_ENUM,Dh=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}};SN.exports=Dh});var ec=T((mie,TN)=>{"use strict";var hie=Ja(),kl=b(),Mh=$(),Uh=G(),hV=require("uuid"),{handleHDBError:ja,hdb_errors:mV}=X(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:Za}=mV;TN.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))>kl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(SV,"validateAttribute");function TV(e,t,r){if(!e.hasOwnProperty(t)||Mh.isEmptyOrZeroLength(e[t])){if(r===kl.OPERATIONS_ENUM.INSERT||r===kl.OPERATIONS_ENUM.UPSERT){e[t]=hV.v4();return}throw Uh.error("Update transaction aborted due to record with no hash value:",e),ja(new Error,Xa.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),ja(new Error,Xa.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Uh.error(e),ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Za.BAD_REQUEST,void 0,void 0,!0)}a(TV,"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(),RV=G(),AN=dr().LMDB_ERRORS_ENUM;ON.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 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){RV.error(t)}}a(gV,"cleanLMDBMap")});var nn=T((Aie,wN)=>{"use strict";var tc=require("crypto"),AV=j(),{CONFIG_PARAMS:OV}=b(),yN="aes-256-cbc",NV=32,bV=16,Bh=64,IN=32,yV=Bh+IN,bN=new Map;wN.exports={encrypt:IV,decrypt:wV,createNatsTableStreamName:CV};function IV(e){let t=tc.randomBytes(NV),r=tc.randomBytes(bV),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(IV,"encrypt");function wV(e){let t=e.substr(0,Bh),r=e.substr(Bh,IN),s=e.substr(yV,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(wV,"decrypt");function CV(e,t){let r=AV.get(OV.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(CV,"createNatsTableStreamName")});var pi=T((bie,LN)=>{"use strict";var Nie=Fr(),Vl=G(),CN=Fl(),LV=nn(),$l=$(),{handleHDBError:Yl,hdb_errors:DV}=X(),{HDB_ERROR_MSGS:Kl,HTTP_STATUS_CODES:Hh}=DV,UV=j();UV.initSync();var{getDatabases:qh}=(fe(),Z(Ce));LN.exports={describeAll:MV,describeTable:Wl,describeSchema:PV};async function MV(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(MV,"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=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){Vl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Wl,"descTable");async function PV(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(PV,"describeSchema")});var on=T((Cie,vN)=>{var vV=hi(),{callbackify:UN,promisify:BV}=require("util"),{getDatabases:MN}=(fe(),Z(Ce));vN.exports={setSchemaDataToGlobal:DN,getTableSchema:HV,getSystemSchema:qV,setSchemaDataToGlobalAsync:BV(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 HV(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(HV,"getTableSchema");function qV(){return vV}a(qV,"getSystemSchema")});var Gr=T((Die,FN)=>{"use strict";var zl=Lh(),bt=$(),FV=require("util"),Jl=ls(),GV=on(),BN=G(),{handleHDBError:Si,hdb_errors:xV}=X(),{HTTP_STATUS_CODES:Ti}=xV,kV=FV.promisify(GV.getTableSchema),VV="updated",HN="inserted",qN="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=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($V,"validation");async function YV(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(YV,"insertData");async function KV(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(VV,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(KV,"updateData");async function WV(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(WV,"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 QV(e){return bt.transformReq(e),Jl.flush(e.schema,e.table)}a(QV,"flush")});var Gh=T((Mie,kN)=>{var zV=Fe(),Fh=require("joi"),{hdb_table:JV,hdb_database:GN}=Ls(),xN={schema:GN,database:GN,table:JV},jV={date:Fh.date().iso().required()},XV={timestamp:Fh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};kN.exports=function(e,t){let r=t==="timestamp"?{...xN,...XV}:{...xN,...jV},s=Fh.object(r);return zV.validateBySchema(e,s)}});var YN=T((Pie,$N)=>{var ZV=Fe(),xh=require("joi"),{hdb_table:e$,hdb_database:VN}=Ls(),t$=xh.object({schema:VN,database:VN,table:e$,hash_values:xh.array().required(),ids:xh.array()});$N.exports=function(e){return ZV.validateBySchema(e,t$)}});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,XN)=>{"use strict";var zN=Gh(),r$=YN(),Ri=$(),QN=require("moment"),JN=G(),{promisify:s$,callbackify:n$}=require("util"),gi=b(),i$=on(),Yh=s$(i$.getTableSchema),Kh=ls(),{DeleteResponseObject:o$}=WN(),{handleHDBError:vn,hdb_errors:a$}=X(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Bn}=a$,c$="records successfully deleted",u$=n$(jN);XN.exports={delete:u$,deleteRecord:jN,deleteFilesBefore:l$,deleteAuditLogsBefore:_$};async function l$(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,jl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,jl.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(l$,"deleteFilesBefore");async function _$(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,jl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,jl.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(_$,"deleteAuditLogsBefore");async function jN(e){e.ids&&(e.hash_values=e.ids);let t=r$(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} ${c$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new o$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(jN,"deleteRecord")});var Xl=T((Fie,tb)=>{var d$=require("crypto"),ZN=9;function f$(e){let t=h$(ZN),r=eb(e+t);return t+r}a(f$,"createHash");function E$(e,t){let r=e.substr(0,ZN),s=r+eb(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 eb(e){return d$.createHash("md5").update(e).digest("hex")}a(eb,"md5");tb.exports={hash:f$,validate:E$}});var sb=T((xie,rb)=>{var Wh=Fe(),Ht={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function m$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Wh.validateObject(e,Ht)}a(m$,"addUserValidation");function p$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Wh.validateObject(e,Ht)}a(p$,"alterUserValidation");function S$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Wh.validateObject(e,Ht)}a(S$,"dropUserValidation");rb.exports={addUserValidation:m$,alterUserValidation:p$,dropUserValidation:S$}});var ke=T(($ie,ib)=>{"use strict";var{platform:Vie}=require("os"),T$="nats-server.zip",Qh="nats-server",R$=process.platform==="win32"?`${Qh}.exe`:Qh,zh="HDB",g$=/^[^\s.,*>]+$/,nb="__request__",A$=a(e=>`${e}.${nb}`,"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:zh,deliver_subject:"__HDB__.WORKQUEUE"},w$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:zh,deliver_subject:"HDB.SCHEMAQUEUE"},C$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:zh,deliver_subject:"HDB.USERQUEUE"},L$={SUCCESS:"success",ERROR:"error"},D$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},U$={TXN:"txn",MSGID:"msgid"},fo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},M$={[fo.ERR]:1,[fo.WRN]:2,[fo.INF]:3,[fo.DBG]:4,[fo.TRC]:5},P$={debug:"-D",trace:"-DVV"};ib.exports={NATS_SERVER_ZIP:T$,NATS_SERVER_NAME:Qh,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:nb,UPDATE_REMOTE_RESPONSE_STATUSES:L$,CLUSTER_STATUS_STATUSES:D$,REQUEST_SUBJECT:A$,SUBJECT_PREFIXES:U$,MSG_HEADERS:O$,LOG_LEVELS:fo,LOG_LEVEL_FLAGS:P$,LOG_LEVEL_HIERARCHY:M$}});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=Xl(),ub=require("crypto"),v$=require("moment"),B$=require("uuid").v4,qt=G(),Xh=require("path"),H$=$(),Hn=b(),q$=ab().ExtendedLicense,Eo="invalid license key format",F$="061183",G$="mofi25",x$="aes-256-cbc",k$=16,V$=32,lb=j();lb.initSync();var jh;fb.exports={validateLicense:_b,generateFingerPrint:Y$,licenseSearch:db,getLicense:Q$};function Zh(){return Xh.join(lb.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(Zh,"getLicenseDirPath");function $$(){let e=Zh();return Xh.join(e,Hn.LICENSE_FILE_NAME)}a($$,"getLicenseFilePath");function em(){let e=Zh();return Xh.join(e,Hn.REG_KEY_FILE_NAME)}a(em,"getFingerPrintFilePath");async function Y$(){let e=em();try{return await ho.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await K$();throw qt.error(`Error writing fingerprint file to ${e}`),qt.error(t),new Error("There was an error generating the fingerprint")}}a(Y$,"generateFingerPrint");async function K$(){let e=B$(),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 qt.error(`Error writing fingerprint file to ${r}`),qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(K$,"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 qt.error("empty license key passed to validate."),r;let s=em(),n=!1;try{n=ho.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=ho.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(G$),c=o[1];c=Buffer.concat([Buffer.from(c)],k$);let u=Buffer.concat([Buffer.from(i)],V$),_=ub.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(Eo),qt.error(Eo),new Error(Eo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Eo),qt.error(Eo),new Error(Eo)}else r.exp_date=l;r.exp_date<v$().valueOf()&&(r.valid_date=!1),cb.validate(o[1],`${F$}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||qt.error("Invalid licence"),r}a(_b,"validateLicense");function W$(e,t){try{let r=ub.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{qt.warn("Check old license failed")}}a(W$,"checkOldLicense");function db(){let e=new q$,t=[];try{t=ho.readFileSync($$(),"utf-8").split(Hn.NEW_LINE)}catch(r){r.code==="ENOENT"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(H$.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){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return jh=e,e}a(db,"licenseSearch");async function Q$(){return jh||await db(),jh}a(Q$,"getLicense")});var Rr=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:sY,alterUser:nY,dropUser:oY,getSuperUser:lY,userInfo:aY,listUsers:r_,listUsersExternal:cY,setUsersToGlobal:po,findAndValidateUser:Ib,getClusterUser:_Y,USERNAME_REQUIRED:pb,ALTERUSER_NOTHING_TO_UPDATE:Sb,EMPTY_PASSWORD:Tb,EMPTY_ROLE:Rb,ACTIVE_BOOLEAN:gb};var Ab=Gr(),z$=Ai(),sm=Xl(),Ob=sb(),Nb=Fr(),nm=an(),Tr=$(),bb=require("validate.js"),_e=G(),{promisify:J$}=require("util"),im=nn(),Eb=b(),hb=ke(),j$=Er(),Jie=j(),jie=rc(),X$=hi(),{table:Xie}=(fe(),Z(Ce)),{handleHDBError:Us,hdb_errors:Z$}=X(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:tm,HDB_ERROR_MSGS:mo}=Z$,{UserEventMsg:om}=_s(),rm=require("lodash"),{server:am}=(Mr(),Z(to)),eY=G();am.getUser=Ib;var yb={username:!0,active:!0,role:!0,password:!0},mb=new Map,t_=Nb.searchByValue,tY=Nb.searchByHash,rY=J$(z$.delete);async function sY(e){let t=bb.cleanAttributes(e,yb),r=Ob.addUserValidation(t);if(r)throw Us(new Error,r.message,Ms.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 Us(new Error,mo.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Us(new Error,mo.DUP_ROLES_FOUND(t.role),Ms.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 Us(new Error,mo.USER_ALREADY_EXISTS(t.username),Ms.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(sY,"addUser");async function nY(e){let t=bb.cleanAttributes(e,yb);if(Tr.isEmptyOrZeroLength(t.username))throw new Error(pb);if(Tr.isEmptyOrZeroLength(t.password)&&Tr.isEmptyOrZeroLength(t.role)&&Tr.isEmptyOrZeroLength(t.active))throw new Error(Sb);if(!Tr.isEmpty(t.password)&&Tr.isEmptyOrZeroLength(t.password.trim()))throw new Error(Tb);if(!Tr.isEmpty(t.active)&&!Tr.isBoolean(t.active))throw new Error(gb);let r=iY(t.username);if(!Tr.isEmpty(t.password)&&!Tr.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),Us(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=mo.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Us(new Error,c,Ms.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(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=Ob.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Tr.isEmpty(global.hdb_users.get(e.username)))throw Us(new Error,mo.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await rY(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(oY,"dropUser");async function aY(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 tY(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(aY,"userInfo");async function cY(){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(cY,"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],uY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Tr.errorizeMessage(e)}return null}a(r_,"listUsers");function uY(e){try{if(!e){_e.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(X$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(uY,"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 Us(new Error,tm.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Us(new Error,tm.USER_INACTIVE,Ms.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 Us(new Error,tm.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Ib,"findAndValidateUser");async function lY(){global.hdb_users||await po();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(lY,"getSuperUser");async function _Y(){let e=await r_(),t=j$.getConfigFromFile(Eb.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Tr.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(_Y,"getClusterUser");var wb=[];am.invalidateUser=function(e){for(let t of wb)try{t(e)}catch(r){eY.error("Error invalidating user",r)}};am.onInvalidatedUser=function(e){wb.push(e)}});var nc=T((soe,Mb)=>{"use strict";var Oi=G(),gr=b(),dY=NN(),toe=on(),roe=pi(),fY=Rr(),{validateEvent:Lb}=_s(),sc=ls(),EY=require("process"),{resetDatabases:hY}=(fe(),Z(Ce)),mY={[gr.ITC_EVENT_TYPES.SCHEMA]:pY,[gr.ITC_EVENT_TYPES.USER]:Ub};async function pY(e){let t=Lb(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await dY(e.message),await SY(e.message)}a(pY,"schemaHandler");async function SY(e){try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=hY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(SY,"syncSchemaMetadata");var Db=[];async function Ub(e){try{try{sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),sc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Lb(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${EY.pid} received user event:`,e),await fY.setUsersToGlobal();for(let r of Db)r()}catch(t){Oi.error(t)}}a(Ub,"userHandler");Ub.addListener=function(e){Db.push(e)};Mb.exports=mY});var _s=T((uoe,vb)=>{"use strict";var ioe=G(),cm=$(),TY=b(),{ITC_ERRORS:ic}=dr(),{parentPort:ooe,threadId:RY,isMainThread:gY,workerData:aoe}=require("worker_threads"),{onMessageFromWorkers:AY,broadcast:coe,broadcastWithAcknowledgement:OY}=Ze();vb.exports={sendItcEvent:NY,validateEvent:Pb,SchemaEventMsg:bY,UserEventMsg:yY};var s_;AY(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 NY(e){return!gY&&e.message&&(e.message.originator=RY),OY(e)}a(NY,"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(TY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ic.INVALID_EVENT(e.type)}a(Pb,"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((doe,Fb)=>{"use strict";var Bb=b(),_oe=$(),n_=G(),Hb=gN(),So,{sendItcEvent:qb}=_s();function IY(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(IY,"signalSchemaChange");function wY(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(wY,"signalUserChange");Fb.exports={signalSchemaChange:IY,signalUserChange:wY}});var i_=T((Eoe,xb)=>{"use strict";var Gb=$(),CY=b(),LY=G(),DY=xl(),UY=Gl(),MY=an(),{SchemaEventMsg:PY}=_s(),vY="already exists in";xb.exports=BY;async function BY(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 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 qY(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 qY(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(qY,"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 FY=To(),GY=b().OPERATIONS_ENUM,lm=class extends FY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(GY.INSERT,r,s,n,i),this.records=t}};Vb.exports=lm});var Kb=T((Roe,Yb)=>{"use strict";var xY=To(),kY=b().OPERATIONS_ENUM,_m=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}};Yb.exports=_m});var Qb=T((Aoe,Wb)=>{"use strict";var VY=To(),$Y=b().OPERATIONS_ENUM,dm=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}};Wb.exports=dm});var Jb=T((Noe,zb)=>{"use strict";var YY=To(),KY=b().OPERATIONS_ENUM,fm=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}};zb.exports=fm});var oc=T((Ioe,ey)=>{"use strict";var yoe=require("path"),jb=Ue(),WY=$b(),QY=Kb(),zY=Qb(),JY=Jb(),Ro=ze(),Xb=$(),{CONFIG_PARAMS:jY}=b(),Zb=j();Zb.initSync();var o_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:XY}=ve();ey.exports=ZY;async function ZY(e,t){if(Zb.get(jY.LOGGING_AUDITLOG)===!1)return;let r=XY(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,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),Xb.isEmpty(n.user_name)||s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Ro.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(ZY,"writeTransaction");function e1(e,t){let r=Xb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===o_.INSERT)return new WY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.UPDATE)return new QY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.UPSERT)return new zY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===o_.DELETE)return new JY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(e1,"createTransactionObject")});var Em=T((Loe,ty)=>{"use strict";var t1=za(),Coe=Ja(),ac=b(),r1=ec(),s1=lo().insertRecords,n1=Ue(),i1=G(),o1=i_(),{getSchemaPath:a1}=ve(),c1=oc();ty.exports=u1;async function u1(e){try{let{schema_table:t,attributes:r}=t1(e);r1(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 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 ny=T((Uoe,sy)=>{"use strict";var ry=b(),l1=Em(),_1=Ja(),d1=require("fs-extra"),{getSchemaPath:f1}=ve();sy.exports=E1;async function E1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new _1(ry.SYSTEM_SCHEMA_NAME,ry.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await l1(r),await d1.mkdirp(f1(e.schema))}a(E1,"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=hr(),pm=dr().LMDB_ERRORS_ENUM,h1=ze(),cy=G(),Boe=$(),m1=require("lmdb"),p1=oy(),S1=b(),{OVERFLOW_MARKER:Hoe,MAX_SEARCH_KEY_LENGTH:qoe}=h1,T1=S1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function R1(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 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=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(R1,"deleteRecords");uy.exports={deleteRecords:R1}});var cc=T((xoe,dy)=>{"use strict";var go=$(),g1=ly(),A1=Ue(),{getSchemaPath:O1}=ve(),N1=oc(),b1=G();dy.exports=y1;async function y1(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=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 _y(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(y1,"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 I1=b(),Voe=hr();function Sm(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(Sm,"parseRow");function w1(e,t,r,s){let n=Sm(r,e);s.push(n)}a(w1,"searchAll");function C1(e,t,r,s){let n=Sm(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 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 D1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(D1,"endsWith");function U1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(U1,"contains");function M1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(M1,"greaterThanCompare");function P1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(P1,"greaterThanEqualCompare");function v1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(v1,"lessThanCompare");function B1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(B1,"lessThanEqualCompare");fy.exports={parseRow:Sm,searchAll:w1,searchAllToMap:C1,iterateDBI:L1,endsWith:D1,contains:U1,greaterThanCompare:M1,greaterThanEqualCompare:P1,lessThanCompare:v1,lessThanEqualCompare:B1,pushResults:Ni}});var Ao=T((zoe,Ry)=>{"use strict";var qn=Ue(),Koe=G(),Ar=hr(),a_=ze(),Je=dr().LMDB_ERRORS_ENUM,Woe=$(),H1=b(),c_=Tm(),{parseRow:q1}=c_,Qoe=require("lmdb"),{OVERFLOW_MARKER:Ey,MAX_SEARCH_KEY_LENGTH:F1}=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 G1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);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(_=>q1(_.value,r))))}a(G1,"searchAll");function x1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);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(x1,"searchAllToMap");function k1(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=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(k1,"iterateDBI");function V1(e,t){if(Ar.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 Fn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=Ar.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a($1,"equals");function Y1(e,t,r){return Fn(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 Fn(e,r,s),bi(e,null,r,(c,u)=>{s=Ar.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(K1,"startsWith");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){return py(e,t,r,s,n,i,o,!0)}a(W1,"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 Q1(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(Q1,"greaterThan");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,!1,!1)}a(z1,"greaterThanEqual");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,!0)}a(J1,"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 X1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return uc(e,t,r,s,n,i,o,c)}a(X1,"between");function Z1(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(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(Z1,"searchByHash");function eK(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(eK,"checkHashExists");function tK(e,t,r,s,n=[]){return Ty(e,t,r,s,n),Sy(e,t,r,s,n).map(i=>i[1])}a(tK,"batchSearchByHash");function rK(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(rK,"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(Ar.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(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>F1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(Fn,"validateComparisonFunctions");function lc(e,t){return t.length===1&&H1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=qn.listDBIs(e)),t}a(lc,"setGetWholeRowAttributes");Ry.exports={searchAll:G1,searchAllToMap:x1,count:Y1,countAll:V1,equals:$1,startsWith:K1,endsWith:W1,contains:py,searchByHash:Z1,setGetWholeRowAttributes:lc,batchSearchByHash:tK,batchSearchByHashToMap:rK,checkHashExists:eK,iterateDBI:k1,greaterThan:Q1,greaterThanEqual:z1,lessThan:J1,lessThanEqual:j1,between:X1}});var Oo=T((joe,by)=>{var gy=require("lodash"),Ay=Fe(),Be=require("joi"),sK=$(),{hdb_schema_table:l_,checkValidTable:Oy,hdb_table:Ny,hdb_database:__}=Ls(),{handleHDBError:nK,hdb_errors:iK}=X(),{getDatabases:oK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:aK}=iK,cK=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)}),uK=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,cK);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,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=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 lK=Ue(),_K=Oo(),{getSchemaPath:dK}=ve();yy.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 gm=T((tae,Iy)=>{"use strict";var EK=Ao(),hK=Rm();Iy.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 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(),pK=Ao(),SK=Rm();Cy.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 Ps=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 Ft=Ao(),RK=Ue(),gK=$(),ae=ze(),yi=b(),AK=hi(),Uy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:OK}=ve(),cn=yi.SEARCH_WILDCARDS;async function NK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=AK[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(NK,"prepSearch");async function Py(e,t,r,s){let n=OK(e.schema,e.table),i=await RK.openEnvironment(n,e.table),o=vy(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(bK(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?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.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 ae.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(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 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 By(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?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Uy.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Uy.UNKNOWN_SEARCH_TYPE)}}a(By,"createSearchTypeFromSearchObject");Hy.exports={executeSearch:Py,createSearchTypeFromSearchObject:By,prepSearch:NK,searchByType:vy}});var Fy=T((fae,qy)=>{"use strict";var dae=Ps(),yK=Oo(),IK=$(),wK=b(),CK=d_();qy.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 _c=T((mae,Gy)=>{"use strict";var hae=Ps(),DK=Oo(),UK=$(),MK=b(),PK=d_();Gy.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 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,BK=Ps(),HK=Oo(),Im=Ao(),f_=ze(),{Resource:Aae}=(os(),Z(ME)),Yy=d_(),qK=Tm(),FK=require("lodash"),{getSchemaPath:GK}=ve(),Vy=Ue(),{handleHDBError:xK,hdb_errors:kK}=X(),{HTTP_STATUS_CODES:VK}=kK,$K=1e8;Ky.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 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=FK.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=$K}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=>qK.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(YK,"lmdbSearchByConditions");async function $y(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===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 KK=b().OPERATIONS_ENUM,wm=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}};Qy.exports=wm});var Cm=T((Iae,rI)=>{"use strict";var Xy=Ps(),Zy=dc(),eI=_c(),tI=cc(),Jt=b(),zy=$(),Jy=Ue(),{getTransactionAuditStorePath:WK,getSchemaPath:QK}=ve(),jy=G();rI.exports=zK;async function zK(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 JK(e),await jK(e);let t=QK(e.schema,e.table);try{await Jy.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 Jy.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(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await 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(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await tI(n)}a(JK,"deleteAttributesFromSystem");async function jK(e){let t=new Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await 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(Jt.SYSTEM_SCHEMA_NAME,Jt.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 XK=require("fs-extra"),ZK=Ps(),eW=No(),tW=dc(),rW=Cm(),sW=cc(),nW=gm(),iW=_c(),un=b(),{getSchemaPath:oW}=ve(),{handleHDBError:aW,hdb_errors:cW}=X(),{HDB_ERROR_MSGS:uW,HTTP_STATUS_CODES:lW}=cW;sI.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 XK.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 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 fW=require("fs-extra"),E_=Ue(),{getTransactionAuditStorePath:EW}=ve(),Um=ze(),Mae=Dm();oI.exports=hW;async function hW(e){let t;try{let r=EW(e.schema,e.table);await fW.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(hW,"createTransactionsAuditEnvironment")});var _I=T((Bae,lI)=>{"use strict";var Mm=b(),cI=Ue(),mW=lo(),{getSystemSchemaPath:pW,getSchemaPath:SW}=ve(),TW=hi(),RW=xl(),Pm=Gl(),gW=G(),AW=aI(),Bm=TW.hdb_table,uI=[];for(let e=0;e<Bm.attributes.length;e++)uI.push(Bm.attributes[e].attribute);lI.exports=OW;async function OW(e,t){let r=SW(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(pW(),Mm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await mW.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 AW(t)}catch(o){throw o}}a(OW,"lmdbCreateTable");async function vm(e){try{await RW(e)}catch(t){gW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(vm,"createAttribute")});var fI=T((qae,dI)=>{"use strict";var NW=za(),bW=ec(),yW=i_(),fc=b(),IW=lo().updateRecords,wW=Ue(),{getSchemaPath:CW}=ve(),LW=oc(),DW=G();dI.exports=UW;async function UW(e){try{let{schema_table:t,attributes:r}=NW(e);bW(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 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 hI=T((Gae,EI)=>{"use strict";var MW=b().OPERATIONS_ENUM,Hm=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}};EI.exports=Hm});var pI=T((Vae,mI)=>{"use strict";var kae=hI(),PW=za(),vW=ec(),BW=i_(),Ec=b(),HW=lo().upsertRecords,qW=Ue(),{getSchemaPath:FW}=ve(),GW=oc(),xW=G(),{handleHDBError:kW,hdb_errors:VW}=X();mI.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!==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 BW(e.hdb_auth_header,r,s),i=FW(e.schema,e.table),o=await qW.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 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:YW}=ve(),zae=TI(),hc=ze(),KW=$(),AI=gI(),WW=require("util").promisify,QW=WW(setTimeout),zW=1e4,JW=100;OI.exports=jW;async function jW(e){let t=YW(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 XW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await QW(JW);while(n.transactions_deleted>0);return i}a(jW,"deleteAuditLogsBefore");async function XW(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];KW.isEmpty(c)||(n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[hc.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>zW)break}return await n,r}catch(s){throw s}}a(XW,"deleteTransactions")});var yI=T((Xae,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 ZW=Ps(),eQ=dc(),ece=yI(),vs=b(),tQ=$(),km=Ue(),rQ=hi(),sQ=_c(),nQ=cc(),{getSchemaPath:iQ}=ve();II.exports=oQ;async function oQ(e,t=!0){let r;e.schema===vs.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 km.openEnvironment(n,e.table);return t===!0&&await aQ(e,i,r.hash_attribute),km.dropDBI(i,e.attribute),s}a(oQ,"lmdbDropAttribute");async function aQ(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(aQ,"removeAttributeFromAllObjects");async function cQ(e){let t=new ZW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await sQ(t)).filter(o=>o[vs.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[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new eQ(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return nQ(i)}a(cQ,"dropAttributeFromSystem")});var PI=T((nce,MI)=>{"use strict";var Vm=Ue(),bo=ze(),sce=hr(),$m=b(),CI=$(),{getTransactionAuditStorePath:uQ}=ve(),lQ=Ao(),h_=To(),_Q=G();MI.exports=dQ;async function dQ(e){let t=uQ(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,EQ(r,e.search_values,n);case $m.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return fQ(r,e.search_values);default:return LI(r)}}a(dQ,"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 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[bo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,UI(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,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(EQ,"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){_Q.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:hQ}=(fe(),Z(Ce));vI.exports={writeTransaction:mQ};async function mQ(e,t,r){return hQ({database:e,table:t}).transaction(r)}a(mQ,"writeTransaction")});var GI=T((lce,FI)=>{"use strict";var{getSchemaPath:HI}=ve(),qI=Ue();FI.exports={flush:pQ,resetReadTxn:SQ};async function pQ(e,t){return(await qI.openEnvironment(HI(e,t),t.toString())).flushed}a(pQ,"flush");async function SQ(e,t){try{(await qI.openEnvironment(HI(e,t),t.toString())).resetReadTxn()}catch{}}a(SQ,"resetReadTxn")});var $I=T((dce,VI)=>{"use strict";var{Readable:TQ}=require("stream"),{getDatabases:RQ}=(fe(),Z(Ce)),{readSync:gQ,openSync:AQ,createReadStream:xI}=require("fs"),{open:OQ}=require("lmdb"),kI=Ll(),NQ=Ul(),{AUDIT_STORE_OPTIONS:bQ}=(oo(),Z(bO)),{INTERNAL_DBIS_NAME:yQ,AUDIT_STORE_NAME:IQ}=ze();VI.exports=CQ;var Ym=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 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++%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,F=new kI(!Q,Q);await S(I,F)}e.include_audit&&await S(IQ,Object.assign({},bQ)),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=AQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(Ym);gQ(c,_,0,Ym),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=xI(null,{fd:c,start:Ym}),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 WI=T((Ece,KI)=>{"use strict";var LQ=G(),{handleHDBError:DQ}=X(),UQ=_O(),MQ=xl(),PQ=Em(),vQ=ny(),BQ=cc(),HQ=gm(),qQ=Ly(),FQ=Fy(),GQ=_c(),xQ=Wy(),kQ=nI(),VQ=_I(),$Q=fI(),YQ=pI(),KQ=NI(),WQ=Cm(),QQ=wI(),zQ=PI(),JQ=BI(),YI=GI(),jQ=$I(),Km=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 qQ(t)}async getDataByValue(t,r){return await FQ(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 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=Bs(e),s=Jm(e,r);if(!r)throw new ds.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&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 Bs(e){let t=e.database||e.schema||ZQ,r=Es()[t];if(!r)throw(0,ds.handleHDBError)(new Error,XQ.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*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,m_,ds,ZI,ew,hs,Wm,Qm,tw,XQ,ZQ,ez,tz,QI,zm,sw=Te(()=>{"use strict";XI=D(WI()),m_=D(Oo()),ds=D(X());fe();ZI=D(za()),ew=D(ec()),hs=D(b()),Wm=D(an()),Qm=D(_s()),tw=D($());di();hl();({HDB_ERROR_MSGS:XQ}=ds.hdb_errors),ZQ="data",ez=1e4,tz=10,zm=class extends XI.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,ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Bs(t);if(!s)throw new ds.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select: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 ds.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Bs(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){Bs(t).dropTable()}createSchema(t){return mc({database:t.schema,table:null}),Wm.signalSchemaChange(new Qm.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await jm(t.schema),Wm.signalSchemaChange(new Qm.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,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=Es()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=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=Es()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return JI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Es()[t.schema][t.table];if(!r.createdTimeProperty)throw new ds.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:hs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,tw.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?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&&hs.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=Bs(t);if(!n)throw new ds.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===hs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Jm(t,n)})}async getDataByValue(t,r){let s=new Map,n=Bs(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){Bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Bs(t),s={};switch(t.search_type){case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case hs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of 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(Jm,"getSelect");a(zI,"getRecords");a(Bs,"getTable");a(JI,"createDeleteResponse");a(jI,"groupRecordsInHistory")});var ls=T((Rce,nw)=>{"use strict";var{ResourceBridge:rz}=(sw(),Z(rw)),sz=j();sz.initSync();var p_;function nz(){return p_||(p_=new rz,p_)}a(nz,"getBridge");nw.exports=nz()});var cw=T((Ace,aw)=>{"use strict";var iw=require("lodash"),pc=require("mathjs"),iz=require("jsonata"),ow=$();aw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?iw.uniqWith(e,iw.isEqual):e,searchJSON:oz,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 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(ow.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),ow.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 lw=T((Nce,uw)=>{"use strict";var rt=require("moment"),Xm="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(Xm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Xm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Xm)}});var Ew=T((bce,fw)=>{"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"),_w=b(),de=$();fw.exports={geoArea:mz,geoLength:pz,geoCircle:Sz,geoDifference:Tz,geoDistance:dw,geoNear:Rz,geoContains:gz,geoEqual:Az,geoCrosses:Oz,geoConvert:Nz};var Zm="geo1 is required",ep="geo2 is required";function mz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),az.default(e)}a(mz,"geoArea");function pz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),cz.default(e,{units:t||"kilometers"})}a(pz,"geoLength");function Sz(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)),uz.default(e,t,{units:r||"kilometers"})}a(Sz,"geoCircle");function Tz(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)),lz(e,t)}a(Tz,"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)),_z.default(e,t,{units:r||"kilometers"})}a(dw,"geoDistance");function Rz(e,t,r,s){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return dw(e,t,s)<=r}a(Rz,"geoNear");function gz(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)),dz.default(e,t)}a(gz,"geoContains");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,"geoEqual");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,"geoCrosses");function Nz(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 hz[t](e,r)}a(Nz,"geoConvert")});var S_=T((Ice,hw)=>{var Ii=cw(),Or=lw(),Hs=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=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Hs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Hs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Hs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Hs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Hs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Hs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Hs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Hs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Hs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Hs.geoNear}});var Tw=T((wce,Sw)=>{"use strict";var Tc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var bz=S_(),mw=require("clone"),T_=require("recursive-iterator"),re=G(),ie=$(),yo=ls(),yz=b(),{hdb_errors:Iz}=X(),{getDatabases:pw}=(fe(),Z(Ce)),wz="IS NULL",ms="There was a problem performing this search. Please check the logs and try again.";bz(yt);var tp=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ms)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ms)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ms)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ms)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ms)}}_getColumns(){let t=new 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(ie.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),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new 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(!ie.isEmpty(yz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await yt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(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(ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(wz)>-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),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await yo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await yo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ms)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await yo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ms)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await yo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ms)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof yt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new yt.yy.FuncValue:new yt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await yt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new 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(ms)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await yo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await yt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(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 yo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ms)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Sw.exports=tp});var Fr=T((Lce,Rw)=>{"use strict";var Cz=uO();Rw.exports={searchByConditions:Dz,searchByHash:Uz,searchByValue:Mz,search:Pz};var rp=ls(),{transformReq:sp}=$(),Lz=Tw();async function Dz(e){return sp(e),rp.searchByConditions(e)}a(Dz,"searchByConditions");async function Uz(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(Uz,"searchByHash");async function Mz(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(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 R_=T((Uce,gw)=>{"use strict";var vz=ls();gw.exports={writeTransaction:Bz};function Bz(e,t,r){return vz.writeTransaction(e,t,r)}a(Bz,"writeTransaction")});var bw=T((vce,Nw)=>{"use strict";var Hz=Fr(),qz=on(),Aw=G(),Fz=Gr(),Pce=R_(),Gz=require("clone"),ip=require("alasql"),xz=S_(),Ow=require("util"),kz=Ow.promisify(qz.getTableSchema),Vz=Ow.promisify(Hz.search),$z=b(),np=$();xz(ip);Nw.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);np.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Gz(n),c=np.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=ip.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]=ip.compile(`SELECT ${r.expression.toString()} AS [${$z.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Aw.error(t),new Error(Yz)}}a(Wz,"createUpdateRecord");function Qz(e,t){return np.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 Fz.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(zz,"updateRecords")});var Iw=T((Fce,yw)=>{var Jz=require("alasql"),jz=Fr(),Xz=G(),Zz=ls(),ap=require("util"),op=$(),eJ=b(),tJ=on(),Hce=R_(),qce=Gr(),rJ="record",sJ="successfully deleted",nJ=ap.callbackify(cJ),iJ=ap.promisify(jz.search),oJ=ap.promisify(tJ.getTableSchema);yw.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);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=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 op.isEmptyOrZeroLength(_.message)&&(_.message=aJ(_)),delete _.txn_time,_}catch(_){throw Xz.error(_),_.hdb_code?_.message:_}}a(cJ,"convertDelete")});var Uw=T((xce,Dw)=>{"use strict";var uJ=pi(),{hdb_errors:ww}=X(),{getDatabases:Cw}=(fe(),Z(Ce));Dw.exports={checkSchemaExists:Lw,checkSchemaTableExists:lJ,schema_describe:uJ};async function Lw(e){if(!Cw()[e])return ww.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Lw,"checkSchemaExists");async function lJ(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(lJ,"checkSchemaTableExists")});var Rc=T((Vce,_J)=>{_J.exports={name:"harperdb",version:"4.2.2",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.425.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var N_={};Qe(N_,{addAnalyticsListener:()=>Oc,recordAction:()=>Nr,recordActionBinary:()=>xr,setAnalyticsEnabled:()=>dJ});function dJ(e){kw=e}function Nr(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_||fJ()}function xr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Oc(e){Yw.push(e)}function fJ(){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 EJ(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 Pt=se.count;for(let Pe in te){let gt=te[Pe];typeof gt=="number"&&(se[Pe]=(se[Pe]*Pt+gt*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[A]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await 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,gt)=>Pe.value>gt.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of Kw){let gt=A*Pe;for(;N<gt;)Q=p[Y++],N+=Q.count,Y===1&&N--;let Zr=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-Zr.value)*(N-gt)/Q.count)}let[F,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,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 pJ(){zw=!0;let e=(0,Ac.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await EJ(Vw,e),await vw(lp(),hJ),await vw(Qw(),mJ)},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||pJ(),SJ&&(jw=RJ(r))}async function RJ(e){if(await jw,!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>TJ){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)+`
|
|
6
|
-
`,t)}var wi,Gw,xw,gc,cp,A_,Ac,up,O_,kw,g_,Vw,$w,Yw,Kw,Mw,Pw,Ww,
|
|
1
|
+
"use strict";var XB=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?XB(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$/,jH="d",XH=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),jq={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"},Xq=111,Zq=`\r
|
|
2
|
+
`,eF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},tF=["*","%"],rF="unauthorized_access",sF="func_val",nF={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},iF={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},oF={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"},aF={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},cF={HTTP:"http"},uF={STOPPED:"stopped",ONLINE:"online"},lF="3.x.x",_F={SUCCESS:"success",FAILURE:"failure"},dF={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};Tg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:ug,HDB_SUPPORT_URL:_g,HDB_PRICING_URL:vH,SUPPORT_HELP_MSG:BH,LICENSE_HELP_MSG:dg,HDB_PROC_NAME:ag,HDB_PROC_DESCRIPTOR:oE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Wu,CLUSTERING_HUB_PROC_DESCRIPTOR:Ku,SYSTEM_SCHEMA_NAME:tq,HASH_FOLDER_NAME:rq,HDB_HOME_DIR_NAME:sq,UPDATE_FILE_NAME:aq,LICENSE_KEY_DIR_NAME:iq,BOOT_PROPS_FILE_NAME:oq,JOB_TYPE_ENUM:qq,JOB_STATUS_ENUM:Cq,SYSTEM_TABLE_NAMES:Oq,SYSTEM_TABLE_HASH_ATTRIBUTES:Nq,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:Lq,S3_BUCKET_AUTH_KEYS:Dq,VALID_SQL_OPS_ENUM:Uq,GEO_CONVERSION_ENUM:Pq,HDB_SETTINGS_NAMES:hg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:vq,SERVICE_ACTIONS_ENUM:Mq,CLUSTER_MESSAGE_TYPE_ENUM:Fq,CLUSTER_CONNECTION_DIRECTION_ENUM:Gq,CLUSTER_EVENTS_DEFS_ENUM:Vq,PERIOD_REGEX:VH,DOUBLE_PERIOD_REGEX:$H,UNICODE_PERIOD:YH,FORWARD_SLASH_REGEX:KH,UNICODE_FORWARD_SLASH:WH,ESCAPED_FORWARD_SLASH_REGEX:QH,ESCAPED_PERIOD_REGEX:zH,ESCAPED_DOUBLE_PERIOD_REGEX:JH,REG_KEY_FILE_NAME:Iq,RESTART_TIMEOUT_MS:lq,HDB_FILE_PERMISSIONS:_q,DATABASES_DIR_NAME:Eq,LEGACY_DATABASES_DIR_NAME:hq,TRANSACTIONS_DIR_NAME:mq,LIMIT_COUNT_NAME:pq,ID_ATTRIBUTE_STRING:Sq,INSERT_MODULE_ENUM:gq,UPGRADE_JSON_FIELD_NAMES_ENUM:Aq,RESTART_CODE:cq,RESTART_CODE_NUM:uq,CLUSTER_OPERATIONS:ga,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:yq,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:bq,CLUSTERING_MESSAGE_TYPES:jq,HDB_FILE_SUFFIX:nq,BLOB_FOLDER_NAME:dq,HDB_TRASH_DIR:fq,ORIGINATOR_SET_VALUE:Xq,LICENSE_VALUES:xq,RAM_ALLOCATION_ENUM:kq,TIME_STAMP_NAMES_ENUM:pg,TIME_STAMP_NAMES:Qq,PERMS_UPDATE_RELEASE_TIMESTAMP:zq,SEARCH_NOT_FOUND_MESSAGE:HH,SEARCH_ATTRIBUTE_NOT_FOUND:qH,LICENSE_ROLE_DENIED_RESPONSE:FH,LICENSE_MAX_CONNS_REACHED:GH,BASIC_LICENSE_MAX_NON_CU_ROLES:lg,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:PH,VALUE_SEARCH_COMPARATORS:Sg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Jq,LICENSE_FILE_NAME:wq,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:$q,NEW_LINE:Zq,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kH,MOMENT_DAYS_TAG:jH,API_TURNOVER_SEC:XH,LOOPBACK:xH,CODE_EXTENSION:Yu,WILDCARD_SEARCH_VALUE:ZH,NODE_ERROR_CODES:Yq,JAVASCRIPT_EXTENSION:og,PERMS_CRUD_ENUM:eF,UNAUTHORIZED_PERMISSION_NAME:rF,SEARCH_WILDCARDS:tF,FUNC_VAL:sF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:nF,JWT_ENUM:iF,CLUSTERING_FLAG:Wq,ITC_EVENT_TYPES:oF,CUSTOM_FUNCTION_PROC_NAME:cg,CUSTOM_FUNCTION_PROC_DESCRIPTOR:$u,SERVICES:aF,THREAD_TYPES:cF,MEM_SETTING_KEY:eq,HDB_RESTART_SCRIPT:TH,PROCESS_DESCRIPTORS:bH,SERVICE_SERVERS:LH,SERVICE_SERVERS_CWD:iE,PROCESS_DESCRIPTORS_VALIDATE:wH,LAUNCH_SERVICE_SCRIPTS:DH,LOG_LEVELS:IH,PROCESS_NAME_ENV_PROP:Tq,LOG_NAMES:yH,PM2_PROCESS_STATUSES:uF,CONFIG_PARAM_MAP:mg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:mH,HDB_DEFAULT_CONFIG_FILE:pH,ROLE_TYPES_ENUM:UH,BOOT_PROP_PARAMS:fg,INSTALL_PROMPTS:Rq,HDB_ROOT_DIR_NAME:SH,CLUSTERING_PROCESSES:CH,FOREGROUND_PID_FILE:AH,PACKAGE_ROOT:Ln,PRE_4_0_0_VERSION:lF,DATABASES_PARAM_CONFIG:Hq,METADATA_PROPERTY:Kq,AUTH_AUDIT_STATUS:_F,AUTH_AUDIT_TYPES:dF,HDB_PID_FILE:OH,DEFAULT_DATABASE_NAME:NH,LEGACY_CONFIG_PARAMS:Bq};ig()});var aE=T((hse,Ag)=>{"use strict";var Rg=require("minimist");Ag.exports=fF;function fF(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=gg(process.env),s=gg(Rg(process.argv))):(r=process.env,s=Rg(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(fF,"assignCMDENVVariables");function gg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(gg,"objKeysToLowerCase")});var G=T((pse,EE)=>{"use strict";var oi=require("fs-extra"),{workerData:EF,threadId:hF}=require("worker_threads"),js=require("path"),bg=require("yaml"),yg=require("properties-reader"),ut=b(),Og=aE(),mF=require("os"),{PACKAGE_ROOT:uE}=b(),{_assignPackageExport:pF}=require("../../index"),Oa={};for(let e in console)Oa[e]||(Oa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ig={STDOUT:"stdOut",STDERR:"stdErr"},SF=js.join(uE,"logs"),TF=js.join(uE,"config/yaml/",ut.HDB_DEFAULT_CONFIG_FILE),RF=1e4,Js,ys,$t,Qu,zu,Na,Xi,Aa;Aa===void 0&&wg();EE.exports={notify:Dg,fatal:Ug,error:ba,warn:fE,info:Ju,debug:dE,trace:_E,setLogLevel:IF,log_level:$t,loggerWithTag:gF,suppressLogging:AF,initLogSettings:wg,setupConsoleLogging:Cg,logCustomLevel:bF,closeLogFile:lE,getLogFilePath:()=>Na,OUTPUTS:Ig,AuthAuditLog:LF};pF("logger",EE.exports);function wg(e=!1){try{if(Aa===void 0||e){lE();let t=yF(),r=Og(["ROOTPATH"]);try{Aa=yg(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!oi.pathExistsSync(js.join(r.ROOTPATH,ut.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:zu,to_file:Js,to_stream:ys}=wF(r.ROOTPATH?js.join(r.ROOTPATH,ut.HDB_CONFIG_FILE):Aa.get("settings_path"))),Qu=ut.LOG_NAMES.HDB,Na=js.join(zu,Qu)}}catch(t){if(Aa=void 0,t.code===ut.NODE_ERROR_CODES.ENOENT){let r=Og(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){$t=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}=CF();Js=Js===void 0?n:Js,Js=Ng(Js),ys=ys===void 0?i:ys,ys=Ng(ys),$t=$t===void 0?s:$t,zu=SF,Qu=ut.LOG_NAMES.INSTALL,Na=js.join(zu,Qu);return}throw ba("Error initializing log settings"),ba(t),t}process.env.DEV_MODE&&(ys=!0),Cg()}a(wg,"initLogSettings");var cE=!0;function Cg(){ji("error",ba),ji("warn",fE),ji("log",Ju),ji("info",Ju),ji("debug",dE),ji("trace",_E)}a(Cg,"setupConsoleLogging");function ji(e,t){console[e]=function(...r){if(cE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Oa[e](...r)}}a(ji,"logConsole");function gF(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(Dg),fatal:r(Ug),error:r(ba),warn:r(fE),info:r(Ju),debug:r(dE),trace:r(_E)};function r(s){return function(...n){return s(t,...n)}}}a(gF,"loggerWithTag");function AF(e){try{cE=!1,e()}finally{cE=!0}}a(AF,"suppressLogging");var OF=EF?.name?.replace(/ /g,"-")||"main";function Xs(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||OF+"/"+hF);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(Xs,"createLogRecord");function ya(e){Js&&Lg(e),ys&&process.stdout.write(e)}a(ya,"logStdOut");function ju(e){Js&&Lg(e),ys&&process.stderr.write(e)}a(ju,"logStdErr");function Lg(e){NF(),Xi?oi.appendFileSync(Xi,e):Oa.log(e)}a(Lg,"logToFile");function lE(){try{oi.closeSync(Xi)}catch{}Xi=null}a(lE,"closeLogFile");function NF(){if(!Xi){try{if(!Na)debugger;Xi=oi.openSync(Na,"a")}catch(e){Oa.error(e)}setTimeout(()=>{lE()},RF).unref()}}a(NF,"openLogFile");function Ju(...e){Yt[$t]<=Yt.info&&ya(Xs("info",e))}a(Ju,"info");function _E(...e){Yt[$t]<=Yt.trace&&ya(Xs("trace",e))}a(_E,"trace");function ba(...e){Yt[$t]<=Yt.error&&ju(Xs("error",e))}a(ba,"error");function dE(...e){Yt[$t]<=Yt.debug&&ya(Xs("debug",e))}a(dE,"debug");function Dg(...e){Yt[$t]<=Yt.notify&&ya(Xs("notify",e))}a(Dg,"notify");function Ug(...e){Yt[$t]<=Yt.fatal&&ju(Xs("fatal",e))}a(Ug,"fatal");function fE(...e){Yt[$t]<=Yt.warn&&ju(Xs("warn",e))}a(fE,"warn");function bF(e,t,...r){t===Ig.STDERR?ju(Xs(e,r)):ya(Xs(e,r))}a(bF,"logCustomLevel");function yF(){let e;try{e=mF.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=js.join(e,ut.HDB_HOME_DIR_NAME,ut.BOOT_PROPS_FILE_NAME);return oi.existsSync(t)||(t=js.join(uE,"utility/hdb_boot_properties.file")),t}a(yF,"getPropsFilePath");function IF(e){$t=e}a(IF,"setLogLevel");function Ng(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ng,"autoCastBoolean");function wF(e){try{if(e.includes("config/settings.js")){let o=yg(e);return{level:o.get(ut.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:js.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=bg.parseDocument(oi.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(wF,"getLogConfig");function CF(){try{let e=bg.parseDocument(oi.readFileSync(TF,"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(CF,"getDefaultConfig");function LF(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(LF,"AuthAuditLog")});var Pg=T((Tse,Mg)=>{"use strict";var DF=require("util"),UF=require("path"),MF=require("child_process"),PF=DF.promisify(MF.execFile),vF=1e3*1e3*10;Mg.exports={findPs:BF};async function BF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await PF("ps",["wwxo",`pid,${r}`],{maxBuffer:vF});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: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"},jF={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."},XF={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,...jF,...XF,...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 X=T((Nse,Qg)=>{"use strict";var Zi=dr(),iG=G(),oG=b(),Xu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Kg),this.statusCode=s||Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Zi.DEFAULT_ERROR_MSGS[s]?Zi.DEFAULT_ERROR_MSGS[s]:Zi.DEFAULT_ERROR_MSGS[Zi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&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 Xu(e,t,r,s,n);return i&&delete o.stack,o}a(Kg,"handleHDBError");function Wg(e){return e.__proto__.constructor.name===Xu.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,String.fromCharCode(13,10)),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,String.fromCharCode(13,10))},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,jg)=>{"use strict";var Kt=require("validate.js");Kt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Kt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Kt.validators.type.checks={Object:function(e){return Kt.isObject(e)&&!Kt.isArray(e)},Array:Kt.isArray,Integer:Kt.isInteger,Number:Kt.isNumber,String:Kt.isString,Date:Kt.isDate,Boolean:function(e){return typeof e=="boolean"}};Kt.validators.hasValidFileExt=function(e,t){return Kt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};jg.exports={validateObject:_G,validateObjectAsync:dG,validateBySchema:fG};function _G(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Kt(e,t,{format:"flat"});return r?new Error(r):null}a(_G,"validateObject");async function dG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Kt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(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"),ue=require("joi"),EG=require("os"),{boolean:Ie,string:Is,number:Ot,array:pE}=ue.types(),{totalmem:Xg}=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=ue.string().empty(null).default(Zu),c=ue.custom(yG).empty(null).default(Zu),u=e.clustering?.enabled;if(el.isEmpty(u))throw OG;let _;return u===!0?_=ue.object({enabled:t,hubServer:ue.object({cluster:ue.object({name:ue.required().empty(null),network:ue.object({port:ai,routes:tl}).required()}).required(),leafNodes:ue.object({network:ue.object({port:ai}).required()}).required(),network:ue.object({port:ai}).required()}).required(),leafServer:ue.object({network:ue.object({port:ai,routes:tl}).required(),streams:ue.object({maxAge:Ot.min(120).allow(null).optional(),maxBytes:Ot.min(1).allow(null).optional(),maxMsgs:Ot.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:ue.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Ie.optional(),databaseLevel:Ie.optional(),tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required(),verify:Ie.optional()}),user:Is.optional().empty(null)}).required():_=ue.object({enabled:t,tls:ue.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Ie.required()})}).required(),ue.object({authentication:ue.object({authorizeLocal:Ie,cacheTTL:Ot.required(),enableSessions:Ie}),analytics:ue.object({aggregatePeriod:Ot}),componentsRoot:s.optional(),clustering:_,localStudio:ue.object({enabled:t}).required(),logging:ue.object({auditAuthEvents:ue.object({logFailed:Ie,logSuccessful:Ie}),file:Ie.required(),level:ue.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ue.object({enabled:Ie.optional(),compress:Ie.optional(),interval: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:ue.object({network:ue.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:ue.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ue.object({network:ue.object({port:ai,securePort:ai}).required(),webSocket:Ie.optional(),requireAuthentication:Ie.optional()}),http:ue.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:ue.object({writeAsync:Ie.required(),overlappingSync:Ie.optional(),caching:Ie.optional(),compression:Ie.optional(),noReadAhead:Ie.optional(),path:c,prefetchWrites:Ie.optional()}).required(),ignoreScripts:Ie.optional(),tls:ue.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(NG,"configValidator");function bG(e){return tA.existsSync(e)?null:`Specified path ${e} does not exist.`}a(bG,"doesPathExist");function yG(e,t){ue.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?.()||Xg();return i=Math.round(Math.min(i,Xg())/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=ue.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(),Wt=require("fs-extra"),UG=require("yaml"),rs=require("path"),MG=require("is-number"),oA=require("properties-reader"),PG=require("lodash"),{handleHDBError:vG}=X(),{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:jG,initOldConfig:_A,getConfigFromFile:XG,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);Wt.createFileSync(i),Wt.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{Wt.accessSync(t,Wt.constants.F_OK|Wt.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}.
|
|
5
|
+
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"),Wt.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),Wt.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`);Wt.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{Wt.accessSync(e,Wt.constants.F_OK|Wt.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(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Dn,"parseYamlDoc");function jG(){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(jG,"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 XG(e){let t=AE();return PG.get(t,e.replaceAll("_","."))}a(XG,"getConfigFromFile");async function ZG(e,t){let r=Dn(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.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);Wt.writeFileSync(n,String(r))}a(ex,"deleteConfigFromFile");function tx(){return nl||(RE(),nl)}a(tx,"getConfigObj")});var j=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=$(),Qt=j(),Pa=require("path"),dx=require("minimist"),mA=require("fs-extra"),pA=require("lodash");Qt.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(Qt.getHdbBasePath()!==void 0)return La=Qt.get(Un.STORAGE_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.DATABASES_DIR_NAME),La}a(SA,"getBaseSchemaPath");function TA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=gA(al),Da}a(TA,"getSystemSchemaPath");function RA(){if(Ua!==void 0)return Ua;if(Qt.getHdbBasePath()!==void 0)return Ua=Qt.get(Ma.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Pa.join(Qt.getHdbBasePath(),Ma.TRANSACTIONS_DIR_NAME),Ua}a(RA,"getTransactionAuditStoreBasePath");function fx(e,t){let r=Qt.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=Qt.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=Qt.get(Un.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Ca.PATH];if(_)return pA.set(u,[al,Ca.TABLES,t,Ca.PATH],_),Qt.setProperty(Un.DATABASES,u),_;let l=c?.[Ca.PATH];if(l)return pA.set(u,[al,Ca.PATH],l),Qt.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),Qt.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[Bt]||(e[Bt]=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[Bt];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[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new os.ClientError("Can not add a property to a sealed table schema");vr(this)[o]=c}),i("deleteProperty",function(o){vr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function 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[Bt],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[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=Ba(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function _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[Bt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Re]===i){if(_l(n))return!0}else return!0}else return!0}}return!1}var os,Bt,ll,li,dl,hl=Te(()=>{as();os=D(X()),Bt=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+String.fromCharCode(65535);break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case pt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new so.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new so.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=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(X()),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[Bt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function 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(X());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"),jA=$(),{handleHDBError:XA,hdb_errors:$x}=X(),{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 XA(new Error,ZA.SCHEMA_NOT_FOUND(t.databaseid),eO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw XA(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)!jA.isEmpty(i)&&!jA.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)===XE){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&jE?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,jE,EO,XE,hO,mO,NO,ZE,oo=Te(()=>{io=require("ordered-binary"),Ol=D(j()),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");jE=16,EO=1,XE=2,hO=3,mO=4,NO={put:EO|jE,[EO]:"put",delete:XE,[XE]:"delete",message:hO|jE,[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=jx.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,jx,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");jx=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=j(),_h=b(),{RecordEncoder:Xx}=(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:Xx},this.alwaysLazyProperty=s=>s===tk)}};UO.exports=uh});var Ul=T((Pne,PO)=>{"use strict";var uo=j(),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(),zt=dr().LMDB_ERRORS_ENUM,Pl=fO(),Eh=Ll(),qO=Ul(),Mn=ze(),vO=b(),{table:nk,resetDatabases:ik}=(fe(),Z(Ce)),BO=j(),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(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.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(zt.INVALID_BASE_PATH):s}try{let s=Tr.join(e,t+$a);return await us.access(s,us.constants.R_OK|us.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await us.access(Tr.join(e,t,ok),us.constants.R_OK|us.constants.F_OK),Tr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(hh,"validateEnvironmentPath");function Bl(e,t){if(Ml.validateEnv(e),t===void 0)throw new Error(zt.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===zt.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(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===zt.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(zt.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(zt.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(zt.INVALID_ENVIRONMENT)}}a(hk,"environmentDataSize");function mk(e,t){if(Bl(e,t),t=t.toString(),t===ls)throw new Error(zt.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===zt.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}=X(),{OVERFLOW_MARKER:Yne,MAX_SEARCH_KEY_LENGTH:Kne}=Ak,jO=j();jO.initSync();var Hl=jO.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];XO(_,!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 XO(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(XO,"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(XO(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((Xne,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 jk=b(),Ih=Ue(),Xk=lo(),{getSystemSchemaPath:Zk,getSchemaPath:eV}=ve(),tV=hi(),rV=Fl(),sV=Gl(),nV=cN(),{handleHDBError:uN,hdb_errors:_N}=X(),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(),jk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Xk.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}=X();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:ja,hdb_errors:pV}=X(),{HDB_ERROR_MSGS:Xa,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 ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),Za.BAD_REQUEST,void 0,void 0,!0);if(Mh.isEmptyOrZeroLength(e)||Mh.isEmpty(e.trim()))throw ja(new Error,Xa.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),ja(new Error,Xa.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),ja(new Error,Xa.HASH_VAL_LENGTH_ERR,Za.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Uh.error(e),ja(new Error,Xa.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=j(),{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}=X(),{HDB_ERROR_MSGS:Kl,HTTP_STATUS_CODES:Hh}=UV,MV=j();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}=X(),{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:jV,hdb_database:GN}=Ds(),xN={schema:GN,database:GN,table:jV},XV={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,...XV},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,XN)=>{"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$}=X(),{HDB_ERROR_MSGS:jl,HTTP_STATUS_CODES:Bn}=c$,u$="records successfully deleted",l$=i$(jN);XN.exports={delete:l$,deleteRecord:jN,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,jl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,jl.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,jl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,jl.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 jN(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(jN,"deleteRecord")});var Xl=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(),Ht={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function p$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Wh.validateObject(e,Ht)}a(p$,"addUserValidation");function S$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Wh.validateObject(e,Ht)}a(S$,"alterUserValidation");function T$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Wh.validateObject(e,Ht)}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=Xl(),ub=require("crypto"),B$=require("moment"),H$=require("uuid").v4,qt=G(),Xh=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=j();lb.initSync();var jh;fb.exports={validateLicense:_b,generateFingerPrint:K$,licenseSearch:db,getLicense:z$};function Zh(){return Xh.join(lb.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(Zh,"getLicenseDirPath");function Y$(){let e=Zh();return Xh.join(e,Hn.LICENSE_FILE_NAME)}a(Y$,"getLicenseFilePath");function em(){let e=Zh();return Xh.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 qt.error(`Error writing fingerprint file to ${e}`),qt.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 qt.error(`Error writing fingerprint file to ${r}`),qt.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 qt.error("empty license key passed to validate."),r;let s=em(),n=!1;try{n=ho.statSync(s)}catch(i){qt.error(i)}if(n){let i;try{i=ho.readFileSync(s,"utf8")}catch{qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(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),qt.error(Eo),new Error(Eo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Eo),qt.error(Eo),new Error(Eo)}else r.exp_date=l;r.exp_date<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||qt.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{qt.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"?qt.info("no license file found"):qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(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){qt.error("There was an error parsing the license string."),qt.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return jh=e,e}a(db,"licenseSearch");async function z$(){return jh||await db(),jh}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=Xl(),Ob=sb(),Nb=Gr(),nm=an(),Rr=$(),bb=require("validate.js"),_e=G(),{promisify:j$}=require("util"),im=nn(),Eb=b(),hb=ke(),X$=hr(),Jie=j(),jie=rc(),Z$=hi(),{table:Xie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:eY}=X(),{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=j$(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=X$.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"),jb=Ue(),QY=$b(),zY=Kb(),JY=Qb(),jY=Jb(),Ro=ze(),Xb=$(),{CONFIG_PARAMS:XY}=b(),Zb=j();Zb.initSync();var o_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:ZY}=ve();ey.exports=e1;async function e1(e,t){if(Zb.get(XY.LOGGING_AUDITLOG)===!1)return;let r=ZY(e.schema,e.table),s=await jb.openEnvironment(r,e.table,!0),n=t1(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){jb.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),Xb.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=Xb.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 jY(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 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,!0)}a(j1,"lessThan");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,!1)}a(X1,"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:j1,lessThanEqual:X1,between:Z1}});var Oo=T((joe,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}=X(),{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 Ft=Ao(),gK=Ue(),AK=$(),ae=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([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(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?Ft.batchSearchByHashToMap(c,r,e.get_attributes,_):Ft.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 ae.SEARCH_TYPES.EQUALS:n=Ft.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ft.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Ft.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Ft.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ft.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ft.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ft.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ft.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ft.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Ft.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ft.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Ft.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ft.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(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?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(cn[0])<0&&n.indexOf(cn[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(cn.indexOf(i)>=0&&cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(cn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(cn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(cn[0])||n.includes(cn[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Uy.UNKNOWN_SEARCH_TYPE)}else switch(s){case yi.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case yi.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case yi.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case yi.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case yi.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.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}=X(),{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 Xy=vs(),Zy=dc(),eI=_c(),tI=cc(),Jt=b(),zy=$(),Jy=Ue(),{getTransactionAuditStorePath:QK,getSchemaPath:zK}=ve(),jy=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 jK(e),await XK(e);let t=zK(e.schema,e.table);try{await Jy.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=QK(e.schema,e.table);await Jy.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(JK,"lmdbDropTable");async function jK(e){let t=new Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await 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(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await tI(n)}a(jK,"deleteAttributesFromSystem");async function XK(e){let t=new Xy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Jt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await 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(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await tI(n)}catch(i){throw i}}a(XK,"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}=X(),{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}=X();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,jW=100;OI.exports=XW;async function XW(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(jW);while(n.transactions_deleted>0);return i}a(XW,"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((Xae,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}=X(),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(),jQ=BI(),YI=GI(),XQ=$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 jQ.writeTransaction(t,r,s)}flush(t,r){return YI.flush(t,r)}resetReadTxn(t,r){return YI.resetReadTxn(t,r)}getBackup(t){return XQ(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*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,m_,Es,ZI,ew,ms,Wm,Qm,tw,ZQ,ez,tz,rz,QI,zm,sw=Te(()=>{"use strict";XI=D(WI()),m_=D(Oo()),Es=D(X());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 XI.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 jm(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 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(Jm,"getSelect");a(zI,"getRecords");a(Hs,"getTable");a(JI,"createDeleteResponse");a(jI,"groupRecordsInHistory")});var _s=T((Rce,nw)=>{"use strict";var{ResourceBridge:sz}=(sw(),Z(rw)),nz=j();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"),Xm="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(Xm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Xm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Xm)}});var 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))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");if(de.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return 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"),yt=require("alasql");yt.options.cache=!1;var yz=S_(),mw=require("clone"),T_=require("recursive-iterator"),re=G(),ie=$(),yo=_s(),Iz=b(),{hdb_errors:wz}=X(),{getDatabases:pw}=(fe(),Z(Ce)),Cz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";yz(yt);var tp=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw re.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return re.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw re.error("Error thrown from checkEmptySQL in SQLSearch class method search."),re.error(s),new Error(ps)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw re.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),re.error(s),new Error(ps)}if(Object.keys(this.data).length===0)return re.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw re.error("Error thrown from processJoins in SQLSearch class method search."),re.error(s),new Error(ps)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw re.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),re.error(s),new Error(ps)}try{return t=await this._finalSQL(),t}catch(s){throw re.error("Error thrown from finalSQL in SQLSearch class method search."),re.error(s),new Error(ps)}}_getColumns(){let t=new 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(ie.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),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new yt.yy.LogicValue({value:s}):r.right instanceof yt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new yt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new yt.yy.LogicValue({value:i}):s instanceof yt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new yt.yy.NumValue({value:i}))});if(t){re.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new 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(!ie.isEmpty(Iz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)s.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Tc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await yt.promise(r)}catch(r){throw re.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),re.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(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(ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(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),!ie.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await yo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await yo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(E)))}))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else if(!ie.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await yo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(p)));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(p)))}}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await yo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(l){throw re.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),re.error(l),new Error(ps)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof yt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new yt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new yt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new yt.yy.FuncValue:new yt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${p}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await yt.promise(h,t),t=null}catch(E){throw re.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),re.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let p=f[E];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Tc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new 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 yt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),re.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw re.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),re.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return re.error(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 jz=require("alasql"),Xz=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(Xz.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=jz.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}=X(),{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.3",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var 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 Pt=se.count;for(let Pe in te){let At=te[Pe];typeof At=="number"&&(se[Pe]=(se[Pe]*Pt+At*w)/(Pt+w))}se.count+=w,K>=0&&(se.total+=K,se.ratio=se.total/se.count)}else se=Object.assign({period:t},I),delete se.distribution,o.set(be,se),se.byThread&&(se.threads=[],se.threads[A]=Object.assign({},te),u.push(se));if(B){B=B.map(Pe=>typeof Pe=="number"?{value:Pe,count:1}:Pe);let Pt=c.get(be);Pt?Pt.push(...B):c.set(be,B)}}await 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,Pt]=I;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:x,p90:te,p95:be,p99:se,p999:Pt})}let l;for(let[h,p]of o)p.id=(0,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&&(jw=gJ(r))}async function gJ(e){if(await jw,!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)+`
|
|
6
|
+
`,t)}var wi,Gw,xw,gc,cp,A_,Ac,up,O_,kw,g_,Vw,$w,Yw,Kw,Mw,Pw,Ww,mJ,pJ,Bw,Hw,zw,qw,Fw,TJ,jw,Gn,RJ,xn=Te(()=>{wi=require("worker_threads"),Gw=D(Ze());fe();xw=D(G()),gc=require("path"),cp=require("fs/promises"),A_=D(mr()),Ac=D(j()),up=D(b());Pr();(0,Ac.initSync)();O_=new Map,kw=(0,Ac.get)(up.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(fJ,"setAnalyticsEnabled");a(br,"recordAction");lt.recordAnalytics=br;a(kr,"recordActionBinary");g_=0,Vw=1e3,$w="analytics-report",Yw=[];a(Oc,"addAnalyticsListener");Kw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(EJ,"sendAnalytics");a(hJ,"aggregation");Mw=0,Pw=0,Ww=a(()=>new Promise(setImmediate),"rest");a(vw,"cleanup");mJ=36e5,pJ=31536e6;a(lp,"getRawAnalyticsTable");a(Qw,"getAnalyticsTable");(0,Gw.setChildListenerByType)($w,Jw);a(SJ,"startScheduledTasks");qw=0,Fw=new Map,TJ=!1;a(Jw,"recordAnalytics");RJ=1e6;a(gJ,"logAnalytics")});var st=T((sue,mC)=>{"use strict";var It=j();It.initSync();var AJ=require("fs-extra"),OJ=require("semver"),yc=require("path"),{monotonicFactory:NJ}=require("ulidx"),Zw=NJ(),bJ=require("util"),eC=require("child_process"),yJ=bJ.promisify(eC.exec),IJ=eC.spawn,ge=ke(),Oe=b(),Ep=$(),Vr=G(),b_=nn(),wJ=R_(),Nc=hr(),{onMessageByType:CJ}=Ze(),{isMainThread:LJ}=require("worker_threads"),{Encoder:DJ,decode:hp}=require("msgpackr"),tC=new DJ,{isEmpty:Ci}=Ep,rC=gr(),UJ=48*36e11,MJ=5e9;LJ&&CJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,Co=void 0});var{connect:PJ,StorageType:sC,RetentionPolicy:nC,AckPolicy:y_,DeliverPolicy:I_,DiscardPolicy:vJ,NatsConnection:Zce,JetStreamManager:eue,JetStreamClient:tue,StringCodec:rue,JSONCodec:BJ,createInbox:mp,headers:HJ,ErrorCode:Xw}=require("nats"),{PACKAGE_ROOT:qJ}=b(),FJ=Rc(),{recordAction:GJ}=(xn(),Z(N_)),iC=BJ(),xJ="clustering",kJ=FJ.engines[ge.NATS_SERVER_NAME],VJ=yc.join(qJ,"dependencies"),fp=yc.join(VJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),_p,dp,bc,Io,wo;mC.exports={runCommand:oC,checkNATSServerInstalled:$J,createConnection:pp,getConnection:w_,getJetStreamManager:Ic,getJetStream:aC,getNATSReferences:jt,getServerList:KJ,createLocalStream:Sp,listStreams:cC,deleteLocalStream:WJ,getServerConfig:wc,listRemoteStreams:QJ,viewStream:zJ,viewStreamIterator:JJ,publishToStream:jJ,createWorkQueueStream:XJ,addSourceToWorkStream:lC,request:e2,removeSourceFromWorkStream:dC,reloadNATS:Tp,reloadNATSHub:t2,reloadNATSLeaf:r2,extractServerName:_C,requestErrorHandler:s2,updateWorkStream:n2,createLocalTableStream:EC,createTableStreams:i2,purgeTableStream:hC,purgeSchemaTableStreams:o2,getStreamInfo:a2,updateLocalStreams:u2,closeConnection:YJ,getJsmServerName:Cc,addNatsMsgHeader:uC,updateIngestStreamConsumer:ZJ};async function oC(e,t=void 0){let{stdout:r,stderr:s}=await yJ(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
|
-
`,"")}a(oC,"runCommand");async function VJ(){try{await gJ.access(fp)}catch{return!1}let e=await oC(`${fp} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return AJ.eq(t,xJ)}a(VJ,"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}kr.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:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(pp,"createConnection");async function $J(){ps&&(await ps.drain(),ps=void 0,Io=void 0,wo=void 0,Co=void 0)}a($J,"closeConnection");var ps,Co;async function w_(){return Co||(Co=pp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ps=await Co),ps||Co}a(w_,"getConnection");async function Ic(){if(Io)return Io;Ci(ps)&&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 ps.jetstreamManager({domain:e,timeout:6e4}),Io}a(Ic,"getJetStreamManager");async function aC(){if(wo)return wo;Ci(ps)&&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=ps.jetstream({domain:e,timeout:6e4}),wo}a(aC,"getJetStream");async function jt(){let e=ps||await w_(),t=Io||await Ic(),r=wo||await aC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function YJ(e){let t=It.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(YJ,"getServerList");async function Sp(e,t){let{jsm:r}=await jt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:sC.File,retention:nC.Limits,subjects:t,discard:PJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Sp,"createLocalStream");async function cC(){let{jsm:e}=await jt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(cC,"listStreams");async function KJ(e){let{jsm:t}=await jt();await t.streams.delete(e)}a(KJ,"deleteLocalStream");async function WJ(e){let{connection:t}=await jt(),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(WJ,"listRemoteStreams");async function QJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),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(QJ,"viewStream");async function*zJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await jt(),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(zJ,"viewStreamIterator");async function JJ(e,t,r,s){kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uC(s,r);let{js:n}=await jt(),i=await Cc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:tC.encode(s);try{kr.trace(`publishToStream publishing to subject: ${o}`),FJ(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"){kr.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(JJ,"publishToStream");function uC(e,t){t===void 0&&(t=BJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(uC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),GJ);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;kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(wc,"getServerConfig");async function jJ(e){let{jsm:t}=await jt(),r=await Cc();try{await t.streams.add({name:e.stream_name,storage:sC.File,retention:nC.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:y_.Explicit,durable_name:e.durable_name,deliver_policy:I_.All,max_ack_pending:1e4});else throw s}}a(jJ,"createWorkQueueStream");async function XJ(){let{jsm:e}=await jt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:y_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:I_.All,max_ack_pending:1e4}))}a(XJ,"updateIngestStreamConsumer");async function lC(e,t,r){let{jsm:s}=await jt(),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 jt(),{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 ZJ(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 jt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return hp(c.data)}a(ZJ,"request");function Tp(e){return new Promise(async(t,r)=>{let s=yJ(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 e2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Tp(e)}a(e2,"reloadNATSHub");async function t2(){let{pid_file_path:e}=wc(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Tp(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 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(s2,"updateWorkStream");function fC(e){return IJ.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=a2(e,t,s);await Sp(r,[n])}a(EC,"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 EC(s,n)}}a(n2,"createTableStreams");async function hC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=b_.createNatsTableStreamName(e,t),{jsm:s}=await jt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")kr.warn(r);else throw r}}a(hC,"purgeTableStream");async function i2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await hC(e,t[r])}a(i2,"purgeSchemaTableStreams");async function o2(e){return(await Ic()).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 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 c2(){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=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}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(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=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(u2,"updateStreamLimits")});var U_=T((oue,RC)=>{"use strict";var Lo=Fl(),Do=Uw(),l2=G(),_2=require("uuid").v4,iue=require("clone"),L_=an(),Uo=b(),d2=require("util"),kn=ls(),{handleHDBError:Xt,hdb_errors:f2}=X(),{HDB_ERROR_MSGS:C_,HTTP_STATUS_CODES:Zt}=f2,{SchemaEventMsg:D_}=_s(),pC=st(),{getDatabases:E2}=(fe(),Z(Ce)),{transformReq:Mo}=$();RC.exports={createSchema:h2,createSchemaStructure:SC,createTable:m2,createTableStructure:TC,createAttribute:g2,dropSchema:p2,dropTable:S2,dropAttribute:T2,getBackup:A2};async function h2(e){let t=await SC(e);return L_.signalSchemaChange(new D_(process.pid,e.operation,e.schema)),t}a(h2,"createSchema");async function SC(e){let t=Lo.schema_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Mo(e),!await Do.checkSchemaExists(e.schema))throw Xt(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 m2(e){return Mo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await TC(e)}a(m2,"createTable");async function TC(e){let t=Lo.create_table_object(e);if(t)throw Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo.validateTableResidence(e.residence),!await Do.checkSchemaTableExists(e.schema,e.table))throw Xt(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:_2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw Xt(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 p2(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 Xt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let n=await Do.checkSchemaExists(e.schema);if(n)throw Xt(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(p2,"dropSchema");async function S2(e){let t=Lo.table_object(e);if(t)throw Xt(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 Xt(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(S2,"dropTable");async function T2(e){let t=Lo.attribute_object(e);if(t)throw Xt(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 Xt(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 Xt(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 Xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await kn.dropAttribute(e),R2(e),L_.signalSchemaChange(new D_(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){Mo(e);let t=E2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Xt(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(g2,"createAttribute");function A2(e){return kn.getBackup(e)}a(A2,"getBackup")});var AC=T((cue,gC)=>{"use strict";var{OPERATIONS_ENUM:O2}=b(),Rp=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}};gC.exports=Rp});var gp=T((_ue,IC)=>{"use strict";var N2=ls(),lue=AC(),M_=$(),P_=b(),b2=j(),{handleHDBError:OC,hdb_errors:y2}=X(),{HDB_ERROR_MSGS:NC,HTTP_STATUS_CODES:bC}=y2,I2=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=w2;async function w2(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(!b2.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)&&I2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await N2.readAuditLog(e)}a(w2,"readAuditLog")});var CC=T((fue,wC)=>{"use strict";var{OPERATIONS_ENUM:C2}=b(),Ap=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}};wC.exports=Ap});var UC=T((pue,DC)=>{"use strict";var L2=ls(),hue=CC(),Op=$(),D2=b(),mue=j(),{handleHDBError:U2,hdb_errors:M2}=X(),{HDB_ERROR_MSGS:LC,HTTP_STATUS_CODES:P2}=M2;DC.exports=v2;async function v2(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 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 qC=T((Tue,HC)=>{var Vn=require("validate.js"),PC=Fe(),Po=b(),{handleHDBError:B2,hdb_errors:H2}=X(),{HDB_ERROR_MSGS:je,HTTP_STATUS_CODES:q2}=H2,Np=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),F2={STRUCTURE_USER:"structure_user"},MC=Object.values(Po.ROLE_TYPES_ENUM),G2="attribute_permissions",x2="attribute_name",{PERMS_CRUD_ENUM:vo}=Po,k2=[G2,...Object.values(vo)],vC=[vo.READ,vo.INSERT,vo.UPDATE],V2=[x2,...vC];function $2(e){let t=Np();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,BC(e,t)}a($2,"addRoleValidation");function Y2(e){let t=Np();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,BC(e,t)}a(Y2,"alterRoleValidation");function K2(e){let t=Np();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,PC.validateObject(e,t)}a(K2,"dropRoleValidation");var W2=["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++)W2.includes(s[o])||n.push(s[o]);n.length>0&&nt(je.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=Q2(e);o&&nt(o,r),MC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&nt(je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(MC.indexOf(o)<0){if(o===F2.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(je.SCHEMA_NOT_FOUND(d),r)}continue}nt(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(je.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){nt(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{k2.includes(l)||nt(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||nt(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(je.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){nt(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(je.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!V2.includes(p)&&p!==vo.DELETE&&nt(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){nt(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||nt(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(je.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;nt(je.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return z2(r)}a(BC,"customValidate");HC.exports={addRoleValidation:$2,alterRoleValidation:Y2,dropRoleValidation:K2};function Q2(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 je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Po.ROLE_TYPES_ENUM.SUPER_USER:Po.ROLE_TYPES_ENUM.CLUSTER_USER;return je.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:je.ROLE_PERMS_ERROR,...e};return B2(new Error,s,q2.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 Lp=T((gue,kC)=>{"use strict";var FC=Gr(),GC=Fr(),J2=Ai(),yp=qC(),Ip=an(),j2=require("uuid").v4,X2=require("util"),v_=b(),Z2=$(),wp=GC.searchByValue,e4=GC.searchByHash,t4=X2.promisify(J2.delete),r4=Ps(),s4=No(),{hdb_errors:n4,handleHDBError:Bo}=X(),{HDB_ERROR_MSGS:xC,HTTP_STATUS_CODES:B_}=n4,{UserEventMsg:Cp}=_s();kC.exports={addRole:i4,alterRole:o4,dropRole:a4,listRoles:c4};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 i4(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(i4,"addRole");async function o4(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(o4,"alterRole");async function a4(e){let t=yp.dropRoleValidation(e);if(t)throw Bo(new Error,t,B_.BAD_REQUEST,void 0,void 0,!0);let r=new s4(v_.SYSTEM_SCHEMA_NAME,v_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await e4(r));if(s.length===0)throw Bo(new Error,xC.ROLE_NOT_FOUND,B_.NOT_FOUND,void 0,void 0,!0);let n=new r4(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(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),Ip.signalUserChange(new Cp(process.pid)),`${s[0].role} successfully deleted`}a(a4,"dropRole");async function c4(){return wp({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(c4,"listRoles")});var KC=T((Oue,YC)=>{"use strict";var u4=j(),$n=require("joi"),l4=Fe(),VC=require("moment"),_4=require("fs-extra"),Dp=require("path"),d4=require("lodash"),Lc=b(),{LOG_LEVELS:Li}=b(),f4="YYYY-MM-DD hh:mm:ss",E4=Dp.resolve(__dirname,"../logs");YC.exports=function(e){return l4.validateBySchema(e,h4)};var h4=$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(m4)});function $C(e,t){if(VC(e,VC.ISO_8601).format(f4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a($C,"validateDatetime");function m4(e,t){if(d4.invert(Lc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=u4.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(E4,Lc.LOG_NAMES.INSTALL):Dp.join(s,n);return _4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(m4,"validateReadLogPath")});var Mp=T((bue,QC)=>{"use strict";var H_=b(),p4=G(),S4=j(),T4=KC(),Up=require("path"),WC=require("fs-extra"),{once:R4}=require("events"),{handleHDBError:g4,hdb_errors:A4}=X(),{PACKAGE_ROOT:O4}=b(),N4=Up.join(O4,"logs"),b4=1e3,y4=200;QC.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(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(N4,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?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(WC.statSync(n).size-(h+5)*y4,0));let S=WC.createReadStream(n,{start:p});S.on("error",F=>{p4.error(F)});let A=0,I=[],N="",Y;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){Y&&(Y.message=F.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(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 R4(S,"close"),I}a(I4,"readLog");function Yn(e,t,r){t==="desc"?w4(e,r):t==="asc"?C4(e,r):r.push(e)}a(Yn,"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 F_=T((Lue,XC)=>{"use strict";var Pp=require("joi"),{string:q_,boolean:zC,date:L4}=Pp.types(),D4=Fe(),{validateSchemaExists:Iue,validateTableExists:wue,validateSchemaName:Cue}=Ls(),U4=b(),M4=ke(),JC=j();JC.initSync();var P4=q_.invalid(JC.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:Pp.array().items({table:q_.optional(),schema:q_.required(),subscribe:zC.required(),publish:zC.required().custom(B4),start_time:L4.iso()}).min(1).required()};function v4(e){return D4.validateBySchema(e,Pp.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 eL=T((Uue,ZC)=>{var H4=Fe(),q4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ZC.exports=function(e){return H4.validateObject(e,q4)}});var Bp=T((Mue,tL)=>{"use strict";var F4=b().OPERATIONS_ENUM,vp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=F4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tL.exports=vp});var sL=T((vue,rL)=>{"use strict";var G4={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:G4,JWTRSAKeys:qp}});var Mc=T((Hue,aL)=>{"use strict";var Uc=require("jsonwebtoken"),Fp=require("fs-extra"),Gp=$(),Vr=b(),{handleHDBError:er,hdb_errors:x4}=X(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=x4,Dc=G(),nL=Xl(),Vp=Rr(),k4=Gr().update,V4=Bp(),$4=an(),{UserEventMsg:Y4}=_s(),Kn=j();Kn.initSync();var xp=require("path"),{JWTTokens:K4,JWTRSAKeys:W4,TOKEN_TYPE_ENUM:G_}=sL(),Q4=Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",z4=Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",x_="RS256",kp;aL.exports={createTokens:J4,validateOperationToken:X4,refreshOperationToken:j4,validateRefreshToken:oL};async function J4(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:z4,algorithm:x_,subject:G_.REFRESH}),u=nL.hash(c),_=new V4(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await k4(_)}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 $4.signalUserChange(new Y4(process.pid)),new K4(o,c)}a(J4,"createTokens");async function iL(e,t,r){return await Uc.sign(e,{key:t,passphrase:r},{expiresIn:Q4,algorithm:x_,subject:G_.OPERATION})}a(iL,"signOperationToken");async function k_(){if(kp===void 0)try{let e=xp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=xp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=xp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.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 W4(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 X4(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(X4,"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 Z4=eL(),Ho=require("passport"),e3=require("passport-local").Strategy,t3=require("passport-http").BasicStrategy,r3=require("util"),s3=Rr(),uL=r3.callbackify(s3.findAndValidateUser),Fue=dr(),n3=b(),cL=Mc();Ho.use(new e3(function(e,t,r){uL(e,t,r)}));Ho.use(new t3(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 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":Ho.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?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(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");lL.exports={authorize:i3,checkPermissions:o3}});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 a3=b().OPERATIONS_ENUM,Wp=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}};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 c3=mL(),Jue=ze(),pL=Ue(),u3=G(),{getSchemaPath:jue,getTransactionAuditStorePath:Xue}=ve(),{getDatabases:l3}=(fe(),Z(Ce));SL.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 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){u3.warn(`unable to stat table dbi due to ${r}`)}return t}a(_3,"lmdbGetTableSize")});var gL=T((tle,RL)=>{"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}};RL.exports=jp});var Fo=T((ile,bL)=>{"use strict";var d3=require("fs-extra"),f3=require("path"),Gt=require("systeminformation"),Wn=G(),E3=st(),Xp=ke(),$_=b(),h3=TL(),NL=pi(),{getThreadInfo:AL}=Ze(),cS=j();cS.initSync();var m3=gL(),{openEnvironment:sle}=Ue(),{getSchemaPath:nle}=ve(),{database:p3}=(fe(),Z(Ce)),V_;bL.exports={getHDBProcessInfo:rS,getNetworkInfo:nS,getDiskInfo:sS,getMemoryInfo:tS,getCPUInfo:eS,getTimeInfo:Zp,getSystemInformation:iS,systemInformation:S3,getTableSize:oS,getMetrics:aS};function Zp(){return Gt.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 Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(eS,"getCPUInfo");async function tS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.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 Gt.processes(),r;try{r=Number.parseInt(await d3.readFile(f3.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 Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return 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 Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return 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 Gt.osInfo();e=c;let u=await Gt.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 h3(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=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){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 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(OL,"getNatsStreamInfo");async function S3(e){let t=new m3;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(S3,"systemInformation")});var uS=T((ale,yL)=>{"use strict";yL.exports={version:T3,printVersion:R3};var Y_=Rc();function T3(){if(Y_)return Y_.version}a(T3,"version");function R3(){Y_&&console.log(`HarperDB Version ${Y_.version}`)}a(R3,"printVersion")});var ln=T((_le,LL)=>{"use strict";var g3=Gr(),lS=$(),A3=require("util"),Di=b(),IL=j();IL.initSync();var O3=$p(),wL=Fr(),{Node:ule,NodeSubscription:lle}=qo(),N3=No(),b3=fL(),{RemotePayloadObject:y3,RemotePayloadSubscription:I3}=Pc(),{handleHDBError:w3,hdb_errors:C3}=X(),{HTTP_STATUS_CODES:L3,HDB_ERROR_MSGS:D3}=C3,U3=Ps(),M3=Fo(),P3=uS(),{getDatabases:v3}=(fe(),Z(Ce)),B3=A3.promisify(O3.authorize),H3=wL.searchByHash,q3=wL.searchByValue;LL.exports={authHeaderToUser:F3,isEmpty:G3,getNodeRecord:x3,upsertNodeRecord:k3,buildNodePayloads:V3,checkClusteringEnabled:$3,getAllNodeRecords:Y3,getSystemInfo:K3,reverseSubscription:CL};async function F3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await B3(t,null),e}a(F3,"authHeaderToUser");function G3(e){return e==null}a(G3,"isEmpty");async function x3(e){let t=new N3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return H3(t)}a(x3,"getNodeRecord");async function k3(e){let t=new b3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return g3.upsert(t)}a(k3,"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 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=lS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CL(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(!IL.get(Di.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(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await q3(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 _S=T((fle,qL)=>{"use strict";var K_=st(),DL=$(),UL=ke(),ML=b(),W_=G(),PL=U_(),W3=Dm(),{RemotePayloadObject:Q3}=Pc(),{handleHDBError:vL,hdb_errors:z3}=X(),{HTTP_STATUS_CODES:BL}=z3,{NodeSubscription:HL}=qo();qL.exports=J3;async function J3(e,t){let r;try{r=await K_.request(`${t}.${UL.REQUEST_SUFFIX}`,new Q3(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 W3(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(J3,"reviewSubscriptions")});var J_=T((hle,xL)=>{"use strict";var{handleHDBError:Q_,hdb_errors:j3}=X(),{HTTP_STATUS_CODES:z_}=j3,{addUpdateNodeValidator:X3}=F_(),vc=G(),GL=b(),FL=ke(),Z3=$(),dS=st(),Bc=ln(),ej=j(),tj=_S(),{Node:rj,NodeSubscription:sj}=qo(),{broadcast:nj}=Ze(),ij="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",oj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",aj=ej.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=cj;async function cj(e,t=!1){vc.trace("addNode called with:",e),Bc.checkClusteringEnabled();let r=X3(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(!Z3.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 tj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=ij,o;let c=Bc.buildNodePayloads(n,aj,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 sj(E.schema,E.table,E.publish,E.subscribe))}let l=new rj(s,_,u.system_info);return await Bc.upsertNodeRecord(l),nj({type:"nats_update"}),i.length>0?o.message=oj:o.message=`Successfully added '${s}' to manifest`,o}a(cj,"addNode")});var ES=T((ple,$L)=>{"use strict";var{handleHDBError:j_,hdb_errors:uj}=X(),{HTTP_STATUS_CODES:X_}=uj,{addUpdateNodeValidator:lj}=F_(),Hc=G(),VL=b(),kL=ke(),_j=$(),fS=st(),qc=ln(),dj=j(),{cloneDeep:fj}=require("lodash"),Ej=_S(),{NodeSubscription:hj}=qo(),{broadcast:mj}=Ze(),pj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Sj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Tj=dj.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME);$L.exports=Rj;async function Rj(e){Hc.trace("updateNode called with:",e),qc.checkClusteringEnabled();let t=lj(e);if(t)throw j_(t,t.message,X_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=fj(await qc.getNodeRecord(r));if(_j.isEmptyOrZeroLength(s))throw j_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await Ej(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=pj,o;let c=qc.buildNodePayloads(n,Tj,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 j_(new Error,l,X_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw j_(new Error,_,X_.INTERNAL_SERVER_ERROR,"error",_)}Hc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Hc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await fS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await gj(s[0],n,u.system_info),i.length>0?o.message=Sj:o.message=`Successfully updated '${r}'`,o}a(Rj,"updateNode");async function gj(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 hj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qc.upsertNodeRecord(s),mj({type:"nats_update"})}a(gj,"updateNodeTable")});var zL=T((Tle,QL)=>{"use strict";var WL=require("joi"),{string:YL}=WL.types(),Aj=Fe(),KL=b(),Oj=j(),Nj=ke();QL.exports=bj;function bj(e){let t=YL.invalid(Oj.get(KL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Nj.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 Aj.validateBySchema(e,r)}a(bj,"removeNodeValidator")});var ed=T((gle,tD)=>{"use strict";var{handleHDBError:JL,hdb_errors:yj}=X(),{HTTP_STATUS_CODES:jL}=yj,Ij=zL(),Fc=G(),XL=ln(),wj=$(),Z_=b(),ZL=ke(),eD=st(),Cj=j(),{RemotePayloadObject:Lj}=Pc(),{NodeSubscription:Dj}=qo(),Uj=dc(),Mj=Ai(),{broadcast:Pj}=Ze(),vj=Cj.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);tD.exports=Bj;async function Bj(e){Fc.trace("removeNode called with:",e),XL.checkClusteringEnabled();let t=Ij(e);if(t)throw JL(t,t.message,jL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await XL.getNodeRecord(r);if(wj.isEmptyOrZeroLength(s))throw JL(new Error,`Node '${r}' was not found.`,jL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Lj(Z_.OPERATIONS_ENUM.REMOVE_NODE,vj,[]),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 Dj(l.schema,l.table,!1,!1);await eD.updateWorkStream(d,r)}let c=new Uj(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Mj.deleteRecord(c),Pj({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(Bj,"removeNode")});var nD=T((Ole,sD)=>{"use strict";var rD=require("joi"),{string:Hj,array:qj}=rD.types(),Fj=Fe(),Gj=F_();sD.exports=xj;function xj(e){let t=rD.object({operation:Hj.valid("configure_cluster").required(),connections:qj.items(Gj.validation_schema).required()});return Fj.validateBySchema(e,t)}a(xj,"configureClusterValidator")});var hS=T((ble,uD)=>{"use strict";var kj=b(),td=G(),Vj=$(),$j=ed(),Yj=J_(),iD=ln(),Kj=nD(),{handleHDBError:oD,hdb_errors:Wj}=X(),{HTTP_STATUS_CODES:aD}=Wj,Qj="Configure cluster complete.",zj="Failed to configure the cluster. Check the logs for more details.",Jj="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uD.exports=jj;async function jj(e){td.trace("configure cluster called with:",e),iD.checkClusteringEnabled();let t=Kj(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($j,{operation:kj.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(Yj,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(Vj.isEmptyOrZeroLength(u))return{message:Qj,connections:_};if(l)return{message:Jj,failed_nodes:u,connections:_};throw oD(new Error,zj,aD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(jj,"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"),Xj=Fe(),{validateSchemaExists:Zj,validateTableExists:eX,validateSchemaName:tX}=Ls(),rX=rd.object({operation:rd.string().valid("purge_stream"),schema:rd.string().custom(Zj).custom(tX).required(),table:rd.string().custom(eX).required()});function sX(e){return Xj.validateBySchema(e,rX)}a(sX,"purgeStreamValidator");lD.exports=sX});var mS=T((Cle,dD)=>{"use strict";var{handleHDBError:nX,hdb_errors:iX}=X(),{HTTP_STATUS_CODES:oX}=iX,aX=_D(),cX=st(),uX=ln();dD.exports=lX;async function lX(e){let t=aX(e);if(t)throw nX(t,t.message,oX.BAD_REQUEST,void 0,void 0,!0);uX.checkClusteringEnabled();let{schema:r,table:s}=e;return await cX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(lX,"purgeStream")});var TS=T((Dle,SD)=>{"use strict";var SS=ln(),_X=st(),hD=j(),sd=b(),Ui=ke(),dX=$(),pS=G(),{RemotePayloadObject:fX}=Pc(),{ErrorCode:fD}=require("nats"),ED=hD.get(sd.CONFIG_PARAMS.CLUSTERING_ENABLED),mD=hD.get(sd.CONFIG_PARAMS.CLUSTERING_NODENAME);SD.exports={clusterStatus:EX,buildNodeStatus:pD};async function EX(){let e={node_name:mD,is_enabled:ED,connections:[]};if(!ED)return e;let t=await SS.getAllNodeRecords();if(dX.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(EX,"clusterStatus");async function pD(e,t){let r=e.name,s=new fX(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 _X.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 hX(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 hX(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(hX,"NodeStatusObject")});var gS=T((Mle,TD)=>{"use strict";var{handleHDBError:mX,hdb_errors:pX}=X(),{HTTP_STATUS_CODES:SX}=pX,TX=st(),RX=ln(),RS=$(),nd=require("joi"),gX=Fe(),AX=2e3,OX=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});TD.exports=NX;async function NX(e){RX.checkClusteringEnabled();let t=gX.validateBySchema(e,OX);if(t)throw mX(t,t.message,SX.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 TX.getServerList(r??AX),_={};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(NX,"clusterNetwork")});var OD=T((vle,AD)=>{"use strict";var AS=require("joi"),RD=Fe(),{route_constraints:gD}=SE();AD.exports={setRoutesValidator:bX,deleteRoutesValidator:yX};function bX(e){let t=AS.object({server:AS.valid("hub","leaf").required(),routes:gD.required()});return RD.validateBySchema(e,t)}a(bX,"setRoutesValidator");function yX(e){let t=AS.object({routes:gD.required()});return RD.validateBySchema(e,t)}a(yX,"deleteRoutesValidator")});var NS=T((Hle,ID)=>{"use strict";var Mi=Er(),OS=$(),id=b(),ND=OD(),{handleHDBError:bD,hdb_errors:IX}=X(),{HTTP_STATUS_CODES:yD}=IX,wX="cluster routes successfully set",CX="cluster routes successfully deleted";ID.exports={setRoutes:LX,getRoutes:DX,deleteRoutes:UX};function LX(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:wX,set:o,skipped:i}}a(LX,"setRoutes");function DX(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(DX,"getRoutes");function UX(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:CX,deleted:i,skipped:o}}a(UX,"deleteRoutes")});var CD=T((Fle,wD)=>{"use strict";var Gc=require("alasql"),Pi=require("recursive-iterator"),Ss=G(),MX=$(),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,vX(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=PX(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 PX(e){return e.filter(t=>t[xc.PERMS_CRUD_ENUM.READ])}a(PX,"filterReadRestrictedAttrs");function vX(e,t,r,s,n){BX(e,t,r,s,n)}a(vX,"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 BX(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gc.yy.Insert?GX(e,t,r):e instanceof Gc.yy.Select?HX(e,t,r,s,n):e instanceof Gc.yy.Update?qX(e,t,r):e instanceof Gc.yy.Delete?FX(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(BX,"getRecordAttributesAST");function HX(e,t,r,s,n){if(!e){Ss.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(MX.isEmptyOrZeroLength(i)){Ss.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{Ss.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new 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{Ss.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new 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{Ss.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new 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{Ss.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(HX,"getSelectAttributes");function qX(e,t,r){if(!e){Ss.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(qX,"getUpdateAttributes");function FX(e,t,r){if(!e){Ss.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(FX,"getDeleteAttributes");function GX(e,t,r){if(!e){Ss.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(GX,"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"),br=G(),DD=require("prompt"),{promisify:xX}=require("util"),IS=b(),kX=require("fs-extra"),VX=require("path"),$X=$(),YX=uS(),UD=j();UD.initSync();var KX=require("moment"),WX=xX(DD.get),QX=VX.join(UD.getHdbBasePath(),IS.LICENSE_KEY_DIR_NAME,IS.LICENSE_FILE_NAME,IS.LICENSE_FILE_NAME);MD.exports={getFingerprint:JX,setLicense:zX,parseLicense:wS,register:jX,getRegistrationInfo:ZX};async function zX(e){if(e&&e.key&&e.company){try{br.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 br.error(r),br.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(zX,"setLicense");async function JX(){let e={};try{e=await od.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(JX,"getFingerprint");async function wS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=od.validateLicense(e,t);if(br.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(br.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(br.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{br.info("writing license to disk"),await kX.writeFile(QX,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(wS,"parseLicense");async function jX(){let e=await XX();return wS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(jX,"register");async function XX(){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){br.error(s)}let r;try{r=await WX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(XX,"promptForRegistration");async function ZX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await od.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if($X.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=YX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=KX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(ZX,"getRegistrationInfo")});var vD=T((Vle,PD)=>{"use strict";var eZ=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+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"}};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 tZ=ke(),MS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+tZ.SERVER_SUFFIX.ADMIN,this.password=r}};xD.exports=MS});var BS=T((jle,YD)=>{"use strict";var Go=require("path"),ud=require("fs-extra"),rZ=vD(),sZ=qD(),nZ=GD(),iZ=kD(),PS=Rr(),ko=$(),sr=Er(),cd=b(),Vc=ke(),{CONFIG_PARAMS:Xe}=cd,$c=G(),Yc=j(),VD=nn(),vS=st(),xo="clustering",oZ=1e4,$D=5;YD.exports={generateNatsConfig:cZ,removeNatsConfig:uZ,getHubConfigPath:aZ};function aZ(){let e=Yc.get(Xe.ROOTPATH);return Go.join(e,xo,Vc.NATS_CONFIG_FILES.HUB_SERVER)}a(aZ,"getHubConfigPath");async function cZ(e=!1,t=void 0){Yc.initSync();let r=Yc.get(Xe.ROOTPATH),s=Go.join(r,xo,Vc.PID_FILES.HUB),n=Go.join(r,xo,Vc.PID_FILES.LEAF),i=sr.getConfigFromFile(Xe.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(Xe.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=sr.getConfigFromFile(Xe.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(Xe.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(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ad(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ad(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await ad(Xe.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 iZ(te.username,VD.decrypt(te.hash))),N.push(new nZ(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 rZ(sr.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(Xe.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 sZ(sr.getConfigFromFile(Xe.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(cZ,"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 uZ(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(oZ),u=Go.join(Yc.get(Xe.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),$c.notify(e,"started.")}a(uZ,"removeNatsConfig")});var jD=T((Zle,JD)=>{"use strict";var yr=j(),lZ=rc(),ce=b(),Kc=ke(),_n=require("path"),{PACKAGE_ROOT:dd}=b(),KD=j(),_d=$(),Vo="/dev/null",_Z=_n.join(dd,"launchServiceScripts"),WD=_n.join(dd,"utility/scripts"),dZ=_n.join(WD,ce.HDB_RESTART_SCRIPT),QD=_n.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Kc.NATS_BINARY_NAME);function zD(){let t=lZ.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return _d.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:dd}}a(zD,"generateMainServerConfig");var fZ=9930;function EZ(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.HUB_SERVER),r=_n.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KD.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==fZ?"-"+s:""),script:QD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(EZ,"generateNatsHubServerConfig");var hZ=9940;function mZ(){yr.initSync(!0);let e=yr.get(ce.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.LEAF_SERVER),r=_n.join(yr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KD.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[yr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==hZ?"-"+s:""),script:QD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Vo,i.error_file=Vo),i}a(mZ,"generateNatsLeafServerConfig");function pZ(){yr.initSync();let e=_n.join(yr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:_Z,autorestart:!1};return yr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(pZ,"generateClusteringUpgradeV4ServiceConfig");function SZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return _d.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:WD},script:dZ}}a(SZ,"generateRestart");function TZ(){return{apps:[zD()]}}a(TZ,"generateAllServiceConfigs");JD.exports={generateAllServiceConfigs:TZ,generateMainServerConfig:zD,generateRestart:SZ,generateNatsHubServerConfig:EZ,generateNatsLeafServerConfig:mZ,generateClusteringUpgradeV4ServiceConfig:pZ}});var _U=T((r_e,lU)=>{"use strict";var Ae=b(),RZ=$(),dn=BS(),Wc=st(),qs=ke(),Qn=jD(),fd=j(),zn=G(),gZ=ln(),{startWorker:XD,onMessageFromWorkers:AZ}=Ze(),OZ=Fo(),t_e=require("util"),NZ=require("child_process"),bZ=require("fs"),{execFile:yZ}=NZ,pe;lU.exports={enterPM2Mode:IZ,start:Jn,stop:HS,reload:eU,restart:tU,list:qS,describe:sU,connect:fn,kill:UZ,startAllServices:MZ,startService:FS,getUniqueServicesList:nU,restartAllServices:PZ,isServiceRegistered:iU,reloadStopStart:oU,restartHdb:rU,deleteProcess:LZ,startClusteringProcesses:cU,startClusteringThreads:uU,isHdbRestartRunning:DZ,isClusteringRunning:BZ,stopClustering:vZ,reloadClustering:HZ};var Qc=!1;AZ(e=>{e.type==="restart"&&fd.initSync(!0)});function IZ(){Qc=!0}a(IZ,"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,wZ=10,ZD;function Jn(e,t=!1){if(Qc)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),!ZD&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<wZ&&(bZ.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&&qs.LOG_LEVEL_HIERARCHY[o]>=qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===qs.LOG_LEVELS.ERR||l===qs.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=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?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 CZ(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(CZ,"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 LZ(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(LZ,"deleteProcess");async function rU(){await Jn(Qn.generateRestart())}a(rU,"restartHdb");async function DZ(){let e=await qS();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(DZ,"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 UZ(){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(UZ,"kill");async function MZ(){try{await cU(),await uU(),await Jn(Qn.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=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 PZ(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(PZ,"restartAllServices");async function iU(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(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=RZ.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=XD(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Wc.createWorkQueueStream(qs.WORK_QUEUE_CONSUMER_NAMES),await Wc.updateIngestStreamConsumer(),await Wc.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){zn.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(uU,"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 aU.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await HS(t)}}a(vZ,"stopClustering");async function BZ(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await iU(t)===!1)return!1}return!0}a(BZ,"isClusteringRunning");async function HZ(){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(HZ,"reloadClustering")});var pd=T((n_e,SU)=>{"use strict";var qZ=require("minimist"),{isMainThread:kS,parentPort:EU}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:zc}=Ve,Fs=G(),VS=$(),Ed=BS(),$o=st(),GS=ke(),hU=Er(),Gs=_U(),dU=Fo(),FZ=aE(),{restartWorkers:hd,onMessageByType:GZ}=Ze(),{handleHDBError:xZ,hdb_errors:kZ}=X(),{HTTP_STATUS_CODES:VZ}=kZ,md=j();md.initSync();var Jc=`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.",fU="Clustering is not enabled so cannot be restarted",YZ="Invalid service",Yo,$r;SU.exports={restart:mU,restartService:$S};kS&&GZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?$S({service:e.workerType}):mU({operation:"restart"})});async function mU(e){$r=Object.keys(e).length===0,Yo=await Gs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=qZ(process.argv);if(t.service){await $S(t);return}if($r&&!Yo){console.error($Z);return}if($r&&console.log(Jc),Yo){Gs.enterPM2Mode(),Fs.notify(Jc);let r=FZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return VS.isEmptyOrZeroLength(Object.keys(r))||hU.updateConfigValue(void 0,void 0,r,!0,!0),WZ(),Jc}return kS?(Fs.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 xZ(new Error,YZ,VZ.BAD_REQUEST,void 0,void 0,!0);if(Yo=await Gs.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}$r&&console.log("Restarting clustering"),Fs.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}$r&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case zc.harperdb:case zc.http_workers:if($r&&!Yo){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}$r&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),$r?await Gs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{hd("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Fs.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a($S,"restartService");async function KZ(){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(KZ,"postDummyNatsMsg");async function WZ(){await pU(),await Gs.restart(Ve.HDB_PROC_DESCRIPTOR),await VS.async_set_timeout(2e3),md.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await xS(),$r&&(await $o.closeConnection(),process.exit(0))}a(WZ,"restartPM2Mode");async function pU(){if(!hU.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dU.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await Ed.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await xS(),$r&&await $o.closeConnection();else{await KZ(),await Ed.generateNatsConfig(!0),Yo?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dU.getHDBProcessInfo()).clustering.forEach(n=>{Fs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await VS.async_set_timeout(3e3),await xS(),await $o.updateLocalStreams(),$r&&await $o.closeConnection(),Fs.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:QZ}=X(),{HDB_ERROR_MSGS:zZ,HTTP_STATUS_CODES:JZ}=QZ,YS=G();wU.exports={getRolePermissions:XZ};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),[jc]:t[jc],[WS]:t[WS],[QS]:t[QS]}),"attr_perms_template"),gU=a((e,t=!1)=>({attribute_name:e,describe:t,[jc]:t}),"timestamp_attr_perms_template"),{READ:jc,INSERT:WS,UPDATE:QS}=ir.PERMS_CRUD_ENUM,bU=Object.values(ir.PERMS_CRUD_ENUM),yU=[jc,WS,QS];function XZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[ir.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=ZZ(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,zZ.OUTDATED_PERMS_TRANSLATION_ERROR,JZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
-
${r.stack}`;throw YS.error(s),TU(new Error)}}}a(XZ,"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]=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],_=t5(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(ZZ,"translateRolePermissions");function e5(e){let t=OU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=KS(!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=gU(d,l[jc])),_[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||r5(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(t5,"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 r5(e,t){yU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(r5,"checkForHashPerms")});var LU={};Qe(LU,{Resources:()=>Sd,keyArrayToString:()=>Ko,resetResources:()=>s5,resources:()=>jn});function s5(){return jn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,jn,Xc=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(s5,"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:()=>l5,login:()=>d5,logout:()=>f5,start:()=>_5});function l5(){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?a5?o5:[]:i5?n5:[];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,wt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===wt.AUTH_AUDIT_STATUS.SUCCESS?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 u5&&(Hi.get(h)||(Hi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Xn({error:A.message},e)})}Hi.set(s,d),c5&&l(d.username,wt.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.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")&&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 Bi);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(qU,{port:t||"all"}),MU||(MU=!0,setInterval(()=>{Hi=new Map},Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BU.user.addListener(()=>{Hi=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 PU,Rd,vU,Yr,wt,gd,BU,DU,n5,i5,o5,a5,UU,Td,HU,c5,u5,Hi,MU,Ad=Te(()=>{PU=D(Rr());Mr();Xc();Rd=D(Mc());fe();vU=require("uuid"),Yr=D(j()),wt=D(b()),gd=D(G()),BU=D(nc());zS();Wo();DU=(0,gd.loggerWithTag)("auth-event");Yr.initSync();n5=Yr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),i5=Yr.get(wt.CONFIG_PARAMS.HTTP_CORS),o5=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),a5=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HU=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,c5=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,u5=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;lt.onInvalidatedUser(()=>{Hi=new Map});a(l5,"bypassAuth");a(qU,"authentication");a(_5,"start");a(d5,"login");a(f5,"logout")});var YU=T((T_e,$U)=>{"use strict";var Se=require("joi"),FU=require("fs-extra"),GU=require("path"),hn=Fe(),xU=j(),kU=b(),VU=G(),{hdb_errors:E5}=X(),{HDB_ERROR_MSGS:xt}=E5,En=/^[a-zA-Z0-9-_]+$/;$U.exports={getDropCustomFunctionValidator:m5,setCustomFunctionValidator:p5,addComponentValidator:g5,dropCustomFunctionProjectValidator:A5,packageComponentValidator:O5,deployComponentValidator:N5,setComponentFileValidator:S5,getComponentFileValidator:R5,dropComponentFileValidator:T5};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(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return VU.error(s),r.message(xt.VALIDATION_ERR)}}a(Od,"checkProjectExists");function eu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(eu,"checkFilePath");function h5(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(xt.NO_FILE)}catch(n){return VU.error(n),s.message(xt.VALIDATION_ERR)}}a(h5,"checkFileExists");function m5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(En).custom(h5.bind(null,e.project,e.type)).custom(eu).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return hn.validateBySchema(e,t)}a(m5,"getDropCustomFunctionValidator");function p5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(eu).required(),function_content:Se.string().required()});return hn.validateBySchema(e,t)}a(p5,"setCustomFunctionValidator");function S5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":xt.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(S5,"setComponentFileValidator");function T5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:Se.string().custom(eu).optional()});return hn.validateBySchema(e,t)}a(T5,"dropComponentFileValidator");function R5(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(R5,"getComponentFileValidator");function g5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return hn.validateBySchema(e,t)}a(g5,"addComponentValidator");function A5(e){let t=Se.object({project:Se.string().pattern(En).custom(Od.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return hn.validateBySchema(e,t)}a(A5,"dropCustomFunctionProjectValidator");function O5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return hn.validateBySchema(e,t)}a(O5,"packageComponentValidator");function N5(e){let t=Se.object({project:Se.string().pattern(En).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return hn.validateBySchema(e,t)}a(N5,"deployComponentValidator")});var Id=T((g_e,XU)=>{"use strict";var Nd=require("joi"),bd=require("path"),KU=require("fs-extra"),{exec:b5}=require("child_process"),y5=require("util"),WU=y5.promisify(b5),tu=b(),{handleHDBError:Qo,hdb_errors:I5}=X(),{HTTP_STATUS_CODES:zo}=I5,ru=j(),w5=Fe(),Jo=G();ru.initSync();var JS=ru.get(tu.CONFIG_PARAMS.COMPONENTSROOT),QU="npm install --omit=dev --json",C5=`${QU} --dry-run`;XU.exports={installModules:M5,auditModules:P5,installAllRootModules:L5,uninstallRootModule:D5,linkHarperdb:U5};async function L5(e=!1){await yd(),await su(e?"npm install --ignore-scripts":"npm install",ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(L5,"installAllRootModules");async function D5(e){await su(`npm uninstall ${e}`,ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(D5,"uninstallRootModule");async function U5(){await yd(),await su(`npm link ${tu.PACKAGE_ROOT}`,ru.get(tu.CONFIG_PARAMS.ROOTPATH))}a(U5,"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(`
|
|
8
|
+
`,"")}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:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:It.get(Oe.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),Vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(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(It.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 jt(){let e=Ss||await w_(),t=Io||await Ic(),r=wo||await aC();return{connection:e,jsm:t,js:r}}a(jt,"getNATSReferences");async function KJ(e){let t=It.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 jt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage: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 jt(),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 jt();await t.streams.delete(e)}a(WJ,"deleteLocalStream");async function QJ(e){let{connection:t}=await jt(),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 jt(),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 jt(),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 jJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=uC(s,r);let{js:n}=await jt(),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(jJ,"publishToStream");function uC(e,t){t===void 0&&(t=HJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(uC,"addNatsMsgHeader");function wc(e){e=e.toLowerCase();let t=yc.join(It.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 XJ(e){let{jsm:t}=await jt(),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(XJ,"createWorkQueueStream");async function ZJ(){let{jsm:e}=await jt();(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 jt(),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 jt(),{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 jt(),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 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(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(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=b_.createNatsTableStreamName(e,t),{jsm:s}=await jt();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(It.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=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(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:Xt,hdb_errors:E2}=X(),{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 Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Mo(e),!await Do.checkSchemaExists(e.schema))throw Xt(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 Xt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Lo.validateTableResidence(e.residence),!await Do.checkSchemaTableExists(e.schema,e.table))throw Xt(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 Xt(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 Xt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Mo(e);let n=await Do.checkSchemaExists(e.schema);if(n)throw Xt(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 Xt(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 Xt(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 Xt(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 Xt(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 Xt(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 Xt(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 Xt(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=j(),{handleHDBError:OC,hdb_errors:I2}=X(),{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=j(),{handleHDBError:M2,hdb_errors:P2}=X(),{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}=X(),{HDB_ERROR_MSGS:je,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(je.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(je.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(je.SCHEMA_NOT_FOUND(d),r)}continue}nt(je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(je.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){nt(je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{V2.includes(l)||nt(je.INVALID_PERM_KEY(l),r,o,u)}),Object.values(vo).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||nt(je.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):nt(je.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){nt(je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(je.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!$2.includes(p)&&p!==vo.DELETE&&nt(je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){nt(je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){nt(je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}vC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||nt(je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(je.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;nt(je.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 je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Po.ROLE_TYPES_ENUM.SUPER_USER:Po.ROLE_TYPES_ENUM.CLUSTER_USER;return je.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:je.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(),j2=Ai(),yp=qC(),Ip=an(),X2=require("uuid").v4,Z2=require("util"),v_=b(),e4=$(),wp=GC.searchByValue,t4=GC.searchByHash,r4=Z2.promisify(j2.delete),s4=vs(),n4=No(),{hdb_errors:i4,handleHDBError:Bo}=X(),{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=X2());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=j(),$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=j(),R4=KC(),Up=require("path"),WC=require("fs-extra"),{once:g4}=require("events"),{handleHDBError:A4,hdb_errors:O4}=X(),{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("] ["),Pt=se[0],Pe=se[1];se.splice(0,2),Y={timestamp:te,thread:Pt,level:Pe,tags:se,message:""},K=B.index+x.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(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,XC)=>{"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=j();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(),jC={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(jC))}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");XC.exports={addUpdateNodeValidator:B4,validation_schema:jC}});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}=X(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=k4,Dc=G(),nL=Xl(),Vp=gr(),V4=xr().update,$4=Bp(),Y4=an(),{UserEventMsg:K4}=ds(),Kn=j();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:j4,validateOperationToken:Z4,refreshOperationToken:X4,validateRefreshToken:oL};async function j4(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(j4,"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 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 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(X4,"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:jue,getTransactionAuditStorePath:Xue}=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 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}};RL.exports=jp});var Fo=T((ile,bL)=>{"use strict";var f3=require("fs-extra"),E3=require("path"),Gt=require("systeminformation"),Wn=G(),h3=st(),Xp=ke(),$_=b(),m3=TL(),NL=pi(),{getThreadInfo:AL}=Ze(),cS=j();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 Gt.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 Gt.cpu();l.cpu_speed=await Gt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:A,...I}=await Gt.currentLoad();return I.cpus=[],A.forEach(N=>{let{raw_load:Y,raw_load_idle:Q,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(eS,"getCPUInfo");async function tS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.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 Gt.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 Gt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Gt.fsStats();return e.read_write=_,e.size=await Gt.fsSize(),e}catch(t){return 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 Gt.networkInterfaceDefault(),e.latency=await Gt.inetChecksite("google.com"),(await Gt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Gt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return 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 Gt.osInfo();e=c;let u=await Gt.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(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(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=j();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}=X(),{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}=X(),{HTTP_STATUS_CODES:BL}=J3,{NodeSubscription:HL}=qo();qL.exports=j3;async function j3(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(j3,"reviewSubscriptions")});var J_=T((hle,xL)=>{"use strict";var{handleHDBError:Q_,hdb_errors:X3}=X(),{HTTP_STATUS_CODES:z_}=X3,{addUpdateNodeValidator:Z3}=F_(),vc=G(),GL=b(),FL=ke(),ej=$(),dS=st(),Bc=ln(),tj=j(),rj=_S(),{Node:sj,NodeSubscription:nj}=qo(),{broadcast:ij}=Ze(),oj="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",aj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",cj=tj.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=uj;async function uj(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(!ej.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 rj(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=oj,o;let c=Bc.buildNodePayloads(n,cj,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 nj(E.schema,E.table,E.publish,E.subscribe))}let l=new sj(s,_,u.system_info);return await Bc.upsertNodeRecord(l),ij({type:"nats_update"}),i.length>0?o.message=aj:o.message=`Successfully added '${s}' to manifest`,o}a(uj,"addNode")});var ES=T((ple,$L)=>{"use strict";var{handleHDBError:j_,hdb_errors:lj}=X(),{HTTP_STATUS_CODES:X_}=lj,{addUpdateNodeValidator:_j}=F_(),Hc=G(),VL=b(),kL=ke(),dj=$(),fS=st(),qc=ln(),fj=j(),{cloneDeep:Ej}=require("lodash"),hj=_S(),{NodeSubscription:mj}=qo(),{broadcast:pj}=Ze(),Sj="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",Tj="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Rj=fj.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME);$L.exports=gj;async function gj(e){Hc.trace("updateNode called with:",e),qc.checkClusteringEnabled();let t=_j(e);if(t)throw j_(t,t.message,X_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=Ej(await qc.getNodeRecord(r));if(dj.isEmptyOrZeroLength(s))throw j_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,X_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await hj(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=Sj,o;let c=qc.buildNodePayloads(n,Rj,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 j_(new Error,l,X_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw j_(new Error,_,X_.INTERNAL_SERVER_ERROR,"error",_)}Hc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Hc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await fS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await Aj(s[0],n,u.system_info),i.length>0?o.message=Tj:o.message=`Successfully updated '${r}'`,o}a(gj,"updateNode");async function Aj(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 mj(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await qc.upsertNodeRecord(s),pj({type:"nats_update"})}a(Aj,"updateNodeTable")});var zL=T((Tle,QL)=>{"use strict";var WL=require("joi"),{string:YL}=WL.types(),Oj=Fe(),KL=b(),Nj=j(),bj=ke();QL.exports=yj;function yj(e){let t=YL.invalid(Nj.get(KL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(bj.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 Oj.validateBySchema(e,r)}a(yj,"removeNodeValidator")});var ed=T((gle,tD)=>{"use strict";var{handleHDBError:JL,hdb_errors:Ij}=X(),{HTTP_STATUS_CODES:jL}=Ij,wj=zL(),Fc=G(),XL=ln(),Cj=$(),Z_=b(),ZL=ke(),eD=st(),Lj=j(),{RemotePayloadObject:Dj}=Pc(),{NodeSubscription:Uj}=qo(),Mj=dc(),Pj=Ai(),{broadcast:vj}=Ze(),Bj=Lj.get(Z_.CONFIG_PARAMS.CLUSTERING_NODENAME);tD.exports=Hj;async function Hj(e){Fc.trace("removeNode called with:",e),XL.checkClusteringEnabled();let t=wj(e);if(t)throw JL(t,t.message,jL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await XL.getNodeRecord(r);if(Cj.isEmptyOrZeroLength(s))throw JL(new Error,`Node '${r}' was not found.`,jL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new Dj(Z_.OPERATIONS_ENUM.REMOVE_NODE,Bj,[]),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 Uj(l.schema,l.table,!1,!1);await eD.updateWorkStream(d,r)}let c=new Mj(Z_.SYSTEM_SCHEMA_NAME,Z_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pj.deleteRecord(c),vj({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(Hj,"removeNode")});var nD=T((Ole,sD)=>{"use strict";var rD=require("joi"),{string:qj,array:Fj}=rD.types(),Gj=Fe(),xj=F_();sD.exports=kj;function kj(e){let t=rD.object({operation:qj.valid("configure_cluster").required(),connections:Fj.items(xj.validation_schema).required()});return Gj.validateBySchema(e,t)}a(kj,"configureClusterValidator")});var hS=T((ble,uD)=>{"use strict";var Vj=b(),td=G(),$j=$(),Yj=ed(),Kj=J_(),iD=ln(),Wj=nD(),{handleHDBError:oD,hdb_errors:Qj}=X(),{HTTP_STATUS_CODES:aD}=Qj,zj="Configure cluster complete.",Jj="Failed to configure the cluster. Check the logs for more details.",jj="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uD.exports=Xj;async function Xj(e){td.trace("configure cluster called with:",e),iD.checkClusteringEnabled();let t=Wj(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(Yj,{operation:Vj.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(Kj,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($j.isEmptyOrZeroLength(u))return{message:zj,connections:_};if(l)return{message:jj,failed_nodes:u,connections:_};throw oD(new Error,Jj,aD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(Xj,"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"),Zj=Fe(),{validateSchemaExists:eX,validateTableExists:tX,validateSchemaName:rX}=Ds(),sX=rd.object({operation:rd.string().valid("purge_stream"),schema:rd.string().custom(eX).custom(rX).required(),table:rd.string().custom(tX).required()});function nX(e){return Zj.validateBySchema(e,sX)}a(nX,"purgeStreamValidator");lD.exports=nX});var mS=T((Cle,dD)=>{"use strict";var{handleHDBError:iX,hdb_errors:oX}=X(),{HTTP_STATUS_CODES:aX}=oX,cX=_D(),uX=st(),lX=ln();dD.exports=_X;async function _X(e){let t=cX(e);if(t)throw iX(t,t.message,aX.BAD_REQUEST,void 0,void 0,!0);lX.checkClusteringEnabled();let{schema:r,table:s}=e;return await uX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(_X,"purgeStream")});var TS=T((Dle,SD)=>{"use strict";var SS=ln(),dX=st(),hD=j(),sd=b(),Ui=ke(),fX=$(),pS=G(),{RemotePayloadObject:EX}=Pc(),{ErrorCode:fD}=require("nats"),ED=hD.get(sd.CONFIG_PARAMS.CLUSTERING_ENABLED),mD=hD.get(sd.CONFIG_PARAMS.CLUSTERING_NODENAME);SD.exports={clusterStatus:hX,buildNodeStatus:pD};async function hX(){let e={node_name:mD,is_enabled:ED,connections:[]};if(!ED)return e;let t=await SS.getAllNodeRecords();if(fX.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(hX,"clusterStatus");async function pD(e,t){let r=e.name,s=new EX(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 dX.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 mX(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 mX(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(mX,"NodeStatusObject")});var gS=T((Mle,TD)=>{"use strict";var{handleHDBError:pX,hdb_errors:SX}=X(),{HTTP_STATUS_CODES:TX}=SX,RX=st(),gX=ln(),RS=$(),nd=require("joi"),AX=Fe(),OX=2e3,NX=nd.object({timeout:nd.number().min(1),connected_nodes:nd.boolean(),routes:nd.boolean()});TD.exports=bX;async function bX(e){gX.checkClusteringEnabled();let t=AX.validateBySchema(e,NX);if(t)throw pX(t,t.message,TX.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 RX.getServerList(r??OX),_={};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(bX,"clusterNetwork")});var OD=T((vle,AD)=>{"use strict";var AS=require("joi"),RD=Fe(),{route_constraints:gD}=SE();AD.exports={setRoutesValidator:yX,deleteRoutesValidator:IX};function yX(e){let t=AS.object({server:AS.valid("hub","leaf").required(),routes:gD.required()});return RD.validateBySchema(e,t)}a(yX,"setRoutesValidator");function IX(e){let t=AS.object({routes:gD.required()});return RD.validateBySchema(e,t)}a(IX,"deleteRoutesValidator")});var NS=T((Hle,ID)=>{"use strict";var Mi=hr(),OS=$(),id=b(),ND=OD(),{handleHDBError:bD,hdb_errors:wX}=X(),{HTTP_STATUS_CODES:yD}=wX,CX="cluster routes successfully set",LX="cluster routes successfully deleted";ID.exports={setRoutes:DX,getRoutes:UX,deleteRoutes:MX};function DX(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:CX,set:o,skipped:i}}a(DX,"setRoutes");function UX(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(UX,"getRoutes");function MX(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:LX,deleted:i,skipped:o}}a(MX,"deleteRoutes")});var CD=T((Fle,wD)=>{"use strict";var Gc=require("alasql"),Pi=require("recursive-iterator"),Ts=G(),PX=$(),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,BX(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=vX(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 vX(e){return e.filter(t=>t[xc.PERMS_CRUD_ENUM.READ])}a(vX,"filterReadRestrictedAttrs");function BX(e,t,r,s,n){HX(e,t,r,s,n)}a(BX,"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 HX(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gc.yy.Insert?xX(e,t,r):e instanceof Gc.yy.Select?qX(e,t,r,s,n):e instanceof Gc.yy.Update?FX(e,t,r):e instanceof Gc.yy.Delete?GX(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(HX,"getRecordAttributesAST");function qX(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(PX.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(qX,"getSelectAttributes");function FX(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(FX,"getUpdateAttributes");function GX(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(GX,"getDeleteAttributes");function xX(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(xX,"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:kX}=require("util"),IS=b(),VX=require("fs-extra"),$X=require("path"),YX=$(),KX=uS(),UD=j();UD.initSync();var WX=require("moment"),QX=kX(DD.get),zX=$X.join(UD.getHdbBasePath(),IS.LICENSE_KEY_DIR_NAME,IS.LICENSE_FILE_NAME,IS.LICENSE_FILE_NAME);MD.exports={getFingerprint:jX,setLicense:JX,parseLicense:wS,register:XX,getRegistrationInfo:eZ};async function JX(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(JX,"setLicense");async function jX(){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(jX,"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 VX.writeFile(zX,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 XX(){let e=await ZX();return wS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(XX,"register");async function ZX(){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 QX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(ZX,"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(YX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=KX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=WX.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((jle,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:Xe}=cd,$c=G(),Yc=j(),VD=nn(),vS=st(),xo="clustering",aZ=1e4,$D=5;YD.exports={generateNatsConfig:uZ,removeNatsConfig:lZ,getHubConfigPath:cZ};function cZ(){let e=Yc.get(Xe.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(Xe.ROOTPATH),s=Go.join(r,xo,Vc.PID_FILES.HUB),n=Go.join(r,xo,Vc.PID_FILES.LEAF),i=sr.getConfigFromFile(Xe.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(Xe.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=sr.getConfigFromFile(Xe.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(Xe.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(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ad(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ad(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await ad(Xe.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(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(Xe.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(Xe.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(Xe.ROOTPATH),xo,r);await ud.writeFile(u,c),await ud.remove(u),$c.notify(e,"started.")}a(lZ,"removeNatsConfig")});var jD=T((Zle,JD)=>{"use strict";var Ir=j(),_Z=rc(),ce=b(),Kc=ke(),_n=require("path"),{PACKAGE_ROOT:dd}=b(),KD=j(),_d=$(),Vo="/dev/null",dZ=_n.join(dd,"launchServiceScripts"),WD=_n.join(dd,"utility/scripts"),fZ=_n.join(WD,ce.HDB_RESTART_SCRIPT),QD=_n.resolve(dd,"dependencies",`${process.platform}-${process.arch}`,Kc.NATS_BINARY_NAME);function zD(){let t=_Z.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return _d.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:dd}}a(zD,"generateMainServerConfig");var EZ=9930;function hZ(){Ir.initSync(!0);let e=Ir.get(ce.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.HUB_SERVER),r=_n.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KD.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==EZ?"-"+s:""),script:QD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.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(ce.CONFIG_PARAMS.ROOTPATH),t=_n.join(e,"clustering",Kc.NATS_CONFIG_FILES.LEAF_SERVER),r=_n.join(Ir.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=KD.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Kc.LOG_LEVEL_FLAGS[Ir.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==mZ?"-"+s:""),script:QD,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Ir.get(ce.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(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:dZ,autorestart:!1};return Ir.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Vo,t.error_file=Vo),t}a(SZ,"generateClusteringUpgradeV4ServiceConfig");function TZ(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return _d.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=_d.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd: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=jD(),fd=j(),zn=G(),AZ=ln(),{startWorker:XD,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=XD(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"),XD(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}=X(),{HTTP_STATUS_CODES:$Z}=VZ,md=j();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}=X(),{HDB_ERROR_MSGS:JZ,HTTP_STATUS_CODES:jZ}=zZ,YS=G();wU.exports={getRolePermissions:ZZ};var vi=Object.create(null),XZ=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),[jc]:t[jc],[WS]:t[WS],[QS]:t[QS]}),"attr_perms_template"),gU=a((e,t=!1)=>({attribute_name:e,describe:t,[jc]:t}),"timestamp_attr_perms_template"),{READ:jc,INSERT:WS,UPDATE:QS}=ir.PERMS_CRUD_ENUM,bU=Object.values(ir.PERMS_CRUD_ENUM),yU=[jc,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]=XZ(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,jZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
+
${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[jc])),_[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:()=>jn});function n5(){return jn=new Sd}function Ko(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,jn,Xc=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,wt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===wt.AUTH_AUDIT_STATUS.SUCCESS?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,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Xn({error:A.message},e)})}Hi.set(s,d),u5&&l(d.username,wt.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.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")&&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 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(wt.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,wt,gd,BU,DU,i5,o5,a5,c5,UU,Td,HU,u5,l5,Hi,MU,Ad=Te(()=>{PU=D(gr());Pr();Xc();Rd=D(Mc());fe();vU=require("uuid"),Kr=D(j()),wt=D(b()),gd=D(G()),BU=D(nc());zS();Wo();DU=(0,gd.loggerWithTag)("auth-event");Kr.initSync();i5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),o5=Kr.get(wt.CONFIG_PARAMS.HTTP_CORS),a5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),c5=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),UU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Td=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HU=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,u5=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,l5=Kr.get(wt.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=j(),kU=b(),VU=G(),{hdb_errors:h5}=X(),{HDB_ERROR_MSGS:xt}=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(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return VU.error(s),r.message(xt.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(xt.NO_FILE)}catch(n){return VU.error(n),s.message(xt.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":xt.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":xt.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":xt.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":xt.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":xt.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":xt.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":xt.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":xt.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":xt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:Se.string().optional()});return hn.validateBySchema(e,t)}a(b5,"deployComponentValidator")});var Id=T((g_e,XU)=>{"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}=X(),{HTTP_STATUS_CODES:zo}=w5,ru=j(),C5=Fe(),Jo=G();ru.initSync();var JS=ru.get(tu.CONFIG_PARAMS.COMPONENTSROOT),QU="npm install --omit=dev --json",L5=`${QU} --dry-run`;XU.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(`
|
|
10
10
|
`,""))}return s&&!s.includes("Debugger listening")&&Jo.error("Error running NPM command:",e,s),Jo.trace(r,s),r.replace(`
|
|
11
|
-
`,"")}a(su,"runCommand");async function
|
|
11
|
+
`,"")}a(su,"runCommand");async function P5(e){Jo.info(`starting installModules for request: ${e}`);let t=jU(e);if(t)throw Qo(t,t.message,zo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?L5:QU;await yd(),await JU(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=bd.join(JS,u),l,d=null;try{let{stdout:f,stderr:E}=await WU(n,{cwd:_});l=f?f.replace(`
|
|
12
12
|
`,""):null,d=E?E.replace(`
|
|
13
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=zU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Jo.info(`finished installModules with response ${i}`),i}a(
|
|
14
|
-
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(zU,"parseNPMStdErr");async function P5(e){Jo.info(`starting auditModules for request: ${e}`);let t=jU(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(P5,"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 jU(e){let t=Nd.object({projects:Nd.array().min(1).items(Nd.string()).required(),dry_run:Nd.boolean().default(!1)});return w5.validateBySchema(e,t)}a(jU,"modulesValidator")});var XS=T((O_e,sM)=>{"use strict";var jo=require("fs-extra"),jS=require("path"),wd=G(),ZU=$(),Cd=b(),rM=j(),v5=Er();sM.exports=B5;async function B5(){let e=H5(),t=rM.get(Cd.CONFIG_PARAMS.ROOTPATH),r=jS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.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(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(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 eM(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":jS.extname(e)||await jo.pathExists(e)?"file:":"github:"}a(eM,"getPkgPrefix");async function tM(e,t,r){wd.trace("npm installing components package.json",t),await jo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(rM.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await jo.writeFile(e,JSON.stringify(r,null," ")):await jo.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"),xs=YU(),pt=G(),Me=b(),it=j(),nu=Er(),q5=$(),{PACKAGE_ROOT:F5}=b(),{handleHDBError:St,hdb_errors:G5}=X(),{basename:x5}=require("path"),k5=XS(),oM=j(),V5=b(),{Readable:$5}=require("stream"),{isMainThread:Y5}=require("worker_threads"),{HDB_ERROR_MSGS:qi,HTTP_STATUS_CODES:Tt}=G5,K5=le.join(F5,"application-template"),nM=le.join(it.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function W5(){pt.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 St(new Error,qi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(W5,"customFunctionsStatus");function Q5(){pt.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 St(new Error,qi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(Q5,"getCustomFunctions");function z5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.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 St(new Error,qi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(z5,"getCustomFunction");function J5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.setCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.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 St(new Error,qi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(J5,"setCustomFunction");function j5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.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 St(new Error,qi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(j5,"dropCustomFunction");function X5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.addComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.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(K5,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,qi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(X5,"addComponent");function Z5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.dropCustomFunctionProjectValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function project");let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=it.get(Me.CONFIG_PARAMS.APPS);if(!q5.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 St(new Error,qi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(Z5,"dropCustomFunctionProject");async function e8(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.packageComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;pt.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(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(e8,"packageComponent");async function t8(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.deployComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(pt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=$5.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 k5();let f=oM.get(V5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(Y5)return;let c=new Map;c.isWorker=!0;let u=(Dd(),Z(Ld)),_;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 pt.info("Installed component"),`Successfully deployed: ${s}`}a(t8,"deployComponent");async function r8(){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(r8,"getComponents");async function s8(e){let t=xs.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.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(s8,"getComponentFile");async function n8(e){let t=xs.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.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(n8,"setComponentFile");async function i8(e){let t=xs.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(it.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),nu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(i8,"dropComponent");aM.exports={customFunctionsStatus:W5,getCustomFunctions:Q5,getCustomFunction:z5,setCustomFunction:J5,dropCustomFunction:j5,addComponent:X5,dropCustomFunctionProject:Z5,packageComponent:e8,deployComponent:t8,getComponents:r8,getComponentFile:s8,setComponentFile:n8,dropComponent:i8}});var rT=T((w_e,uM)=>{"use strict";var ks=require("joi"),cM=Fe();uM.exports={readTransactionLogValidator:o8,deleteTransactionLogsBeforeValidator:a8};function o8(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return cM.validateBySchema(e,t)}a(o8,"readTransactionLogValidator");function a8(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return cM.validateBySchema(e,t)}a(a8,"deleteTransactionLogsBeforeValidator")});var Md=T((L_e,EM)=>{"use strict";var sT=b(),Ud=st(),lM=$(),_M=j(),dM=nn(),{handleHDBError:Xo,hdb_errors:c8}=X(),{HTTP_STATUS_CODES:Zo}=c8,{readTransactionLogValidator:u8,deleteTransactionLogsBeforeValidator:l8}=rT(),fM="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.";EM.exports={readTransactionLog:f8,deleteTransactionLogsBefore:E8};async function*f8(e){let t=u8(e);if(t)throw Xo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(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 Xo(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(f8,"readTransactionLog");async function E8(e){let t=l8(e);if(t)throw Xo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(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 Xo(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=_8,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=d8):d=(await Ud.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(E8,"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(),h8=SM(),{HDB_ERROR_MSGS:m8}=dr(),oT=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 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 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 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=Gr(),Pd=Fr(),Wr=U_(),au=pi(),uT=Ai(),p8=gp(),S8=UC(),cu=Rr(),vd=Lp(),dt=G(),T8=Mp(),R8=J_(),g8=ES(),A8=ed(),O8=hS(),N8=mS(),b8=TS(),y8=gS(),lT=NS(),mn=$(),I8=CD(),_T=CS(),OM=pd(),Kr=b(),NM=CU(),w8=Fo(),bM=Mc(),yM=(Ad(),Z(Zc)),IM=Er(),Ir=tT(),C8=require("alasql"),wM=Md(),CM=Id(),LM=aT(),{handleHDBError:or,hdb_errors:DM}=X(),{HDB_ERROR_MSGS:Ct,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},L8="catchup",D8="handleGetJob",U8="handleGetJobsByStartDate",Bd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},M8=[Wr.createTable.name,Wr.createAttribute.name,Wr.dropTable.name,Wr.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(Wr.createSchema.name,new q(!0,[]));v.set(Wr.createTable.name,new q(!0,[]));v.set(Wr.createAttribute.name,new q(!1,[Zn]));v.set(Wr.dropSchema.name,new q(!0,[]));v.set(Wr.dropTable.name,new q(!0,[]));v.set(Wr.dropAttribute.name,new q(!0,[]));v.set(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(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(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(b8.clusterStatus.name,new q(!0,[]));v.set(y8.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(p8.name,new q(!0,[]));v.set(S8.name,new q(!0,[pn]));v.set(w8.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(Ir.customFunctionsStatus.name,new q(!0,[]));v.set(Ir.getCustomFunctions.name,new q(!0,[]));v.set(Ir.getComponents.name,new q(!0,[]));v.set(Ir.getComponentFile.name,new q(!0,[]));v.set(Ir.setComponentFile.name,new q(!0,[]));v.set(Ir.dropComponent.name,new q(!0,[]));v.set(Ir.getCustomFunction.name,new q(!0,[]));v.set(Ir.setCustomFunction.name,new q(!0,[]));v.set(Ir.dropCustomFunction.name,new q(!0,[]));v.set(Ir.addComponent.name,new q(!0,[]));v.set(Ir.dropCustomFunctionProject.name,new q(!0,[]));v.set(Ir.packageComponent.name,new q(!0,[]));v.set(Ir.deployComponent.name,new q(!0,[]));v.set(_T.getRegistrationInfo.name,new q(!1,[]));v.set(cu.userInfo.name,new q(!1,[]));v.set(au.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(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(Kr.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[UM]));v.set(Kr.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[pn]));v.set(Kr.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Zn]));v.set(Kr.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[Fi]));BM.exports={verifyPerms:v8,verifyPermsAst:P8,verifyBulkLoadAttributePerms:H8};function P8(e,t,r){if(mn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(mn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),or(new Error);if(mn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),or(new Error);try{let s=new LM,n=new I8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw dt.info("No schemas defined in verifyPermsAst(), will not continue."),or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&MM[r])throw or(new Error,Ct.DROP_SYSTEM,iu.FORBIDDEN);if(c&&!u)return null;let _=NM.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=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(P8,"verifyPermsAst");function v8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),or(new Error,Ct.DEFAULT_INVALID_REQUEST,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 dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Kr.SYSTEM_SCHEMA_NAME)||n===Kr.SYSTEM_SCHEMA_NAME;if(l&&MM[r])throw or(new Error,Ct.DROP_SYSTEM,iu.FORBIDDEN);if(u&&!l||_===!0&&(r===Wr.createSchema.name||r===Wr.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=NM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===gM||r===AM){if(n===Kr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===gM&&(!d[n]||!d[n][ou]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===AM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ou]))return c.handleInvalidItem(Ct.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&&Kr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Kr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Kr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=B8(e),h=fT(e.hdb_user.role.permission,n,i);return dT(E,h,r,i,n,c,s),c.getPermsResponse()}a(v8,"verifyPerms");function vM(e,t,r,s,n){if(mn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),or(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw dt.info(`operation ${t} not found.`),or(new Error,Ct.OP_NOT_FOUND(t),iu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return dt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ou]===!1){s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ou]===!1)s.addInvalidItem(Ct.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)&&(dt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw dt.error(E),dt.error(f),or(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 dt.info("no attributes specified in checkAttributePerms."),or(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),or(new Error);if(mn.isEmptyOrZeroLength(t))return dt.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ou]===!1){i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Kr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==pn)throw or(new Error,Ct.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(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(dT,"checkAttributePerms");function B8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Kr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){dt.info(r)}return t}a(B8,"getRecordAttributes");function fT(e,t,r){let s=new Map;if(mn.isEmpty(e))return dt.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{dt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(fT,"getAttributePermissions");function H8(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(H8,"verifyBulkLoadAttributePerms")});var Fd=T((G_e,xM)=>{"use strict";xM.exports={evaluateSQL:J8,processAST:GM,convertSQLToAST:FM,checkASTPermissions:qM};var q8=Gr(),HM=require("util"),F8=HM.callbackify(q8.insert),G8=Fr().search,x8=bw().update,k8=HM.callbackify(x8),V8=Iw().convertDelete,ei=require("alasql"),$8=Hd(),qd=G(),Y8=S_(),K8=$(),uu=b(),{hdb_errors:W8,handleHDBError:ET}=X(),{HTTP_STATUS_CODES:hT}=W8;Y8(ei);var Q8=403,z8="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 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 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)&&K8.isEmptyOrZeroLength(s))return t("No schema specified",null)}GM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(J8,"evaluateSQL");function qM(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(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(`
|
|
15
|
-
`);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(Q8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case uu.VALID_SQL_OPS_ENUM.SELECT:s=G8,n=t.ast.statements[0];break;case uu.VALID_SQL_OPS_ENUM.INSERT:s=X8;break;case uu.VALID_SQL_OPS_ENUM.UPDATE:s=k8;break;case uu.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(GM,"processAST");function j8(e,t){qd.info(e),t("unknown sql statement")}a(j8,"nullFunction");function X8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Z8(i,e.values)}catch(o){return r(o)}F8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){qd.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(X8,"convertInsert");function 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]]=ei.compile(`SELECT ${n.toString()} AS [${uu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw qd.error(r),new Error(z8)}}a(Z8,"createDataObjects")});var pT=T((k_e,VM)=>{"use strict";var{S3:e6,GetObjectCommand:t6}=require("@aws-sdk/client-s3");VM.exports={getFileStreamFromS3:r6,getS3AuthObj:kM};async function r6(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 t6(r))).Body}a(r6,"getFileStreamFromS3");function kM(e,t,r){return new e6({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kM,"getS3AuthObj")});var Gd=T(($_e,ZM)=>{"use strict";var KM=Fr(),s6=Fd(),n6=pT(),{AsyncParser:i6,Transform:o6}=require("json2csv"),_u=require("stream"),wr=$(),ST=require("fs-extra"),a6=require("path"),Qr=G(),{promisify:WM}=require("util"),lu=$(),{handleHDBError:ot,hdb_errors:c6}=X(),{HDB_ERROR_MSGS:ar,HTTP_STATUS_CODES:at}=c6,{streamAsJSON:u6}=kE(),{Upload:l6}=require("@aws-sdk/lib-storage"),$M=["search_by_value","search_by_hash","sql"],YM=["json","csv"],QM="json",zM="csv",_6="Successfully exported JSON locally.",d6="Successfully exported CSV locally.",f6=1e3,E6=KM.searchByHash,h6=KM.searchByValue,m6=WM(s6.evaluateSQL),p6=WM(_u.finished);ZM.exports={export_to_s3:g6,export_local:S6,toCsvStream:JM};async function S6(e){Qr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=jM(e);if(!wr.isEmpty(t))throw Qr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(wr.isEmpty(e.path))throw Qr.error(ar.MISSING_VALUE("path")),ot(new Error,ar.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(wr.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=wr.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(Qr.trace("in confirmPath"),wr.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,Qr.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 Qr.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(Qr.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 u6(r).pipe(s),await p6(s),{message:_6,path:e}}else if(t===zM){let s=ST.createWriteStream(e),n=_u.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(wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,ar.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,ar.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,ar.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,ar.MISSING_VALUE("key"),at.BAD_REQUEST);if(wr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,ar.MISSING_VALUE("region"),at.BAD_REQUEST);let t=jM(e);if(!wr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);Qr.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 Qr.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 _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%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 JM(e){let t=_u.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new o6(r,s);return t.pipe(n)}a(JM,"toCsvStream");function jM(e){if(Qr.trace("in exportCoreValidation"),wr.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(wr.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(jM,"exportCoreValidation");async function XM(e){Qr.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=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.`,Qr.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 aP={};Qe(aP,{contentTypes:()=>RT,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>gT,serialize:()=>$d,serializeMessage:()=>Xn});function A6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function gT(e){e.register(N6,{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,Vs.encodeIter)(t,du)):(0,Vs.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,Vs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Vd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=Lt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function $d(e,t,r){let s=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(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 Xn(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 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 ea(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||rP(e,s);return o=>b6(o).then(i)}return e&&Lt.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 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 xd,TT,Vs,Gi,Sn,kd,sP,nP,iP,du,Lt,RT,eP,oP,O6,N6,tP,Wo=Te(()=>{xd=D(kE()),TT=D(Gd()),Vs=require("msgpackr"),Gi=require("cbor-x"),Sn=require("zlib"),kd=require("stream");Mr();sP=require("../../index"),nP=D(j()),iP=D(b()),du={useRecords:!1,useToJSON:!0},Lt=new Map,RT=Lt;lt.contentTypes=RT;(0,sP._assignPackageExport)("contentTypes",RT);Lt.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});eP=new Gi.Encoder(du);Lt.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});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?kd.Readable.from((0,Vs.encodeIter)(e,du)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,TT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return kd.Readable.from(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+`
|
|
13
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=zU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Jo.info(`finished installModules with response ${i}`),i}a(P5,"installModules");function zU(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
|
|
14
|
+
`);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(zU,"parseNPMStdErr");async function v5(e){Jo.info(`starting auditModules for request: ${e}`);let t=jU(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 jU(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(jU,"modulesValidator")});var XS=T((O_e,sM)=>{"use strict";var jo=require("fs-extra"),jS=require("path"),wd=G(),ZU=$(),Cd=b(),rM=j(),B5=hr();sM.exports=H5;async function H5(){let e=q5(),t=rM.get(Cd.CONFIG_PARAMS.ROOTPATH),r=jS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.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(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:":jS.extname(e)||await jo.pathExists(e)?"file:":"github:"}a(eM,"getPkgPrefix");async function tM(e,t,r){wd.trace("npm installing components package.json",t),await jo.writeFile(e,JSON.stringify(t,null," "));try{await Id().installAllRootModules(rM.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await jo.writeFile(e,JSON.stringify(r,null," ")):await jo.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=j(),nu=hr(),F5=$(),{PACKAGE_ROOT:G5}=b(),{handleHDBError:Tt,hdb_errors:x5}=X(),{basename:k5}=require("path"),V5=XS(),oM=j(),$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 j5(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(j5,"setCustomFunction");function X5(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(X5,"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:j5,dropCustomFunction:X5,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=j(),dM=nn(),{handleHDBError:Xo,hdb_errors:u8}=X(),{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 Xo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(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 Xo(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 Xo(t,t.message,Zo.BAD_REQUEST,void 0,void 0,!0);if(!_M.get(sT.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Xo(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 Xo(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}=X(),{HDB_ERROR_MSGS:Ct,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,Ct.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,Ct.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(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&MM[r])throw or(new Error,Ct.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(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===gM&&(!d[n]||!d[n][ou]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===AM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ou]))return c.handleInvalidItem(Ct.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,Ct.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(Ct.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(Ct.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ct.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[ou]===!1)s.addInvalidItem(Ct.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=Ct.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(Ct.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==pn)throw or(new Error,Ct.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(Ct.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:j8,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}=X(),{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 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 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(j8,"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(`
|
|
15
|
+
`);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=X8;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 X8(e,t){qd.info(e),t("unknown sql statement")}a(X8,"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}=X(),{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=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(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 XM(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=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 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 jM(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(jM,"exportCoreValidation");async function XM(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(XM,"getRecords")});var aP={};Qe(aP,{contentTypes:()=>RT,findBestSerializer:()=>Vd,getDeserializer:()=>ea,registerContentHandlers:()=>gT,serialize:()=>$d,serializeMessage:()=>Xn});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=Lt.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Lt.keys()).join(", "))}};s=Lt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function $d(e,t,r){let s=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(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 Xn(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=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||rP(e,s);return o=>y6(o).then(i)}return e&&Lt.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,Lt,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(j()),iP=D(b()),du={useRecords:!1,useToJSON:!0},Lt=new Map,RT=Lt;lt.contentTypes=RT;(0,sP._assignPackageExport)("contentTypes",RT);Lt.set("application/json",{serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});eP=new Gi.Encoder(du);Lt.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});Lt.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});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,TT.toCsvStream)(e)},q:.1});Lt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Lt.set("text/event-stream",{serializeStream:function(e){return kd.Readable.from(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+`
|
|
16
16
|
`),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
|
|
17
17
|
`}return e.id&&(t+="id: "+e.id+`
|
|
18
18
|
`),e.retry&&(t+="retry: "+e.retry+`
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
|
|
22
22
|
`:`data: ${e}
|
|
23
23
|
|
|
24
|
-
`},q:.8});Lt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});oP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:A6,q:.8};Lt.set("*/*",oP);Lt.set("",oP);a(A6,"tryJSONParse");a(gT,"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}=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(Xn,"serializeMessage");a(b6,"streamToBuffer");a(ea,"getDeserializer");a(rP,"deserializerUnknownType");a(y6,"transformIterable")});var Yd={};Qe(Yd,{start:()=>C6});async function w6(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){I6[0]=f;let p=String.fromCharCode(34,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),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 C6(e){AT=e,!cP&&(cP=!0,OT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return w6(t,r)}),e.server.ws(async(t,r,s)=>{fu++;let n=new ns;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--,xr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=OT.getMatch(u);if(xr(!!_,"connection","ws","connect"),!_)t.send(Xn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(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=Xn(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,Eu,Dt,I6,AT,cP,OT,uP,fu,lP=Te(()=>{Wo();xn();xi=D(G()),Eu=D(X());Sl();va();di();zS();Dt=new Uint8Array(8),I6=new Float64Array(Dt.buffer,0,1),AT={};a(w6,"http");fu=0;a(C6,"start")});var NT=T((tde,_P)=>{var{recordAction:Kd,recordActionBinary:L6}=(xn(),Z(N_)),D6=require("fastify-plugin"),U6=200;_P.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.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Kd(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",()=>{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 jd=require("clone"),Xd=Fe(),M6=$(),zd=b(),P6=G(),Wd=require("fs"),bT=require("joi"),{string:Jd}=bT.types(),{hdb_errors:v6,handleHDBError:hu}=X(),{HDB_ERROR_MSGS:B6,HTTP_STATUS_CODES:Qd}=v6,{common_validators:ta}=Ls(),dP=1e9,fP=" is required",H6=["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:H6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},q6={schema:Jd.required(),table:Jd.required(),action:Jd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:F6,AWS_SECRET:G6,AWS_BUCKET:x6,AWS_FILE_KEY:k6,REGION:V6}=zd.S3_BUCKET_AUTH_KEYS,$6={s3:{presence:!0},[`s3.${F6}`]:{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"}},EP=jd(yT);EP.data.presence={message:fP};var hP=jd(yT);hP.file_path.presence={message:fP};var Y6=Object.assign(jd(yT),$6),IT=jd(q6);IT.csv_url=Jd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();IT.passthrough_headers=bT.object();function K6(e){let t=Xd.validateObject(e,EP);return Zd(e,t)}a(K6,"dataObject");function W6(e){let t=Xd.validateBySchema(e,bT.object(IT));return Zd(e,t)}a(W6,"urlObject");function Q6(e){let t=Xd.validateObject(e,hP);return Zd(e,t)}a(Q6,"fileObject");function z6(e){let t=Xd.validateObject(e,Y6);return Zd(e,t)}a(z6,"s3FileObject");function Zd(e,t){if(!t){let r=M6.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,B6.MAX_FILE_SIZE_ERR(s,dP),Qd.BAD_REQUEST)}catch(s){P6.error(s),console.error(s)}}}return t}a(Zd,"postValidateChecks");mP.exports={dataObject:K6,urlObject:W6,fileObject:Q6,s3FileObject:z6}});var CT=T((nde,pP)=>{"use strict";var mu=G(),ef=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===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(J6,"callOperationFunctionAsAwait");pP.exports={callOperationFunctionAsAwait:J6}});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=Gr(),sf=wT(),j6=require("needle"),Ts=b(),lde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:LP}=X(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Vi}=LP,sa=G(),MT=require("papaparse");ra.promisifyPapaParse();var Rs=require("fs-extra"),X6=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"),Z6=j(),DP=CT(),e9=pT(),{BulkLoadFileObject:vT,BulkLoadDataObject:t9}=TP(),BT=aT(),{verifyBulkLoadAttributePerms:UP}=Hd(),_de=gP(),dde=st(),fde=nn(),{databases:r9}=(fe(),Z(Ce)),{coerceType:s9}=(nf(),Z(FT)),IP="No records parsed from csv file.",ki=`${Z6.get("HDB_ROOT")}/tmp`,{schema_regex:n9}=Ls(),wP=1024*1024*2,CP=5e3,i9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};qP.exports={csvDataLoad:o9,csvURLLoad:a9,csvFileLoad:c9,importFromS3:u9};async function o9(e,t){let r=sf.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=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,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new t9(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(o9,"csvDataLoad");async function a9(e){let t=sf.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await l9(e,r)}catch(n){throw sa.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new vT(this.job_operation_function.name,e.action,e.schema,e.table,s,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await HT(n);return await rf(s),i}catch(n){throw await rf(s),$i(n)}}a(a9,"csvURLLoad");async function c9(e){let t=sf.fileObject(e);if(t)throw $e(t,t.message,Ut.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,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await HT(r)}catch(s){throw $i(s)}}a(c9,"csvFileLoad");async function u9(e){let t=sf.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=X6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${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 _9(n,e);let o=await HT(i);return await rf(r),o}catch(s){throw await rf(r),$i(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 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,Ts.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=`${ki}/${e}`;await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await Rs.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(){sa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw sa.error(ft.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(ft.S3_DOWNLOAD_ERR))}}a(_9,"downloadFileFromS3");async function d9(e,t){try{await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,t)}catch(r){throw sa.error(ft.WRITE_TEMP_FILE_ERR),$e(r,Vi(ft.DEFAULT_BULK_LOAD_ERR))}}a(d9,"writeFileToTempFolder");async function rf(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{sa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(rf,"deleteTempFile");function f9(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}`,Ut.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"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(f9,"validateURLResponse");async function HT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await E9(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await h9(e);break;default:throw $e(new Error,ft.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_FILE_EXT_ERR(e))}return 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(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(PP,"insertChunk");async function E9(e){let t={records:0,number_written:0},r=vP(e.schema,e.table);try{let s=new BT,n=Rs.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,Ut.BAD_REQUEST);return n=Rs.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(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(E9,"callPapaParse");function vP(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(vP,"createTransformMap");function PT(e,t,r){let s=e.get(r);return s?s(t):ra.autoCast(t)}a(PT,"typeFunction");async function h9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new BT,n=AP([Rs.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,Ut.BAD_REQUEST);let o=AP([Rs.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(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(h9,"insertJson");async function BP(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.",sa.info(t.message))}catch(r){throw $i(r)}return t}a(BP,"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=tf.insert;break;case"update":i=tf.update;break;case"upsert":i=tf.upsert;break;default:throw $e(new Error,ft.INVALID_ACTION_PARAM_ERR(s),Ut.BAD_REQUEST,Ts.LOG_LEVELS.ERROR,ft.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(p9,"bulkFileLoad");function HP(e,t){return`successfully loaded ${t} of ${e} records`}a(HP,"buildResponseMsg");function $i(e){return $e(e,Vi(ft.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.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 S9=b(),xP=require("moment"),T9=require("uuid").v4,xT=class{static{a(this,"JobObject")}constructor(){this.id=T9(),this.type=void 0,this.start_datetime=xP().valueOf(),this.created_datetime=xP().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}};kP.exports=xT});var af=T((Rde,zP)=>{"use strict";var R9=require("uuid").v4,KP=Gr(),WP=Fr(),g9=Ps(),A9=No(),O9=GP(),Ye=b(),N9=VP(),b9=Bp(),zr=G(),y9=Ja(),na=$(),{promisify:I9}=require("util"),Yi=require("moment"),w9=Fd(),of=wT(),$P=Gh(),{deleteTransactionLogsBeforeValidator:C9}=rT(),{handleHDBError:L9,hdb_errors:D9}=X(),{HTTP_STATUS_CODES:U9}=D9,YP=WP.searchByValue,M9=WP.searchByHash,P9=KP.insert,v9=I9(w9.evaluateSQL),B9=KP.update;zP.exports={addJob:F9,updateJob:x9,handleGetJob:H9,handleGetJobsByStartDate:q9,getJobById:QP};async function H9(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 zr.error("There was an error getting job",t),new Error(r)}}a(H9,"handleGetJob");async function q9(e){try{let t=await G9(e);if(zr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=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 zr.error(r),new Error(r)}}a(q9,"handleGetJobsByStartDate");async function F9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||na.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return zr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return zr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=of.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=of.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=of.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=of.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$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=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 YP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=R9();try{o=await YP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return zr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return zr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new y9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await P9(u)}catch(l){return zr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,zr.trace(l)}return t}a(F9,"addJob");async function G9(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 O9(s,e.hdb_user);try{return await v9(n)}catch(i){throw zr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(G9,"getJobsInDateRange");async function QP(e){if(na.isEmptyOrZeroLength(e))return na.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 zr.error(s),na.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(QP,"getJobById");async function x9(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 b9(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await B9(t),r}a(x9,"updateJob")});var tv=T((Ade,ev)=>{"use strict";var JP=$(),cr=b(),k9=require("moment"),cf=qT(),uf=G(),jP=af(),XP=Gd(),ZP=Ai(),V9=Ze(),$9=Md(),kT=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(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,XP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Tn(e,XP.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,$9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Y9,"parseMessage");async function Tn(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):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 jP.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 K9(e){uf.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");ev.exports={parseMessage:Y9,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=Fr(),KT=Fd(),lf=qT(),Rn=U_(),_f=pi(),Su=Ai(),W9=gp(),pu=Rr(),df=Lp(),Mt=tT(),Et=G(),Q9=Mp(),z9=J_(),J9=ES(),j9=ed(),X9=hS(),Z9=mS(),e7=TS(),t7=gS(),$T=NS(),nv=Gd(),r7=Hd(),WT=af(),P=b(),{hdb_errors:Ru,handleHDBError:Tu}=X(),{HTTP_STATUS_CODES:iv}=Ru,YT=CS(),ov=pd(),hv=require("util"),ia=Gr(),s7=on(),n7=Fo(),av=tv(),cv=Mc(),uv=(Ad(),Z(Zc)),lv=Er(),_v=Md(),dv=Id(),{setServerUtilities:i7}=(nf(),Z(FT)),{CONTEXT:o7}=(os(),Z(ME)),{_assignPackageExport:a7}=require("../../index"),{transformReq:c7}=$(),{server:u7}=(Mr(),Z(to)),l7=CT(),fv=ff.searchByHash,_7=ff.searchByValue,d7=hv.promisify(ff.search),f7=hv.promisify(KT.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=sv();async function mv(e,t){try{if(e.body.operation!=="read_log"&&(Et.log_level===P.LOG_LEVELS.INFO||Et.log_level===P.LOG_LEVELS.DEBUG||Et.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Et.info(o)}}catch(s){Et.error(s)}let r=await 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&&Et.error(s)}),r}a(mv,"processLocalTransaction");var Ev=m7();zT.exports={chooseOperation:pv,getOperationFunction:Sv,operation:QT,processLocalTransaction:mv};i7(zT.exports);u7.operation=QT;function pv(e){let t;try{t=Sv(e)}catch(n){throw Et.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=KT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=KT.checkASTPermissions(e,i);if(o)throw Et.error(`${iv.FORBIDDEN} from operation ${e.operation}`),Et.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=r7.verifyPerms(i,n);if(o)throw Et.error(`${iv.FORBIDDEN} from operation ${e.operation}`),Et.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(Et.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");a7("operation",QT);function QT(e,t){e.hdb_user=this[o7]?.user,e.bypass_auth=!t;let r=pv(e);return mv({body:e},r)}a(QT,"operation");async function h7(e){Et.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await ia.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await ia.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await ia.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Su.deleteRecord(i);break;default:Et.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Et.info("Invalid operation in transaction"),Et.error(o)}}a(h7,"catchup");async function $s(e){c7(e);let t,r;try{r=await WT.addJob(e),t=r.createdJob,Et.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 Et.error(n),Tu(s,n)}}a($s,"executeJob");function m7(){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(_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($s,lf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H($s,lf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H($s,lf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H($s,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(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(j9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(X9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(Z9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(lv.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($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($s,nv.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H($s,Su.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H($s,Su.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H($s,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(h7)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(n7.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H($s,Su.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(W9)),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(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(_v.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H($s,_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(m7,"initializeOperationFunctionMap")});var hf=T((wde,gv)=>{"use strict";var jT=b(),p7=$(),gu=G(),{handleHDBError:XT,hdb_errors:Ef}=X(),{isMainThread:S7}=require("worker_threads"),{Readable:T7}=require("stream"),Tv=require("os"),R7=require("util"),g7=$p(),A7=R7.promisify(g7.authorize),Rv=JT(),{createGzip:O7,constants:N7}=require("zlib");function b7(e){let t=`Found an uncaught exception with message: ${e.message}. ${Tv.EOL}Stack: ${e.stack} ${Tv.EOL}Terminating ${S7?"HDB":"thread"}.`;console.error(t),gu.fatal(t),process.exit(1)}a(b7,"handleServerUncaughtException");function y7(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(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.",Ef.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.",Ef.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=>{gu.warn(n),gu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(XT(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(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=Rv.chooseOperation(e.body);let n=await Rv.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 gu.error(n),n}}a(C7,"handlePostRequest");gv.exports={authHandler:w7,handlePostRequest:C7,handleServerUncaughtException:b7,serverErrorHandler:y7,reqBodyValidationHandler:I7}});var bv=T((Lde,Nv)=>{"use strict";var L7=require("fastify-plugin"),{handlePostRequest:Av,authHandler:D7,reqBodyValidationHandler:U7}=hf();async function M7(e){e.decorate("hdbCore",{preValidation:[U7,D7],request:t=>Ov(Av(t,response)),requestWithoutAuthentication:(t,r)=>Ov(Av(t,r,!0))})}a(M7,"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=L7(M7)});var Iv=T((Ude,yv)=>{"use strict";var ZT=require("fs"),oa=j();oa.initSync();var{CONFIG_PARAMS:Au}=b(),P7=1024*1024*1024;function v7(e){let t=oa.get(Au.HTTP_TIMEOUT),r=oa.get(Au.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:P7,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?`
|
|
24
|
+
`},q:.8});Lt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});oP={type:"application/json",serializeStream:xd.streamAsJSON,serialize:JSON.stringify,deserialize:O6,q:.8};Lt.set("*/*",oP);Lt.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(Xn,"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,(Dt[0]&63)+62,(Dt[0]>>6)+(Dt[1]<<2&63)+62,(Dt[1]>>4)+(Dt[2]<<4&63)+62,(Dt[2]>>2)+62,(Dt[3]&63)+62,(Dt[3]>>6)+(Dt[4]<<2&63)+62,(Dt[4]>>4)+(Dt[5]<<4&63)+62,(Dt[5]>>2)+62,(Dt[6]&63)+62,(Dt[6]>>6)+(Dt[7]<<2&63)+62,34),S=r["if-none-match"];S&&p==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",p),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(Xn(`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=Xn(E.value,r);t.send(h),br(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,Eu,Dt,w6,AT,cP,OT,uP,fu,lP=Te(()=>{Wo();xn();xi=D(G()),Eu=D(X());Sl();va();di();zS();Dt=new Uint8Array(8),w6=new Float64Array(Dt.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.context.config,_,l,d;u.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 jd=require("clone"),Xd=Fe(),P6=$(),zd=b(),v6=G(),Wd=require("fs"),bT=require("joi"),{string:Jd}=bT.types(),{hdb_errors:B6,handleHDBError:hu}=X(),{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=jd(yT);EP.data.presence={message:fP};var hP=jd(yT);hP.file_path.presence={message:fP};var K6=Object.assign(jd(yT),Y6),IT=jd(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=Xd.validateObject(e,EP);return Zd(e,t)}a(W6,"dataObject");function Q6(e){let t=Xd.validateBySchema(e,bT.object(IT));return Zd(e,t)}a(Q6,"urlObject");function z6(e){let t=Xd.validateObject(e,hP);return Zd(e,t)}a(z6,"fileObject");function J6(e){let t=Xd.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 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===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(j6,"callOperationFunctionAsAwait");pP.exports={callOperationFunctionAsAwait:j6}});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(),X6=require("needle"),Rs=b(),lde=ke(),ra=$(),{handleHDBError:$e,hdb_errors:LP}=X(),{HTTP_STATUS_CODES:Ut,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=j(),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,Ut.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,Ut.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,Ut.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,Ut.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,Ut.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 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)}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}`,Ut.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"]}`,Ut.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ut.BAD_REQUEST)}a(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,Ut.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),Ut.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,Ut.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),Ut.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,Ut.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),Ut.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),Ut.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=ra.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $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),Ut.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}=X(),{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(),jP=af(),XP=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,XP.export_local);break;case cr.JOB_TYPE_ENUM.export_to_s3:await Tn(e,XP.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 jP.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 jP.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(),Mt=tT(),ht=G(),z9=Mp(),J9=J_(),j9=ES(),X9=ed(),Z9=hS(),e7=mS(),t7=TS(),r7=gS(),$T=NS(),nv=Gd(),s7=Hd(),WT=af(),P=b(),{hdb_errors:Ru,handleHDBError:Tu}=X(),{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(j9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(X9)),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(Mt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new H(Mt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new H(Mt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new H(Mt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new H(Mt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new H(Mt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new H(Mt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new H(Mt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new H(Mt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new H(Mt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new H(Mt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new H(Mt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new H(Mt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new H(_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 jT=b(),S7=$(),gu=G(),{handleHDBError:XT,hdb_errors:Ef}=X(),{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=XT(new Error,"Invalid JSON.",Ef.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(S7.isEmpty(e.body.operation)){let s=XT(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!==jT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==jT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==jT.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(XT(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=j();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?`
|
|
25
25
|
|
|
26
|
-
`+ZT.readFileSync(o):"")},s.http2=!0}return s}a(v7,"getServerOptions");yv.exports=v7});var Lv=T((Pde,Cv)=>{"use strict";var eR=j();eR.initSync();var{CONFIG_PARAMS:wv}=b();function B7(){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(B7,"getCORSOptions");Cv.exports=B7});var Mv=T((Bde,Uv)=>{"use strict";var Dv=j();Dv.initSync();var H7=b();function q7(){return Dv.get(H7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(q7,"getHeaderTimeoutConfig");Uv.exports=q7});var sR={};Qe(sR,{customFunctionsServer:()=>x7,handleFile:()=>G7,ready:()=>$7});async function G7(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(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=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 k7(){try{De.info("Custom Functions starting configuration."),await xv.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,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(F7),await r.after(),gT(r),De.info("Custom Functions completed buildServer."),r}function $7(){if(gn)return gn.then?gn.then(e=>e.ready()):gn.ready()}var vv,Bv,Hv,qv,Fv,Gv,tR,rR,De,F7,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(j()),rR=D(b()),De=D(G()),F7=D(bv()),xv=D(Rr()),kv=D(Iv()),Vv=D(Lv()),$v=D(Mv()),Yv=D(hf());Wo();Mr();Pv=new Set;a(G7,"handleFile");a(x7,"customFunctionsServer");a(k7,"setUp");a(V7,"buildRouteFolder");a(Kv,"buildServer");a($7,"ready")});var nR={};Qe(nR,{start:()=>Y7});function Y7(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,jv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Qv.set(r,s)}}}var Jv,jv,Qv,zv,Xv=Te(()=>{Jv=D(require("send")),jv=require("fs"),Qv=new Map;a(Y7,"start")});function Q7(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)});W7.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=z7:r=J7(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"),Q7(0));Nr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new ua.Socket({handle:o,writable:!0,readable:!0});eee(l,c,e)}Nr(!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 z7(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 J7(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 X7(){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 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(),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,K7,aa,ca,r0,Zv,iR,W7,oR,mf,e0,la,j7,pf,Z7,n0=Te(()=>{Ki=D(Ze()),ua=require("net"),Sf=D(b()),t0=D(G()),Tf=require("fs");xn();({isMainThread:K7}=require("worker_threads")),aa=[],ca=[],r0=[],iR=0,W7=[];K7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Q7,"startHTTPWorker");a(s0,"startSocketServer");mf=0;a(aR,"findMostIdleWorker");e0=36e5,la=new Map;a(z7,"findByRemoteAddressAffinity");a(J7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+e0<e&&la.delete(t)},e0).unref();j7=1e3;a(X7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(X7);pf=new Map,Z7=1;a(eee,"proxySocket")});var c0=T((Qde,a0)=>{"use strict";var tee=require("cluster"),gs=j();gs.initSync();var o0=b(),Yde=require("util"),An=G(),cR=require("fs"),ree=require("fastify"),Kde=Rc(),see=require("@fastify/cors"),nee=require("@fastify/compress"),iee=require("@fastify/static"),oee=NT(),aee=require("path"),{PACKAGE_ROOT:cee}=b(),uee=on(),lee=$(),_ee=Rr(),dee=rc(),{server:fee}=(Mr(),Z(to)),{authHandler:Eee,handlePostRequest:hee,serverErrorHandler:mee,reqBodyValidationHandler:pee}=hf(),Wde=require("net"),{registerContentHandlers:See}=(Wo(),Z(aP)),Tee=6e4,Ree=1024*1024*1024,gee="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=tee.isMaster,await Aee();let t=gs.get(On.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=Oee(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{fee.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 Aee(){An.trace("Configuring HarperDB process."),uee.setSchemaDataToGlobal(),await _ee.setUsersToGlobal(),await dee.getLicense()}a(Aee,"setUp");function Oee(e){An.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=gs.get(o0.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."),An.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Oee,"buildServer");function Nee(e){let t=gs.get(On.OPERATIONSAPI_NETWORK_TIMEOUT),r=gs.get(On.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Ree,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=gs.get(On.OPERATIONSAPI_TLS_PRIVATEKEY),i=gs.get(On.OPERATIONSAPI_TLS_CERTIFICATE),o=gs.get(On.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:cR.readFileSync(n),cert:cR.readFileSync(i)+(o?`
|
|
26
|
+
`+ZT.readFileSync(o):"")},s.http2=!0}return s}a(B7,"getServerOptions");yv.exports=B7});var Lv=T((Pde,Cv)=>{"use strict";var eR=j();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=j();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(j()),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,jv.realpathSync)(o))}}return i(n)},{runFirst:!0})),Qv.set(r,s)}}}var Jv,jv,Qv,zv,Xv=Te(()=>{Jv=D(require("send")),jv=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=j7(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 j7(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+X7,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,X7,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(j7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of la)r.lastUsed+e0<e&&la.delete(t)},e0).unref();X7=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=j();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?`
|
|
27
27
|
|
|
28
|
-
`+cR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Nee,"getServerOptions");function bee(){let e=gs.get(On.OPERATIONSAPI_NETWORK_CORS),t=gs.get(On.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 gs.get(On.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Tee}a(yee,"getHeaderTimeoutConfig")});var R0=T((Zde,T0)=>{"use strict";var{decode:Iee}=require("msgpackr"),{isMainThread:Jde,parentPort:wee,threadId:jde}=require("worker_threads"),_0=st(),Nn=ke(),Cee=b(),Ou=G(),u0=j(),d0=b();Ze();var Lee=nn(),{recordAction:Dee,recordActionBinary:Uee}=(xn(),Z(N_)),{publishToStream:Mee}=_0,Xde={durable:Nn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Nn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Pee,vee,Bee,f0,E0;T0.exports={initialize:h0,workQueueListener:S0,setSubscription:Hee,setIgnoreOrigin:Fee,getDatabaseSubscriptions:qee};async function h0(){E0=!0,Ou.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await _0.getNATSReferences();Pee=e,vee=e.info.server_name,Bee=t,f0=r}a(h0,"initialize");var gf=new Map;function Hee(e,t,r){let s=gf.get(e);s||gf.set(e,s=new Map),s.set(t,r),E0||h0().then(S0)}a(Hee,"setSubscription");function qee(){return gf}a(qee,"getDatabaseSubscriptions");var m0;function Fee(e){m0=e}a(Fee,"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();wee?.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]=Gee(r).catch(s=>{Ou.error(s)}),++Rf>=p0&&(Rf=0)}a(S0,"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=u0.get(Cee.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),Uee(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&&Mee(e.subject.split(".").slice(0,-1).join("."),Lee.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Ou.error(o)}e.ack()}a(Gee,"messageProcessor");function uR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(uR,"convertOperation")});var If={};Qe(If,{disableNATS:()=>kee,publishToStream:()=>yf,setNATSReplicator:()=>lR,setPublishToStream:()=>Vee,setSubscription:()=>ER,start:()=>xee});function xee(){Of.default.get(Nf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Yee()}function kee(e=!0){b0=e}function Vee(e,t){yf=e,ER=t}function Yee(){if(b0||process.env._DISABLE_NATS)return;let e=Es(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];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 ns;return ER(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 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,$ee,y0,g0,Af,_R,hR=Te(()=>{fe();os();A0=D(st()),dR=D(ke()),fR=D(nn());va();O0=D(R0()),N0=D(hr()),Of=D(j()),Nf=D(b()),bf=D(G());a(xee,"start");a(kee,"disableNATS");yf=A0.publishToStream,ER=O0.setSubscription;a(Vee,"setPublishToStream");$ee=2;a(Yee,"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();Xc();w0=D(hr()),_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=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=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=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=[]}},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:()=>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}=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,Jr.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,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,Jr.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(),xr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await 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 xr(!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,Jr.error)(N),xr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}xr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,Jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,Jr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ea(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Jr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),xr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Jr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Df.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Xn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Df,P0,RR,bn,Jr,D0,Kee,U0,Lf,v0=Te(()=>{Df=require("mqtt-packet");L0();P0=D(Rr());Wo();xn();Mr();RR=D(j()),bn=D(b()),Jr=D(G()),D0=(0,Jr.loggerWithTag)("auth-event"),Kee=!0;a(Wee,"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,As.existsSync)(OR)){let n=(0,As.readdirSync)(OR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.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,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,Y0.getConfigObj)():(0,x0.parseDocument)((0,As.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,Rt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,As.existsSync)(N=(0,Rt.join)(I,"node_modules",l));)if(I=(0,Rt.dirname)(I),I.length<(0,$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=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(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,Rt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==yR[l]?.files&&!(0,As.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,k0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:F}=Y;_=!0;let w=(0,Rt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Rt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let x=await zee(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,Rt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.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,Rt.basename)(e),h.message)}}if(Nu.isMainThread&&!K0&&i&&(0,fa.watchDir)(e,async()=>W0()),o.extensionModule)return await gl((0,Rt.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,Rt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,yu?.(o),t.set("",new Iu(o))}}}var As,Rt,Nu,x0,IR,wR,k0,fa,bu,V0,$0,Qee,Y0,zee,OR,bR,K0,NR,da,Jee,yR,F0,G0,yu,Iu,Dd=Te(()=>{As=require("fs"),Rt=require("path"),Nu=require("worker_threads"),x0=require("yaml"),IR=D(j()),wR=D(b());kA();KA();WA();lP();Wv();Xv();k0=D(require("fast-glob")),fa=D(Ze()),bu=D(G());BE();Mr();V0=D(X());os();fe();n0();$0=D(j()),Qee=D(c0());Ad();hR();v0();Y0=D(Er());q0();({readFile:zee}=As.promises),OR=IR.get(wR.CONFIG_PARAMS.COMPONENTSROOT),bR=new Map,da=new Map;a(W0,"loadComponentDirectories");Jee={REST:Yd,rest:Yd,graphqlSchema:vE,jsResource:qE,fastifyRoutes:sR,login:GE,static:nR,operationsApi:Qee,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:Xee}=(fe(),Z(Ce)),{loadComponentDirectories:Zee,loadComponent:ete}=(Dd(),Z(Ld)),{resetResources:tte}=(Xc(),Z(LU)),rte=XS(),ste=Er(),{dirname:nte}=require("path"),{getConnection:ite}=st(),ote=j(),ate=b(),CR=new Map;async function cte(e=!1){!Q0&&ote.get(ate.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ite();try{Q0&&await rte()}catch(s){console.error(s)}let t=tte();Xee(),t.isWorker=e,await ete(nte(ste.getConfigFilePath()),t,"hdb",!0,CR),await Zee(CR,t);let r=[];for(let[s]of CR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(cte,"loadRootComponents");z0.exports.loadRootComponents=cte});var Ze=T((Ufe,ri)=>{"use strict";var{Worker:ute,MessageChannel:lte,parentPort:Ys,isMainThread:PR,threadId:_te,workerData:yn}=require("worker_threads"),{PACKAGE_ROOT:dte}=b(),{join:Z0,isAbsolute:fte,extname:Ete}=require("path"),{server:eB}=(Mr(),Z(to)),{watch:hte,readdir:mte}=require("fs/promises"),{totalmem:j0}=require("os"),vf=b(),pte=j(),In=G(),{randomBytes:Ste}=require("crypto"),{_assignPackageExport:Tte}=require("../../index"),Rte=b(),gte=1024*1024,ti=[],jr=[],Ate=50,vR=1e4,Ote="restart",tB="request_thread_info",rB="resource_report",sB="thread_info",nB="added-port",Nte="ack",LR;Tte("threads",jr);ri.exports={startWorker:DR,restartWorkers:HR,shutdownWorkers:Cte,workers:ti,setMonitorListener:Hte,onMessageFromWorkers:Lte,onMessageByType:lB,broadcast:Ute,broadcastWithAcknowledgement:Pte,setChildListenerByType:wte,getWorkerIndex:iB,getWorkerCount:oB,getTicketKeys:aB,setMainIsWorker:yte,setTerminateTimeout:bte,restartNumber:yn?.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 BR;function bte(e){vR=e}a(bte,"setTerminateTimeout");function iB(){return yn?yn.workerIndex:BR?0:void 0}a(iB,"getWorkerIndex");function oB(){return yn?yn.workerCount:BR?1:void 0}a(oB,"getWorkerCount");function yte(e){BR=e}a(yte,"setMainIsWorker");var Mf;function aB(){return Mf||(Mf=PR?Ste(48):yn.ticketKeys,Mf)}a(aB,"getTicketKeys");Object.defineProperty(eB,"workerIndex",{get(){return iB()}});Object.defineProperty(eB,"workerCount",{get(){return oB()}});var cB={[tB](e,t){vte(t)},[rB](e,t){Bte(t,e)}};function DR(e,t={}){let r=process.constrainedMemory?.()||j0();r=Math.min(r,j0());let s=Math.max(Math.floor(r/gte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,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:ri.exports.restartNumber,ticketKeys:aB()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:nB,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=>{cB[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===Rte.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)&&pte.get(vf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Ote,workerType:e})}a(HR,"restartWorkers");function wte(e,t){cB[e]=t}a(wte,"setChildListenerByType");function Cte(e){return HR(e,1/0,!1)}a(Cte,"shutdownWorkers");var uB=[];function Lte(e){uB.push(e)}a(Lte,"onMessageFromWorkers");var UR=new Map;function lB(e,t){let r=UR.get(e);r||UR.set(e,r=[]),r.push(t)}a(lB,"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!==Ys&&--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:sB,workers:_B()})}a(vte,"sendThreadInfo");function _B(){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(_B,"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,X0=!1;function Fte(){X0||(X0=!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(Ys){Bf(Ys);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();Ys.postMessage({type:rB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gte).unref(),LR=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:tB});function r(s){s.type===sB&&(Ys.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else LR=_B;ri.exports.getThreadInfo=LR;function Bf(e,t){jr.push(e),e.on("message",r=>{if(r.type===nB)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 uB)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 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 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 Ys.on("message",async e=>{let{type:t}=e;t===vf.ITC_EVENT_TYPES.SHUTDOWN&&(ri.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{In.warn("Thread did not voluntarily terminate",_te),process.exit(0)},vR).unref())})});function fB(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ea||((0,Cu.onMessageByType)(dB,d=>{EB(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 EB(e,t){if(!Ea)return;let r=Ea[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:qR,exclusiveStart:!0})){qR=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ko(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,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 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,Cu.broadcast)({type:dB,path:n}),EB(n,!0)})}}var wu,Cu,dB,xte,Ea,qfe,FR,qR,mB=Te(()=>{wu=D(G()),Cu=D(Ze());va();Xc();oo();dB="transaction",xte="transaction-await",qfe=Buffer.alloc(4096);a(fB,"addSubscription");FR=class extends ns{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},qR=Date.now();a(EB,"notifyFromTransactionData");a(hB,"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=[]),hB(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,Pt=2,Pe={},gt={},Zr=864e5,XR,xu,KB=10,WB=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,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},gt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:ct;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,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 oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ke.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ii=>ii.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(et({table:n,database:c,attributes:ne,origin:"cluster"}),vu.signalSchemaChange(new Bu.SchemaEventMsg(process.pid,Os.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return k.beginTxn?(oe=k,U(k,k),new Promise(ne=>{oe.resolve=ne})):U(k,k)});y&&(await Ne,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 Ws.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[Ks],this[me]);if(m)return this[xR]=!0,VR(m,g=>{this[Ks]=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,Zr=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Zr=Zr||(d+f)/4,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,Os.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[as])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let C=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[as]){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[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),wn(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ks],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:gt.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Ks],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,OB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=wn(C),L=this[we];Sa(L);let y=this[Ks];this[GR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[SB]||_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:gt.put&&(()=>gt.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Mu(this,V));let oe=V?.value;this[GR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(ku(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[as]){for await(let g of this.search(m))(await 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:gt.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),Mu(this,y)),!(y?.version>L)&&(ku(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ks],L,0,E,this[me],0,"delete"),E||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,Ws.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,AB.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=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=CE(ne,y,C,ct,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&eE(He,ii,z,this);if(lr)return lr.then(JB=>Vt(JB))}let Ns=ii?.value;if(!Ns)return Ff.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](Ns))return Ff.SKIP;return Ns}return a(Vt,"processEntry"),k.map(ii=>ZR(ii,z,ne,!1,Vt))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=fB(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[as]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[as]){if(L){if(R)throw new Ws.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=pr(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=pr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||gB(C,z)){let oe=V.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)g.send(y[--U]);y[0]&&(g.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,kf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ks]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=pr(V),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)g.send(U[--V]);g.startTime=y}!m.omitCurrent&&this.doesExist()&&g.send({id:C,version:this[Gf],timestamp:this[Ks]?.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[Ks],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:gt.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&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],oe=C(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(g||(g=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,y+"[*]");z&&(R[U]=z)}}else(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(g)throw new Ws.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 Ws.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Ws.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),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:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,g),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){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(),pr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Du();let L=pr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Du();let y=u.get(R);if(y){let U=pr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}ct.updatedAttributes();let QB=ct.prototype;return QB[SB]=!0,d&&ct.setTTLExpiration(d/1e3),B&&zB(),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){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Pu.getIndexedValues)(U),V){pB&&L.prefetch(V.map(z=>({key:z,value:W})),RB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(ku,"updateIndices");function Sa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>TB)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,kf.writeKey)(W,Qte,0)>TB)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>WB&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<KB&&Pt++}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,xr(!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 Ws.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,oe)=>{let k;VR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;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;Vt=C&Hf;let He=M.lastModified||Vt&&R;vt=Vt||He>R||!U,He||(He=(0,Pu.getNextMonotonicTime)());let Ns=performance.now()-Ne;if(Nr(Ns,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${Ns.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}wn(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,Ns)=>{if(Ns?.version!==R)return;let lr=ku(W,U,ne);ne?(gt.put?.(M,W,ne),S(W,ne,Ns,He,0,E&&vt||null,M,M.expiresAt,"put",!!Vt)):(gt.delete?.(M,W),E||h?S(W,null,Ns,He,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(eg,"getFromSource");function tE(){if(Zr!==XR&&(XR=Zr,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(xu&&clearTimeout(xu),!Zr)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/Zr)*Zr+W.getTime(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),xu=setTimeout(()=>F=F.then(async()=>{if(g(Math.max(C+Zr,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 zB(){(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(zB,"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 RB(){}function Jte(e){OB=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"&&!jte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Vf.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 VR(e,t,r){return e?.then?e.then(t,r):t(e)}function Mu(e,t){e[Ks]=t,e[Re]=t?.value??null,e[Gf]=t?.version}var Os,Ff,Pu,AB,Uu,Hu,Ws,vu,Bu,Ke,kf,Qi,Vf,kte,OB,Vte,$te,Yte,Kte,pB,Wte,Gf,SB,Ks,GR,xR,Lu,Hf,qf,Qte,TB,zte,tEe,jte,Du,nf=Te(()=>{Os=D(b()),Ff=require("lmdb"),Pu=D(hr()),AB=require("lodash");os();IE();Uu=D(ze()),Hu=D(j());mB();Ws=D(X()),vu=D(an()),Bu=D(_s());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();pB=Hu.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Wte=1e4,Gf=Symbol.for("version"),SB=Symbol.for("incremental-update"),Ks=Symbol("entry"),GR=Symbol("is-saving"),xR=Symbol("loaded-from-source"),Lu={isNotification:!0,ensureLoaded:!1},Hf=1,qf=8,Qte=Buffer.allocUnsafeSlow(8192),TB=1978,zte={read:!0,insert:!0,update:!0,delete:!0},tEe=(0,Vf.convertToMS)(Hu.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a($f,"makeTable");a(kR,"attributesAsObject");a(RB,"noop");a(Jte,"setServerUtilities");jte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(xf,"coerceType");a(gB,"isDescendantId");Du=a(()=>new Promise(setImmediate),"rest");a(VR,"when");a(Mu,"updateResource")});var Ce={};Qe(Ce,{database:()=>mc,databases:()=>xe,dropDatabase:()=>jm,dropTableMeta:()=>sre,getDatabases:()=>Es,getTables:()=>Xte,onUpdatedTable:()=>mR,readMetaDb:()=>qu,resetDatabases:()=>Zte,table:()=>et,tables:()=>mr});function Xte(){return zf||Es(),mr||{}}function Es(){if(zf)return xe;zf=!0,pa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,qe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),t=(0,kt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Cr.existsSync)(e)?e:(0,qe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Cr.existsSync)(e))for(let r of(0,Cr.readdirSync)(e,{withFileTypes:!0})){let s=(0,qe.basename)(r.name,".mdb");r.isFile()&&(0,qe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&qu((0,qe.join)(e,r.name),null,s)}if((0,Cr.existsSync)((0,ma.getBaseSchemaPath)())){for(let r of(0,Cr.readdirSync)((0,ma.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,qe.join)((0,ma.getBaseSchemaPath)(),r.name),n=(0,qe.join)((0,ma.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Cr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,qe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,qe.join)(n,i.name);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,Cr.existsSync)(n))for(let o of(0,Cr.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,Cr.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")&&Xr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Xr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in mr)delete mr[n];delete mr[Jf]}}return pa=null,xe}}function Zte(){zf=!1;for(let[,e]of si)e.needsDeletion=!0;Es();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,Cr.existsSync)(s)&&(i.path=s,_=(0,Kf.open)(i),_.isLegacy=!0):_=Nl(o));let l=IB(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){Xr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,F=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(ha)||0)&&u.putSync(ha,Y+1):(S.tableId=Y=u.get(ha),Y||(Y=1),u.putSync(ha,Y+1),u.putSync(S.key,S));let x=new 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){Xr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=wB(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 IB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=mr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),pa&&!pa.has(e)){let r=new Set;t[Jf]=r,pa.set(e,r)}return t}function wB(e,t,r){return e[t]=r,r}function mc({database:e,table:t}){e||(e=KR),Es();let r=IB(e),s=(0,qe.join)((0,kt.getHdbBasePath)(),Lr.DATABASES_DIR_NAME),n=(0,kt.get)(Lr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,kt.get)(Lr.CONFIG_PARAMS.STORAGE_PATH)||((0,Cr.existsSync)(s)?s:(0,qe.join)((0,kt.getHdbBasePath)(),Lr.LEGACY_DATABASES_DIR_NAME));let o=(0,qe.join)(s,(i?t:e)+".mdb"),c=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 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;si.delete(n.path),n.status==="open"&&(await n.close(),await NB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[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,kt.get)(Lr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Xr.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=wB(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()),Xr.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}),Xr.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,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--,Xr.error(f)}),Fu.workerData&&Fu.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>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){Xr.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 kt,Yf,Kf,qe,Cr,ma,zi,$R,Lr,NB,YR,bB,Wf,Qf,Fu,Xr,yB,KR,Jf,mr,xe,ha,WR,zf,si,pa,ere,tre,fe=Te(()=>{kt=D(j()),Yf=D(ze()),Kf=require("lmdb"),qe=require("path"),Cr=require("fs"),ma=D(ve());nf();zi=D(Ll()),$R=D(Ul()),Lr=D(b()),NB=D(require("fs-extra")),YR=require("../../index"),bB=D(hr()),Wf=D(an()),Qf=D(_s()),Fu=require("worker_threads"),Xr=D(G()),yB=D(Ze());oo();xa();KR="data",Jf=Symbol("defined-tables");(0,kt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,YR._assignPackageExport)("databases",xe);(0,YR._assignPackageExport)("tables",mr);ha=Symbol.for("next-table-id"),WR=[],si=new Map;a(Xte,"getTables");a(Es,"getDatabases");a(Zte,"resetDatabases");a(qu,"readMetaDb");a(IB,"ensureDB");a(wB,"setTable");a(mc,"database");a(jm,"dropDatabase");a(et,"table");ere=1e3,tre=10;a(rre,"runIndexing");a(sre,"dropTableMeta");a(mR,"onUpdatedTable")});var $=T((lEe,kB)=>{"use strict";var ni=require("path"),MB=require("fs-extra"),ur=G(),CB=require("fs-extra"),jf=require("os"),nre=require("net"),ire=require("recursive-iterator"),We=b(),ore=Pg(),LB=require("papaparse"),Xf=require("moment"),{inspect:are}=require("util"),DB=require("is-number"),uEe=require("lodash"),cre=require("minimist"),ure=require("https"),lre=require("http"),{hdb_errors:Zf}=X(),_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)))$/,PB=require("util").promisify(setTimeout),dre=100,fre=5,Ere="",hre=4,UB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};kB.exports={isEmpty:Dr,isEmptyOrZeroLength:Qs,arrayHasEmptyValues:Sre,arrayHasEmptyOrZeroLengthValues:Tre,buildFolderPath:Rre,isBoolean:vB,errorizeMessage:mre,stripFileExtension:Are,autoCast:Ore,autoCastJSON:BB,autoCastJSONDeep:zR,removeDir:Nre,compareVersions:bre,isCompatibleDataVersion:yre,escapeRawValue:Ire,unescapeValue:wre,stringifyProps:Cre,timeoutPromise:Dre,isClusterOperation:Mre,getClusterUser:vre,checkGlobalSchemaTable:Pre,getHomeDir:qB,getPropsFilePath:Lre,promisifyPapaParse:Bre,removeBOM:FB,createEventPromise:Hre,checkProcessRunning:qre,checkSchemaTableExist:Fre,checkSchemaExists:GB,checkTableExists:xB,getStartOfTomorrowInSeconds:Gre,getLimitKey:xre,isObject:gre,isNotEmptyAndHasValue:pre,autoCasterIsNumberCheck:HB,backtickASTSchemaItems:kre,isPortTaken:Ure,createForkArgs:Vre,autoCastBoolean:$re,async_set_timeout:PB,getTableHashAttribute:Yre,doesSchemaExist:Kre,doesTableExist:Wre,stringifyObj:Qre,ms_to_time:zre,changeExtension:Jre,getEnvCliRootPath:JR,noBootFile:jre,httpRequest:Xre,transformReq:Zre,convertToMS:ese,PACKAGE_ROOT:We.PACKAGE_ROOT};function mre(e){return e instanceof Error?e:new Error(e)}a(mre,"errorizeMessage");function Dr(e){return e==null}a(Dr,"isEmpty");function pre(e){return!Dr(e)&&(e||e===0||e===""||vB(e))}a(pre,"isNotEmptyAndHasValue");function Qs(e){return Dr(e)||e.length===0||e.size===0}a(Qs,"isEmptyOrZeroLength");function Sre(e){if(Dr(e))return!0;for(let t=0;t<e.length;t++)if(Dr(e[t]))return!0;return!1}a(Sre,"arrayHasEmptyValues");function Tre(e){if(Qs(e))return!0;for(let t=0;t<e.length;t++)if(Qs(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 vB(e){return Dr(e)?!1:e===!0||e===!1}a(vB,"isBoolean");function gre(e){return Dr(e)?!1:typeof e=="object"}a(gre,"isObject");function Are(e){return Qs(e)?Ere:e.slice(0,-hre)}a(Are,"stripFileExtension");function Ore(e){return Dr(e)||e===""||typeof e!="string"?e:UB[e]!==void 0?UB[e]:HB(e)===!0?Number(e):_re.test(e)?new Date(e):e}a(Ore,"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 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 BB(e)}a(zR,"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 Nre(e){if(Qs(e))throw new Error(`Directory path: ${e} does not exist`);try{await CB.emptyDir(e),await CB.remove(e)}catch(t){throw ur.error(`Error removing files in ${e} -- ${t}`),t}}a(Nre,"removeDir");function bre(e,t){if(Qs(e)){ur.info("Invalid current version sent as parameter.");return}if(Qs(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(Dr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(Ire,"escapeRawValue");function wre(e){if(Dr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(wre,"unescapeValue");function Cre(e,t){if(Dr(e))return ur.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+jf.EOL}!Qs(s)&&s[0]===";"?r+=" "+s+n+jf.EOL:Qs(s)||(r+=s+"="+n+jf.EOL)}catch{ur.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Cre,"stringifyProps");function qB(){let e;try{e=jf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(qB,"getHomeDir");function Lre(){let e=ni.join(qB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return MB.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(Dr(t)){ur.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Dr(e)||Qs(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(){LB.parsePromise=function(e,t,r){return new Promise(function(s,n){LB.parse(e,{header:!0,transformHeader:FB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Bre,"promisifyPapaParse");function FB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(FB,"removeBOM");function 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 PB(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=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 Zf.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 Zf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xB,"checkTableExists");function Gre(){let e=Xf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Xf().utc().unix();return e-t}a(Gre,"getStartOfTomorrowInSeconds");function xre(){return Xf().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=Xf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(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 jre(){if(QR)return QR;let e=JR();JR()&&MB.pathExistsSync(ni.join(e,We.HDB_CONFIG_FILE))&&(QR=!0)}a(jre,"noBootFile");function Xre(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(Xre,"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 jR=b(),VB=$(),Gu=G(),tse=on(),rse=Rr(),sse=JT(),{start:nse}=(hR(),Z(If)),{closeConnection:ise}=st(),$B=require("moment"),YB=af(),{cloneDeep:ose}=require("lodash"),ase=process.env[jR.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 YB.getJobById(Ji);if(VB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Ji}`);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=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=jR.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=$B().valueOf(),Gu.notify("Successfully completed job:",Ji)}catch(s){r=1,Gu.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 ise(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
|
|
28
|
+
`+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:jde}=require("worker_threads"),_0=st(),Nn=ke(),Lee=b(),Ou=G(),u0=j(),d0=b();Ze();var Dee=nn(),{recordAction:Uee,recordActionBinary:Mee}=(xn(),Z(N_)),{publishToStream:Pee}=_0,Xde={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(j()),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();Xc();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=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=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=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=[]}},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,jr.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,jr.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,jr.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,jr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,jr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=ea(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,jr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,jr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Df.generate)(h,c);t(S),br(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Xn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Df,P0,RR,bn,jr,D0,Wee,U0,Lf,v0=Te(()=>{Df=require("mqtt-packet");L0();P0=D(gr());Wo();xn();Pr();RR=D(j()),bn=D(b()),jr=D(G()),D0=(0,jr.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:()=>Xee});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 Xee(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=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(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,jee,yR,F0,G0,yu,Iu,Dd=Te(()=>{Os=require("fs"),gt=require("path"),Nu=require("worker_threads"),x0=require("yaml"),IR=D(j()),wR=D(b());kA();KA();WA();lP();Wv();Xv();k0=D(require("fast-glob")),fa=D(Ze()),bu=D(G());BE();Pr();V0=D(X());as();fe();n0();$0=D(j()),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");jee={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(Xee,"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}=(Xc(),Z(LU)),ste=XS(),nte=hr(),{dirname:ite}=require("path"),{getConnection:ote}=st(),ate=j(),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:j0}=require("os"),vf=b(),Ste=j(),In=G(),{randomBytes:Tte}=require("crypto"),{_assignPackageExport:Rte}=require("../../index"),gte=b(),X0=1024*1024,ti=[],Xr=[],Ate=50,vR=1e4,Ote="restart",rB="request_thread_info",sB="resource_report",nB="thread_info",iB="added-port",Nte="ack",LR;Rte("threads",Xr);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};Xr.onMessageByType=_B;Xr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Xr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var 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?.()||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 Xr){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 Xr)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 Xr)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){Xr.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",()=>{Xr.splice(Xr.indexOf(e),1)}).on("exit",()=>{Xr.splice(Xr.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();Xc();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,Pt=2,Pe={},At={},es=864e5,XR,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,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]: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[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,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 oe;for await(let k of z)try{if(!(k.type==="transaction"?k.writes[0]:k)){Ke.error("Bad subscription event",k);continue}if(k.source=m,oe)if(k.beginTxn)oe.resolve();else{U(k,oe);continue}if(k.type==="end_txn")continue;let Ne=Ge(k,()=>{if(k.type==="transaction"){let ne=[];for(let vt of k.writes)try{ne.push(U(vt,k))}catch(Vt){throw Vt.message+=" writing "+JSON.stringify(vt)+" of event "+JSON.stringify(k),Vt}return Promise.all(ne)}else if(k.type==="define_schema"){let ne=this.attributes.slice(0),vt;for(let Vt of k.attributes)ne.find(ii=>ii.name===Vt.name)||(ne.push(Vt),vt=!0);vt&&(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?(oe=k,U(k,k),new Promise(ne=>{oe.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[Bt]=m}else R=this[Bt],R&&(m=Object.assign(R,m)),this[Bt]=R=m;return this._writeUpdate(this),this}invalidate(m){let g=this[me],C=this[we];Sa(C),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 oe=V?.value;this[GR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(ku(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[cs]){for await(let g of this.search(m))(await 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=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=CE(ne,y,C,ct,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&eE(He,ii,z,this);if(lr)return lr.then(jB=>Vt(jB))}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(Vt,"processEntry"),k.map(ii=>ZR(ii,z,ne,!1,Vt))}return a(oe,"idsToRecords"),V}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||et({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),m||(m={});let g=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 oe=V.getValue(i);if(y.push({id:z,timestamp:U,value:oe,version:V.version,type:V.type}),--R<=0)break}}catch(V){Ke.error("Error getting history entry",U,V)}for(let U=y.length;U>0;)g.send(y[--U]);y[0]&&(g.startTime=y[0].timestamp)}else if(!m.omitCurrent)for(let{key:y,value:U,version:M,localTime:V}of i.getRange({start:C??!1,end:C==null?void 0:[C,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),oe=z.getValue(i);U.push({id:C,value:oe,timestamp:M,...z}),M=z.previousLocalTime}else break;R&&R--}while(M>L&&R!==0);for(let V=U.length;V>0;)g.send(U[--V]);g.startTime=y}!m.omitCurrent&&this.doesExist()&&g.send({id:C,version:this[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],oe=C(R[z.name],z,y+"."+z.name);oe&&(R[z.name]=oe)}}else switch(L.type){case"Int":(typeof R!="number"||R>>0!==R)&&(g||(g=[])).push(`Property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof R!="number"||!(Math.floor(R)===R&&Math.abs(R)<=9007199254740992))&&(g||(g=[])).push(`Property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof R!="number"&&(g||(g=[])).push(`Property ${y} must be a number`);break;case"ID":typeof R=="string"||R?.length>0&&R.every?.(U=>typeof U=="string")||(g||(g=[])).push(`Property ${y} must be a string, or an array of strings`);break;case"String":typeof R!="string"&&(g||(g=[])).push(`Property ${y} must be a string`);break;case"Boolean":typeof R!="boolean"&&(g||(g=[])).push(`Property ${y} must be a boolean`);break;case"Date":if(!(R instanceof Date)){if(typeof R=="string"||typeof R=="number")return new Date(R);(g||(g=[])).push(`Property ${y} must be a Date`)}break;case"Bytes":R instanceof Uint8Array||(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(R)){if(L.elements)for(let U=0,M=R.length;U<M;U++){let V=R[U],z=C(V,L.elements,y+"[*]");z&&(R[U]=z)}}else(g||(g=[])).push(`Property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&R==null&&(g||(g=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let R=0,L=p.length;R<L;R++){let y=p[R],U=C(m[y.name],y,y.name);U&&(m[y.name]=U)}if(g)throw new 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:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,g),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){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,oe=V.length;z<oe;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,oe=V.length;z<oe;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 oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<WB&&Pt++}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,oe)=>{let k;VR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;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;Vt=C&Hf;let He=M.lastModified||Vt&&R;vt=Vt||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)")):oe(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&&vt||null,M,M.expiresAt,"put",!!Vt)):(At.delete?.(M,W),E||h?S(W,null,bs,He,0,E&&vt||null,M,0,"delete",!!Vt):i.remove(W,R))}})}),()=>{i.unlock(W,R)},Ee=>{i.unlock(W,R),k&&Ke.error("Error committing cache update",Ee)})})}a(eg,"getFromSource");function tE(){if(es!==XR&&(XR=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"&&!jte.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,jte,Du,nf=Te(()=>{Ns=D(b()),Ff=require("lmdb"),Pu=D(mr()),OB=require("lodash");as();IE();Uu=D(ze()),Hu=D(j());pB();Qs=D(X()),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");jte=/[+-][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:()=>jm,dropTableMeta:()=>sre,getDatabases:()=>hs,getTables:()=>Xte,onUpdatedTable:()=>mR,readMetaDb:()=>qu,resetDatabases:()=>Zte,table:()=>et,tables:()=>pr});function Xte(){return zf||hs(),pr||{}}function hs(){if(zf)return xe;zf=!0,pa=new Map;let e=(0,kt.getHdbBasePath)()&&(0,qe.join)((0,kt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),t=(0,kt.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,kt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Lr.existsSync)(e)?e:(0,qe.join)((0,kt.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,kt.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,kt.getHdbBasePath)(),Dr.DATABASES_DIR_NAME),n=(0,kt.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,kt.get)(Dr.CONFIG_PARAMS.STORAGE_PATH)||((0,Lr.existsSync)(s)?s:(0,qe.join)((0,kt.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 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;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,kt.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 kt,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(()=>{kt=D(j()),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,kt.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(Xte,"getTables");a(hs,"getDatabases");a(Zte,"resetDatabases");a(qu,"readMetaDb");a(wB,"ensureDB");a(CB,"setTable");a(mc,"database");a(jm,"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"),jf=require("os"),nre=require("net"),ire=require("recursive-iterator"),We=b(),ore=Pg(),DB=require("papaparse"),Xf=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}=X(),_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:jre,httpRequest:Xre,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+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(Cre,"stringifyProps");function FB(){let e;try{e=jf.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=Xf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Xf().utc().unix();return e-t}a(Gre,"getStartOfTomorrowInSeconds");function xre(){return Xf().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=Xf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(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 jre(){if(QR)return QR;let e=JR();JR()&&PB.pathExistsSync(ni.join(e,We.HDB_CONFIG_FILE))&&(QR=!0)}a(jre,"noBootFile");function Xre(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(Xre,"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 jR=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[jR.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=jR.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=jR.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")();
|