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 WB=Object.create;var Sa=Object.defineProperty;var QB=Object.getOwnPropertyDescriptor;var zB=Object.getOwnPropertyNames;var JB=Object.getPrototypeOf,XB=Object.prototype.hasOwnProperty;var a=(e,t)=>Sa(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Qe=(e,t)=>{for(var r in t)Sa(e,r,{get:t[r],enumerable:!0})},ZR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of zB(t))!XB.call(e,n)&&n!==r&&Sa(e,n,{get:()=>t[n],enumerable:!(s=QB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?WB(JB(e)):{},ZR(t||!e||!e.__esModule?Sa(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>ZR(Sa({},"__esModule",{value:!0}),e);var rg=T((Zre,tg)=>{var jB=require("fast-glob"),{statSync:jf,existsSync:Zf,readFileSync:ZB,writeFileSync:eH}=require("fs"),{spawnSync:tH,spawn:rH,execFileSync:jre}=require("child_process"),{isMainThread:sH}=require("worker_threads"),{join:wn,relative:eg}=require("path"),{PACKAGE_ROOT:es}=b(),{tmpdir:nH,platform:iH}=require("os");require("source-map-support").install();var oH=["resources","server","dataLayer","components"],Ta="ts-build",eE,aH=__filename.endsWith("tsBuild.js");if(aH){if(sH){let r;try{jf(wn(es,Ta)),r=!0}catch{}if(r)for(let s of jB.sync(oH.map(n=>n+"/**/*.ts"),{cwd:es})){let n=0,i=0;try{n=jf(wn(es,s)).mtimeMs-5e3,i=jf(wn(es,Ta,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),eE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),eE=!0;if(eE){let s=wn(es,"node_modules/.bin/tsc");iH()==="win32"&&(s+=".cmd");let n=tH(s,{cwd:es});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=wn(nH(),"harperdb-tsc.pid"),o;if(Zf(i))try{process.kill(+ZB(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=rH(s,["--watch"],{cwd:es,detached:!0,stdio:"ignore"});eH(i,c.pid.toString()),c.unref()}}}}let e=tg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(es)&&!s[0].includes("node_modules")){let i=eg(es,s[0]),o;i.startsWith(Ta)?o=wn(es,eg(Ta,i)):o=wn(es,Ta,i);let c=wn(o,r),u=c+".js";if(Zf(u))return u;if(c.includes(".")&&Zf(c))return c}return t(r,s,n)}}});var b=T((rse,mg)=>{"use strict";var Dr=require("path"),cH=require("fs"),{relative:ese,join:tse}=Dr,{existsSync:uH}=cH;function lH(){let e=__dirname;for(;!uH(Dr.join(e,"package.json"));){let t=Dr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(lH,"getHDBPackageRoot");var Cn=lH(),sg="js",Vu=sg,_H="harperdb-config.yaml",dH="defaultConfig.yaml",fH="hdb",ng=`harperdb.${Vu}`,ig=`customFunctionsServer.${Vu}`,EH=`restartHdb.${Vu}`,rE="HarperDB",ku="Custom Functions",$u="Clustering Hub",Yu="Clustering Leaf",hH="Clustering Ingest Service",mH="Clustering Reply Service",pH="foreground.pid",SH="hdb.pid",TH="data",RH={HDB:rE,CLUSTERING_HUB:$u,CLUSTERING_LEAF:Yu,CLUSTERING_INGEST_SERVICE:hH,CLUSTERING_REPLY_SERVICE:mH,CUSTOM_FUNCTIONS:ku,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},gH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},AH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},OH={harperdb:rE,"clustering hub":$u,"clustering leaf":Yu,"custom functions":ku,custom_functions:ku,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},NH={CLUSTERING_HUB_PROC_DESCRIPTOR:$u,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yu},tE={HDB:Dr.join(Cn,"server/harperdb"),CUSTOM_FUNCTIONS:Dr.join(Cn,"server/customFunctions"),CLUSTERING_HUB:Dr.join(Cn,"server/nats"),CLUSTERING_LEAF:Dr.join(Cn,"server/nats")},bH={HDB:Dr.join(tE.HDB,ng),CUSTOM_FUNCTIONS:Dr.join(tE.CUSTOM_FUNCTIONS,ig)},yH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Dr.join(Cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Dr.join(Cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},IH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},og="support@harperdb.io",wH="customer-success@harperdb.io",ag=1,CH=4141,cg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",LH="https://www.harperdb.io/product",DH=`For support, please submit a request at ${cg} or contact ${og}`,ug=`For license support, please contact ${wH}`,UH="None of the specified records were found.",MH="hash attribute not found",PH=`Your current license only supports ${ag} role. ${ug}`,vH="Your current license only supports 3 connections to a node.",BH="127.0.0.1",HH=1,FH=/^\.$/,qH=/^\.\.$/,GH="U+002E",xH=/\//g,kH="U+002F",VH=/U\+002F/g,$H=/^U\+002E$/,YH=/^U\+002EU\+002E$/,KH="d",WH=999999,QH="*",zH="--max-old-space-size=",JH="system",XH="__hdb_hash",jH=".harperdb",ZH=".hdb",eF="keys",tF="hdb_boot_properties.file",rF=".updateConfig.json",sF="SIGTSTP",nF=24,iF=6e4,oF=448,aF="blob",cF="trash",uF="database",lF="schema",_F="transactions",dF=".count",fF="id",EF="PROCESS_NAME",lg={SETTINGS_PATH_KEY:"settings_path"},_g=require("lodash"),hF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},mF={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},pF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},SF={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},TF={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},_r="hdb_internal:",RF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},gF={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},AF="060493.ks",OF=".license",NF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},bF={CSV:".csv",JSON:".json"},yF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},IF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ra={};Ra[J.INSERT]=J.INSERT;Ra[J.UPDATE]=J.UPDATE;Ra[J.UPSERT]=J.UPSERT;Ra[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var wF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},CF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},LF=_g.invert(dg),DF={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},fg={settings_path:lg.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];fg[t.toLowerCase()]=t}var UF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},MF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},PF={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},vF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},BF={VERSION_DEFAULT:"2.2.0"},HF={DEVELOPMENT:8192,DEFAULT:512},FF={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},qF={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"},GF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Eg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},xF=Symbol("metadata"),kF="__clustering__",VF=Object.values(Eg),$F=15984864e5,hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},YF=_g.invert(hg),KF={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},WF=111,QF=`\r
|
|
2
|
-
`,
|
|
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:Iq.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(Dq,"findPs")});var ze=T((lse,Mg)=>{"use strict";var Uq="__dbis__",Mq="__txns__",Pq="__environment_name__",vq="__dbi_defintion__",Bq={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"},Hq=["__createdtime__","__updatedtime__"],Fq="\uFFFF",Ug={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},qq=Object.values(Ug);Mg.exports={AUDIT_STORE_NAME:Mq,INTERNAL_DBIS_NAME:Uq,DBI_DEFINITION_NAME:vq,SEARCH_TYPES:Bq,TIMESTAMP_NAMES:Hq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Pq,TRANSACTIONS_DBI_NAMES_ENUM:Ug,TRANSACTIONS_DBIS:qq,OVERFLOW_MARKER:Fq}});var dr=T((_se,kg)=>{"use strict";var Pg=b(),vg=ze(),Bg={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},Hg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:Hg("There was an error processing your request."),400:"Invalid request"},Gq=Fg[Bg.INTERNAL_SERVER_ERROR],xq={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},kq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Vq={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"},$q={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${vg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vg.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Yq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},qg={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},Kq={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."},Wq={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`},Qq={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},zq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Jq={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Gg={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},xg={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},Xq={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."},jq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Zq={...qg,...Vq,...xq,...Kq,...Wq,...Qq,...zq,...Jq,...Yq,...Gg,...xg,...Xq,...jq,...kq};kg.exports={CHECK_LOGS_WRAPPER:Hg,HDB_ERROR_MSGS:Zq,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:Gq,HTTP_STATUS_CODES:Bg,LMDB_ERRORS_ENUM:$q,AUTHENTICATION_ERROR_MSGS:qg,VALIDATION_ERROR_MSGS:Gg,ITC_ERRORS:xg}});var j=T((fse,Yg)=>{"use strict";var ji=dr(),eG=G(),tG=b(),Ju=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Vg),this.statusCode=s||ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ji.DEFAULT_ERROR_MSGS[s]?ji.DEFAULT_ERROR_MSGS[s]:ji.DEFAULT_ERROR_MSGS[ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&eG[n](i)}},_E=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},dE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Vg(e,t,r,s=tG.LOG_LEVELS.ERROR,n=null,i=!1){if($g(e))return e;let o=new Ju(e,t,r,s,n);return i&&delete o.stack,o}a(Vg,"handleHDBError");function $g(e){return e.__proto__.constructor.name===Ju.name}a($g,"isHDBError");Yg.exports={isHDBError:$g,handleHDBError:Vg,ClientError:_E,ServerError:dE,hdb_errors:ji}});var Wg=T((hse,Kg)=>{"use strict";var rG={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))},sG="certificate.pem",nG="privateKey.pem",iG="ca.pem";Kg.exports={CERTIFICATE_VALUES:rG,CERTIFICATE_PEM_NAME:sG,PRIVATEKEY_PEM_NAME:nG,CA_PEM_NAME:iG}});var qe=T((mse,Qg)=>{"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};Qg.exports={validateObject:oG,validateObjectAsync:aG,validateBySchema:cG};function oG(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(oG,"validateObject");async function aG(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(aG,"validateObjectAsync");function cG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(cG,"validateBySchema")});var EE=T((Tse,Zg)=>{"use strict";var jg=require("fs-extra"),ue=require("joi"),uG=require("os"),{boolean:Ie,string:ys,number:At,array:fE}=ue.types(),{totalmem:zg}=require("os"),Zi=require("path"),lG=G(),ju=$(),Sse=Wg(),Jg=b(),_G=qe(),Xg="log",dG="components",fG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",EG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",hG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",mG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",pG="rootPath config parameter is undefined",SG="clustering.enabled config parameter is undefined",ai=At.min(0).required(),Zu=fE.items({host:ys.required(),port:ai}).empty(null),js;Zg.exports={configValidator:TG,routesValidator:bG,route_constraints:Zu};function TG(e){if(js=e.rootPath,ju.isEmpty(js))throw pG;let t=Ie.required(),r=At.min(0).max(1e3).empty(null).default(NG),s=ys.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xu),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(Xu),c=ue.custom(gG).empty(null).default(Xu),u=e.clustering?.enabled;if(ju.isEmpty(u))throw SG;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:Zu}).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:Zu}).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(OG).optional().empty(null),maxSize:ys.custom(AG).optional().empty(null),path:ys.optional().empty(null).default(Xu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:fE.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:fE.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(TG,"configValidator");function RG(e){return jg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RG,"doesPathExist");function gG(e,t){ue.assert(e,ys.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RG(e);if(r)return t.message(r)}a(gG,"validatePath");function AG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(fG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(hG):e}a(AG,"validateRotationMaxSize");function OG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(EG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(mG):e}a(OG,"validateRotationInterval");function NG(e,t){let r=t.state.path.join("."),s=uG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zg();return i=Math.round(Math.min(i,zg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),lG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(NG,"setDefaultThreads");function Xu(e,t){if(!ju.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ju.isEmpty(js))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(js,dG);case"logging.root":return Zi.join(js,Xg);case"clustering.leafServer.streams.path":return Zi.join(js,"clustering","leaf");case"storage.path":let s=Zi.join(js,Jg.LEGACY_DATABASES_DIR_NAME);return jg.existsSync(s)?s:Zi.join(js,Jg.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(js,Xg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xu,"setDefaultRoot");function bG(e){let t=ue.object({routes:Zu});return _G.validateBySchema({routes:e},t)}a(bG,"routesValidator")});var eo={};Qe(eo,{server:()=>ut});var eA,ut,Ur=Te(()=>{eA=require("../../index"),ut={};(0,eA._assignPackageExport)("server",ut)});var Er=T((Ase,uA)=>{"use strict";var fr=b(),ht=$(),lt=G(),{configValidator:yG,routesValidator:tA}=EE(),Wt=require("fs-extra"),IG=require("yaml"),ts=require("path"),wG=require("is-number"),sA=require("properties-reader"),CG=require("lodash"),{handleHDBError:LG}=j(),{HTTP_STATUS_CODES:DG,HDB_ERROR_MSGS:el}=dr(),gse=require("minimist"),{server:UG}=(Ur(),Z(eo)),{DATABASES_PARAM_CONFIG:ya,CONFIG_PARAMS:Zs,CONFIG_PARAM_MAP:rs}=fr,MG="Unable to get config value because config is uninitialized",PG="Config successfully initialized",vG="Error backing up config file",BG="Empty parameter sent to getConfigValue",nA=ts.join(fr.PACKAGE_ROOT,"config","yaml",fr.HDB_DEFAULT_CONFIG_FILE),HG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rA={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},tl,Ot,rl;uA.exports={createConfigFile:FG,getDefaultConfig:qG,getConfigValue:oA,initConfig:mE,flattenConfig:to,updateConfigValue:aA,updateConfigObject:xG,getConfiguration:$G,setConfiguration:YG,readConfigFile:SE,getClusteringRoutes:KG,initOldConfig:cA,getConfigFromFile:WG,getConfigFilePath:ci,addConfig:QG,deleteConfigFromFile:zG,getConfigObj:JG};function FG(e){let t=Ln(nA);tl=to(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("_"),_=hE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&iA(t,r),pE(t);let s=t.toJSON();Ot=to(s);let n=t.getIn(["rootPath"]),i=ts.join(n,fr.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(FG,"createConfigFile");function iA(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(ya.TABLES))for(let i in s[n][ya.TABLES])for(let o in s[n][ya.TABLES][i]){let c=s[n][ya.TABLES][i][o],u=[Zs.DATABASES,n,ya.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[Zs.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(iA,"setSchemasConfig");function qG(e){if(tl===void 0){let r=Ln(nA);tl=to(r.toJSON())}let t=rs[e.toLowerCase()];if(t!==void 0)return tl[t.toLowerCase()]}a(qG,"getDefaultConfig");function oA(e){if(e==null){lt.error(BG);return}if(Ot===void 0){lt.trace(MG);return}let t=rs[e.toLowerCase()];if(t!==void 0)return Ot[t.toLowerCase()]}a(oA,"getConfigValue");function ci(e=ht.getPropsFilePath()){let t=ht.getEnvCliRootPath();return t?ts.join(t,fr.HDB_CONFIG_FILE):sA(e).get(fr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function mE(e=!1){if(Ot===void 0||e){let t;if(!ht.noBootFile()){t=ht.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{cA(r);return}catch(i){if(i.code!==fr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ln(r)}catch(i){if(i.code===fr.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
|
|
5
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}GG(s,r),pE(s);let n=s.toJSON();if(UG.config=n,Ot=to(n),Ot.logging_rotation_rotate)for(let i in rA)Ot[i]&<.error(`Config ${rA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(PG)}}a(mE,"initConfig");function GG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],ts.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],ts.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],ts.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Wt.writeFileSync(t,String(e)))}a(GG,"checkForUpdatedConfig");function pE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=yG(t);if(r.error)throw el.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(pE,"validateConfig");function xG(e,t){Ot===void 0&&(Ot={});let r=rs[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ot[r.toLowerCase()]=t}a(xG,"updateConfigObject");function aA(e,t,r=void 0,s=!1,n=!1,i=!1){Ot===void 0&&mE();let o=oA(rs.hdb_root),c=ts.join(o,fr.HDB_CONFIG_FILE),u=Ln(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=hE(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=hE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&iA(u,_),pE(u);let l=u.getIn(["rootPath"]),d=ts.join(l,fr.HDB_CONFIG_FILE);s===!0&&kG(c,l),Wt.writeFileSync(d,String(u)),n&&(Ot=to(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aA,"updateConfigValue");function kG(e,t){try{let r=ts.join(t,"backup",`${fr.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(vG),lt.error(r)}}a(kG,"backupConfigFile");var VG=["databases"];function to(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),rl=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!VG.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(to,"flattenConfig");function hE(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(wG(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(hE,"castConfigValue");function $G(){let e=ht.getPropsFilePath(),t=ci(e);return Ln(t).toJSON()}a($G,"getConfiguration");async function YG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aA(void 0,void 0,n,!0),HG}catch(i){throw typeof i=="string"||i instanceof String?LG(i,i,DG.BAD_REQUEST,void 0,void 0,!0):i}}a(YG,"setConfiguration");function SE(){let e=ht.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!ht.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ci(e);return Ln(t).toJSON()}a(SE,"readConfigFile");function Ln(e){return IG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ln,"parseYamlDoc");function KG(){let e=SE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ht.isEmptyOrZeroLength(t)?[]:t;let r=tA(t);if(r)throw el.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ht.isEmptyOrZeroLength(s)?[]:s;let n=tA(s);if(n)throw el.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 el.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(KG,"getClusteringRoutes");function cA(e){let t=sA(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(cA,"initOldConfig");function WG(e){let t=SE();return CG.get(t,e.replaceAll("_","."))}a(WG,"getConfigFromFile");async function QG(e,t){let r=Ln(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ci(),String(r))}a(QG,"addConfig");function zG(e){let t=ci(ht.getPropsFilePath()),r=Ln(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 JG(){return rl||(mE(),rl)}a(JG,"getConfigObj")});var X=T((Nse,dA)=>{"use strict";var TE=require("fs-extra"),ss=require("path"),lA=require("os"),XG=require("properties-reader"),Ia=G(),ui=$(),ee=b(),sl=Er(),jG="Error initializing environment manager",nl="BOOT_PROPS_FILE_PATH",_A=!1,ZG={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},en={};dA.exports={BOOT_PROPS_FILE_PATH:nl,getHdbBasePath:ex,setHdbBasePath:tx,get:rx,initSync:nx,setProperty:he,initTestEnvironment:ix};function ex(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ex,"getHdbBasePath");function tx(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(tx,"setHdbBasePath");function rx(e){let t=sl.getConfigValue(e);return t===void 0?en[e]:t}a(rx,"get");function he(e,t){ZG[e]&&(en[e]=t),sl.updateConfigObject(e,t)}a(he,"setProperty");function sx(){let e;try{e=ui.getPropsFilePath(),TE.accessSync(e,TE.constants.F_OK|TE.constants.R_OK),_A=!0;let t=XG(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[nl]=e,!0}catch{return Ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(sx,"doesPropFileExist");function nx(e=!1){try{(_A||sx()||ui.noBootFile())&&(sl.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=sl.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ia.error(jG),Ia.error(t),console.error(t),process.exit(1)}}a(nx,"initSync");function ix(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ss.join(__dirname,"../../","unitTests");en[nl]=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,lA.userInfo()?lA.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 ${nl}. Please check your boot props and settings files`;Ia.fatal(r),Ia.error(t)}}a(ix,"initTestEnvironment")});var ve=T((yse,TA)=>{"use strict";var Ua=b(),ox=$(),Qt=X(),Ma=require("path"),ax=require("minimist"),fA=require("fs-extra"),EA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:wa,SYSTEM_SCHEMA_NAME:il}=Ua,Ca,La,Da;function hA(){if(Ca!==void 0)return Ca;if(Qt.getHdbBasePath()!==void 0)return Ca=Qt.get(Dn.STORAGE_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.DATABASES_DIR_NAME),Ca}a(hA,"getBaseSchemaPath");function mA(){if(La!==void 0)return La;if(Qt.getHdbBasePath()!==void 0)return La=SA(il),La}a(mA,"getSystemSchemaPath");function pA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=Qt.get(Ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.TRANSACTIONS_DIR_NAME),Da}a(pA,"getTransactionAuditStoreBasePath");function cx(e,t){let r=Qt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ma.join(pA(),e.toString())}a(cx,"getTransactionAuditStorePath");function SA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ua.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ma.join(hA(),e)}a(SA,"getSchemaPath");function ux(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,ax(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ox.isObject(s))throw o;i=s}for(let o of i){let c=o[il];if(!c)continue;let u=Qt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[wa.PATH];if(_)return EA.set(u,[il,wa.TABLES,t,wa.PATH],_),Qt.setProperty(Dn.DATABASES,u),_;let l=c?.[wa.PATH];if(l)return EA.set(u,[il,wa.PATH],l),Qt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!fA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ma.join(n,e);return fA.mkdirsSync(i),Qt.setProperty(Dn.STORAGE_PATH,n),i}return mA()}a(ux,"initSystemSchemaPaths");function lx(){Ca=void 0,La=void 0,Da=void 0}a(lx,"resetPaths");TA.exports={getBaseSchemaPath:hA,getSystemSchemaPath:mA,getTransactionAuditStorePath:cx,getTransactionAuditStoreBasePath:pA,getSchemaPath:SA,initSystemSchemaPaths:ux,resetPaths:lx}});var hr=T((Lse,NA)=>{"use strict";var _x=dr().LMDB_ERRORS_ENUM,wse=require("lmdb"),dx=ze(),Cse=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ol}=dx,gA=["number","string","symbol","boolean","bigint"];function fx(e){if(e=e?.primaryStore||e,!e)throw new Error(_x.ENV_REQUIRED)}a(fx,"validateEnv");function Ex(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(Ex,"stringifyData");function hx(e){return e instanceof Date?e.valueOf():e}a(hx,"convertKeyValueToWrite");function mx(e){if(e==null)return;if(gA.includes(typeof e))return e.length>ol?[e.slice(0,ol)+RA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(gA.includes(typeof n))n.length>ol?t.push(n.slice(0,ol)+RA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(mx,"getIndexedValues");var al=0,AA=0;function OA(){AA=Date.now()-performance.now()}a(OA,"adjustStartTime");OA();var px=6e4;setInterval(OA,px).unref();function Sx(){let e=performance.now()+AA;return e>al?(al=e,e):(al+=488e-6,al)}a(Sx,"getNextMonotonicTime");NA.exports={validateEnv:fx,stringifyData:Ex,convertKeyValueToWrite:hx,getNextMonotonicTime:Sx,getIndexedValues:mx}});var bA,ns,RE,Pa=Te(()=>{bA=require("events"),ns=class extends bA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new RE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},RE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Mr(e){return e[Bt]||(e[Bt]=Object.create(null))}function _l(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a string, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a number, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new is.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new is.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new is.ClientError(`${c} must be a Date, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Mr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Mr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new is.ClientError(`${c} must be an object, attempt to assign ${l}`);Mr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=yA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new is.ClientError("Can not add a property to a sealed table schema");Mr(this)[o]=c}),i("deleteProperty",function(o){Mr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function yA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},_l(r,t)),new r(e)):new cl(e);case Array:let s=new ll(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=yA(o,t?.elements)),s[n]=o}return s}}function dl(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=dl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function va(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=va(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=va(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ul(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(ul(i))return!0}else return!0}}else{let r=e[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(ul(n))return!0}else return!0}else return!0}}return!1}var is,Bt,cl,li,ll,fl=Te(()=>{os();is=D(j()),Bt=Symbol("own-data");a(Mr,"getChanges");a(_l,"assignTrackedAccessors");a(yA,"trackObject");cl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};_l(cl,{});a(dl,"collapseData");a(va,"deepFreeze");a(ul,"hasChanges");li=Symbol.for("has-array-changes"),ll=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};ll.prototype.constructor=Array});function Ax(){gx=setInterval(function(){for(let e of gE)if(e.stale){let t=e[me]?.url;IA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},Rx).unref()}var AE,IA,Tx,gE,_i,El,Rx,gx,OE=Te(()=>{AE=D(hr()),IA=D(G());os();Tx=100,gE=new Set,_i=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),gE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(gE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,AE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<Tx>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},El=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,AE.getNextMonotonicTime)())}getReadTxn(){}},Rx=3e4;a(Ax,"startMonitoringTxns");Ax()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new _i;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var wA,di=Te(()=>{wA=require("../../index");os();OE();a(Ge,"transaction");(0,wA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function bE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new ro.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(DA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=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 ro.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new ro.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=yE(e);if(!S)throw new ro.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:LA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function yE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),DA[t]||t){case 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 ro.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 hl(e){if(!e)return;let t=new NE,r,s,n,i,o,c=CA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=Ox[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?Nx:CA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var ro,mt,ws,LA,Ox,DA,CA,Nx,NE,ml=Te(()=>{ro=D(j()),mt=D(ze()),ws=require("ordered-binary"),LA=require("lmdb"),Ox={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(bE,"idsForCondition");DA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(yE,"filterByType");a(Is,"attributeComparator");CA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Nx=/([^&|*=]+)([&|*=]*)/g;a(hl,"parseQuery");NE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var CE={};Qe(CE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>as,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>HA,snake_case:()=>yx});function yx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new wE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[we]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[HA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new pl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new pl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function vr(e,t){let r=new BA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function IE(e){let t=e[Re];if(t){let r=e[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 MA(e){if(typeof e=="string")return t=>IE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=IE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=IE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var PA,vA,BA,me,we,as,HA,Re,bx,Nt,pl,wE,os=Te(()=>{PA=require("crypto");Pa();vA=require("../../index"),BA=D(j());fl();di();ml();me=Symbol.for("context"),we=Symbol.for("primary-key"),as=Symbol("is-collection"),HA=Symbol("save-updates"),Re=Symbol("stored-record"),bx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=Pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=MA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[as]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,PA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):vr(t,"delete")},{hasContent:!1,type:"update"});static post=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(n,r):vr(t,"connect")},{hasContent:!0,type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(r):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=MA(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(n,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(n,r):vr(t,"move")},{type:"delete"});post(t){if(this[as])return this.constructor.create(this[we],t,this[me]);vr(this,"post")}static isCollection(t){return t?.[as]}static coerceId(t){return t}static parseQuery(t){return hl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&bx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:UA(t,this)}}return UA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[we]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[we],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[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,vA._assignPackageExport)("Resource",Nt);a(yx,"snake_case");pl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(UA,"pathToId");wE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(IE,"selectFromObject");a(MA,"transformForSelect")});var DE={};Qe(DE,{loadGQLSchema:()=>Cx,start:()=>LE,startOnMainThread:()=>wx});function LE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(q){if(q.kind==="NonNullType"){let B=Q(q.type);return B.nullable=!1,B}if(q.kind==="ListType")return{type:"array",elements:Q(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.loc.startToken}),K};a(Q,"getProperty");let A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let q of S.directives){if(q.name.value==="table"){for(let w of q.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="export"){N.export=!0;for(let w of q.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let q of S.fields){let w=Q(q.type);w.name=q.name.value,I.push(w);for(let K of q.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):Ix.includes(S.type)||(0,FA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Sl.dirname)(s),S.tableClass):i.set((0,Sl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Sl.dirname)(s)+"/"+S.name,A.tableClass)}}}var Sl,FA,Ix,wx,Cx,qA=Te(()=>{Sl=require("path");fe();FA=D(Ze()),Ix=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(LE,"start");wx=LE,Cx=LE({ensureTable:et}).handleFile});async function Tl(e){return Lx?(Ba||(Ba=Dx(Mx)),(await(await Ba).import(e)).namespace):import(e)}async function Dx(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ba=new Compartment({console,Math,Date,fetch:Ux,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:mr,databases:xe})}};let s=await(0,GA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ba}function Ux(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Mx(){return{Resource:Nt,tables:mr}}var GA,xA,Lx,Ba,UE=Te(()=>{os();fe();GA=require("fs/promises"),xA=require("path"),Lx=!1;a(Tl,"secureImport");a(Dx,"getCompartment");a(Ux,"secureOnlyFetch");a(Mx,"getGlobalVars")});var PE={};Qe(PE,{handleFile:()=>Px});async function Px(e,t,r,s){let n=new Map,i=(0,kA.pathToFileURL)(r).toString(),o=await Tl(i);u(o.default)&&s.set((0,ME.dirname)(t),o.default),c(o,(0,ME.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var kA,ME,VA=Te(()=>{kA=require("url");UE();ME=require("path");a(Px,"handleFile")});var BE={};Qe(BE,{start:()=>vx});function vx({resources:e}){e.set("login",vE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vE,$A=Te(()=>{os();a(vx,"start");vE=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var FE=T((cne,WA)=>{"use strict";var{Readable:Bx}=require("stream"),Hx=1e4;WA.exports={streamAsJSON(e){return new HE({value:e})}};var HE=class extends Bx{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),YA)}catch(n){yield YA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);KA(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Hx?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return KA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function YA(e){return console.error(e),JSON.stringify(e.toString())}a(YA,"handleError");function KA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(KA,"when")});var oO=T((_ne,iO)=>{"use strict";var qE=require("recursive-iterator"),Fx=require("alasql"),GE=require("clone"),QA=$(),{handleHDBError:zA,hdb_errors:qx}=j(),{HDB_ERROR_MSGS:JA,HTTP_STATUS_CODES:XA}=qx,{getDatabases:Gx}=(fe(),Z(Ce)),xx=["DISTINCT_ARRAY"],jA=Symbol("validateTables"),xE=Symbol("validateTable"),lne=Symbol("getAllColumns"),ZA=Symbol("validateAllColumns"),Rl=Symbol("findColumn"),eO=Symbol("validateOrderBy"),Ha=Symbol("validateSegment"),kE=Symbol("validateColumn"),tO=Symbol("setColumnsForTable"),rO=Symbol("checkColumnsForAsterisk"),sO=Symbol("validateGroupBy"),nO=Symbol("hasColumns"),VE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[jA](),this[rO](),this[ZA]()}[jA](){if(this[nO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xE](t.table)})}}[nO](){let t=!1,r=new qE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[xE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=Gx();if(!r[t.databaseid])throw zA(new Error,JA.SCHEMA_NOT_FOUND(t.databaseid),XA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zA(new Error,JA.TABLE_NOT_FOUND(t.databaseid,t.tableid),XA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=GE(n);i.table=GE(t),this.attributes.push(i)})}[Rl](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[rO](){let t=new qE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tO](r.tableid)}[tO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new Fx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZA](){this[Ha](this.statement.columns,!1),this[Ha](this.statement.joins,!1),this[Ha](this.statement.where,!1),this[sO](this.statement.group,!1),this[Ha](this.statement.order,!0)}[Ha](t,r){if(!t)return;let s=new qE(t),n=[];for(let{node:i,path:o}of s)!QA.isEmpty(i)&&!QA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eO](i):n.push(this[kE](i)));return n}[sO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&xx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=GE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Rl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Rl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[eO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[kE](t)}[kE](t){let r=this[Rl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};iO.exports=VE});var cO=T((fne,aO)=>{"use strict";var $E=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};aO.exports=$E});var lO=T((hne,uO)=>{"use strict";var YE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uO.exports=YE});var AO={};Qe(AO,{AUDIT_STORE_OPTIONS:()=>RO,createAuditEntry:()=>Ol,openAuditStore:()=>Al,readAuditEntry:()=>pr,setAuditRetention:()=>kx,transactionKeyEncoder:()=>TO});function Al(e){let t=e.auditStore=e.openDB(hO.AUDIT_STORE_NAME,RO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,pO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-KE})){if((n[0]&15)===QE){let i=pr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},KE/10).unref())}),t}function kx(e){clearTimeout(Fa),Fa=null,KE=e}function Ol(e,t,r,s,n,i,o){let c=gO[i],u=1;s&&(s>1?so.setFloat64(0,s):Br.set(XE),u=9),f(0),f(t),d(r),so.setFloat64(u,e),u+=8,n?d(n):Br[u++]=0,Br[s?8:0]=c;let l=Br.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,no.writeKey)(E,Br,u);let p=u-h-1;p>127?p>16383?(JE.error("Key or username was too large for audit entry",E),u=h+1,Br[h]=0):(Br.copyWithin(h+2,h+1,u),so.setUint16(h,p|32768),u++):Br[h]=p}function f(E){E<128?Br[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(Br[u]=255,so.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:gO[s&7],tableId:i,get recordId(){return EO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?EO(e,l,d):void 0},getValue(f){return s&WE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return JE.error("Reading audit entry error",e),{}}}function EO(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,gl,hO,mO,pO,SO,JE,Br,so,TO,RO,KE,Fa,WE,_O,QE,dO,fO,gO,zE,io=Te(()=>{no=require("ordered-binary"),gl=D(X()),hO=D(ze()),mO=D(b()),pO=D(Ze()),SO=D($());Ga();JE=D(G());(0,gl.initSync)();Br=Buffer.alloc(1024),so=new DataView(Br.buffer,Br.byteOffset,1024),TO={writeKey(e,t,r){return e===qa?(t.set(qa,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,no.readKey)(e,t,r)}},RO={encoding:"binary",keyEncoder:TO},KE=(0,SO.convertToMS)((0,gl.get)(mO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Al,"openAuditStore");a(kx,"setAuditRetention");WE=16,_O=1,QE=2,dO=3,fO=4,gO={put:_O|WE,[_O]:"put",delete:QE,[QE]:"delete",message:dO|WE,[dO]:"message",invalidate:fO,[fO]:"invalidate"};a(Ol,"createAuditEntry");a(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(EO,"readKeySafely")});var wO={};Qe(wO,{HAS_EXPIRATION:()=>sh,LAST_TIMESTAMP_PLACEHOLDER:()=>qa,LOCAL_TIMESTAMP:()=>Vx,METADATA:()=>xa,NO_TIMESTAMP:()=>jE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>XE,RecordEncoder:()=>rh,TIMESTAMP_ASSIGN_LAST:()=>Yx,TIMESTAMP_ASSIGN_NEW:()=>bO,TIMESTAMP_ASSIGN_PREVIOUS:()=>yO,TIMESTAMP_PLACEHOLDER:()=>Nl,TIMESTAMP_RECORD_PREVIOUS:()=>ZE,getUpdateRecord:()=>nh,handleLocalTimeForGets:()=>Il});function IO(){return ao[0]=ao[0]^64,$x.getFloat64(0)}function Il(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Kx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=IO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function nh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?ZE|yO:jE:oo=u?i?.localTime?ZE|16384:bO|16384:jE,l>0&&(c|=sh),yl=c,th=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=eh,A.timestampOffset=eh.start||0))}if(u){let A=_?.user?.username;if(E&&(bl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=pr(N).previousLocalTime;return r.put(I,Ol(o,t,s,Y,A,d,bl),{ifVersion:p}),S}}r.put(qa,Ol(o,t,s,i?.localTime?1:0,A,d,bl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var OO,NO,Nl,qa,XE,Vx,xa,ao,$x,jE,bO,Yx,yO,ZE,sh,eh,bl,oo,yl,th,rh,Kx,fi,Ga=Te(()=>{OO=require("msgpackr");io();NO=D(G()),Nl=new Uint8Array([1,1,1,1,4,64,0,0]),qa=new Uint8Array([1,1,1,1,1,0,0,0]),XE=new Uint8Array([1,1,1,1,3,64,0,0]),Vx=Symbol("local-timestamp"),xa=Symbol("metadata"),ao=new Uint8Array(8),$x=new DataView(ao.buffer,0,8),jE=0,bO=0,Yx=1,yO=3,ZE=4,sh=16,oo=0,yl=-1,th=0,rh=class extends OO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||yl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=yl,u=th;c>=0&&(i+=2,yl=-1,u&&(i+=8,th=0));let _=eh=r.call(this,s,n|2048|i);bl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Nl[4]=o,Nl[5]=o>>8,_.set(Nl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=IO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&sh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(IO,"getTimestamp");Kx=Map.prototype.get;a(Il,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&NO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(nh,"getUpdateRecord")});var wl=T((gne,CO)=>{"use strict";var oh=X(),ah=b(),{RecordEncoder:Wx}=(Ga(),Z(wO));oh.initSync();var Qx=oh.get(ah.CONFIG_PARAMS.STORAGE_COMPRESSION),zx=oh.get(ah.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Jx=ah.UPDATES_PROPERTY,ih=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Qx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=zx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Wx},this.alwaysLazyProperty=s=>s===Jx)}};CO.exports=ih});var Ll=T((One,DO)=>{"use strict";var co=X(),ka=b();co.initSync();var Xx=co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",LO=co.get(ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),jx=co.get(ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Cl=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=Xx,this.noFSAccess=!0,LO!==void 0&&(this.overlappingSync=LO),this.noReadAhead=jx}};DO.exports=Cl;Cl.MAX_DBS=1e4});var Ue=T((bne,xO)=>{"use strict";var uh=require("lmdb"),cs=require("fs-extra"),Sr=require("path"),Dl=hr(),PO=G(),zt=dr().LMDB_ERRORS_ENUM,Ul=lO(),lh=wl(),vO=Ll(),Un=ze(),UO=b(),{table:Zx,resetDatabases:ek}=(fe(),Z(Ce)),MO=X(),us=Un.INTERNAL_DBIS_NAME,BO=Un.DBI_DEFINITION_NAME,tk="data.mdb",rk="lock.mdb",Va=".mdb",sk="-lock",ch=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Hr(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new uh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ml(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Ml,"pathEnvNameValidation");async function _h(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+Va);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,tk),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(_h,"validateEnvironmentPath");function Pl(e,t){if(Dl.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Pl,"validateEnvDBIName");async function nk(e,t,r=!1,s=!1){Ml(e,t);let n=Sr.basename(e);t=t.toString();let i=MO.get(UO.CONFIG_PARAMS.DATABASES);i||MO.setProperty(UO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await _h(e,t,s),HO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Sr.join(e,t);await cs.mkdirp(s?c:e);let u=new vO(s?c:c+Va,!1),_=uh.open(u);_.dbis=Object.create(null);let l=new lh(!1);_.openDB(us,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=dh(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(nk,"createEnvironment");async function ik(e,t,r,s=!0){Ml(e,t),t=t.toString();let n=Sr.join(e,t);return Zx({table:t,database:Sr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ik,"copyEnvironment");async function HO(e,t,r=!1){Ml(e,t),t=t.toString();let s=dh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await _h(e,t),i=Sr.join(e,t+Va),o=n!=i,c=new vO(n,o),u=uh.open(c);u.dbis=Object.create(null);let _=qO(u);for(let l=0;l<_.length;l++)Hr(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(HO,"openEnvironment");async function ok(e,t,r=!1){Ml(e,t),t=t.toString();let s=Sr.join(e,t+Va),n=await _h(e,t);if(global.lmdb_map!==void 0){let i=dh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await FO(o),delete global.lmdb_map[i]}}await cs.remove(n),await cs.remove(n===s?n+sk:Sr.join(Sr.dirname(n),rk))}a(ok,"deleteEnvironment");async function FO(e){Dl.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function dh(e,t,r=!1){let n=`${Sr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(dh,"getCachedEnvironmentName");function ak(e){Dl.validateEnv(e);let t=Object.create(null),r=Hr(e,us);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==us)try{t[s]=Object.assign(new Ul,n)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ak,"listDBIDefinitions");function qO(e){Dl.validateEnv(e);let t=[],r=Hr(e,us);for(let{key:s}of r.getRange({start:!1}))s!==us&&t.push(s);return t}a(qO,"listDBIs");function ck(e,t){let s=Hr(e,us).getEntry(t),n=new Ul;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(ck,"getDBIDefinition");function GO(e,t,r,s=!r){if(Pl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Hr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new lh(r,s===!0),o=e.openDB(t,i),c=new Ul(r===!0,s);return o[BO]=c,Hr(e,us).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GO,"createDBI");function Hr(e,t){if(Pl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==us?r=ck(e,t):r=new Ul,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new lh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(zt.DBI_DOES_NOT_EXIST):n}return s[BO]=r,e.dbis[t]=s,s}a(Hr,"openDBI");function uk(e,t){Pl(e,t),t=t.toString();let r=Hr(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(uk,"statDBI");async function lk(e,t){try{let r=Sr.join(e,t+Va);return(await cs.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(lk,"environmentDataSize");function _k(e,t){if(Pl(e,t),t=t.toString(),t===us)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);Hr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Hr(e,us).removeSync(t)}a(_k,"dropDBI");function dk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Hr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)GO(e,i,i!==t,i===t),s=!0;else throw o}}s&&ek()}a(dk,"initializeDBIs");xO.exports={openDBI:Hr,openEnvironment:HO,createEnvironment:nk,listDBIs:qO,listDBIDefinitions:ak,createDBI:GO,dropDBI:_k,statDBI:uk,deleteEnvironment:ok,initializeDBIs:dk,TransactionCursor:ch,environmentDataSize:lk,copyEnvironment:ik,closeEnvironment:FO}});var VO=T((Ine,kO)=>{"use strict";var fh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};kO.exports=fh});var YO=T((Cne,$O)=>{"use strict";var Eh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};$O.exports=Eh});var WO=T((Dne,KO)=>{"use strict";var hh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};KO.exports=hh});var uo=T((Bne,JO)=>{"use strict";var fk=Ue(),Ek=VO(),hk=YO(),mk=WO(),Cs=hr(),$a=dr().LMDB_ERRORS_ENUM,pk=ze(),tn=b(),Sk=$(),Tk=require("uuid"),Mne=require("lmdb"),{handleHDBError:Rk,hdb_errors:gk}=j(),{OVERFLOW_MARKER:Pne,MAX_SEARCH_KEY_LENGTH:vne}=pk,QO=X();QO.initSync();var vl=QO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ak(e,t,r,s,n=Cs.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new Ek,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];zO(_,!0,n);let l=Ok(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Sh(o,c,s,i,n)}a(Ak,"insertRecords");function Ok(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Cs.getIndexedValues(c),_=e.dbis[o];if(u){vl&&_.prefetch(u.map(l=>({key:l,value:n})),Bl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}vl&&e.dbis[t].prefetch([n],Bl),e.dbis[t].put(n,s,s[Ei])})}a(Ok,"insertRecord");function Nk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Nk,"removeSkippedRecords");function zO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Cs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mh]))&&(e[mh]=r||Cs.getNextMonotonicTime()):delete e[mh]}a(zO,"setTimestamps");function ph(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),fk.initializeDBIs(e,t,r)}a(ph,"initializeTransaction");async function bk(e,t,r,s,n=Cs.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new hk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Th(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Sh(c,u,s,i,n,o)}a(bk,"updateRecords");async function yk(e,t,r,s,n=Cs.getNextMonotonicTime()){try{Rh(e,t,r,s)}catch(u){throw Rk(u,u.message,gk.HTTP_STATUS_CODES.BAD_REQUEST)}ph(e,t,r);let i=new mk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Sk.isEmpty(_[t])?(l=Tk.v4(),_[t]=l):l=_[t];let d=Th(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Sh(o,c,s,i,n)}a(yk,"upsertRecords");async function Sh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Cs.getNextMonotonicTime(),Nk(r,i),s}a(Sh,"finalizeWrite");function Th(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(zO(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Cs.getIndexedValues(A);if(I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Cs.getIndexedValues(p),I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Th(e,t,r,s,n,i,o))}a(Th,"updateUpsertRecord");function Ik(e,t,r){if(Cs.validateEnv(e),t===void 0)throw new Error($a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($a.WRITE_ATTRIBUTES_REQUIRED):new Error($a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ik,"validateBasic");function Rh(e,t,r,s){if(Ik(e,t,r),!Array.isArray(s))throw s===void 0?new Error($a.RECORDS_REQUIRED):new Error($a.RECORDS_MUST_BE_ARRAY)}a(Rh,"validateWrite");function Bl(){}a(Bl,"noop");JO.exports={insertRecords:Ak,updateRecords:bk,upsertRecords:yk}});var hi=T((Fne,wk)=>{wk.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ls=T((qne,ZO)=>{"use strict";var jO=$(),XO=b(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Mn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ck=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required(),Lk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()),Dk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required();function Uk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Uk,"checkValidTable");function Mk(e,t){return jO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Mk,"validateSchemaExists");function Pk(e,t){let r=t.state.ancestors[0].schema;return jO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Pk,"validateTableExists");function vk(e,t){return e.toLowerCase()===XO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(vk,"validateSchemaName");ZO.exports={common_validators:Mn,schema_regex:lo,hdb_schema_table:Ck,validateSchemaExists:Mk,validateTableExists:Pk,validateSchemaName:vk,checkValidTable:Uk,hdb_database:Lk,hdb_table:Dk}});var Hl=T((xne,eN)=>{var{common_validators:Ds}=Ls(),Ka=qe(),Ya="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 Wa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Wa,"makeAttributesStrings");function Bk(e){return e=Wa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Bk,"schema_object");function Hk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Hk,"table_object");function Fk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,Ka.validateObject(e,tt)}a(Fk,"create_table_object");function qk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence={message:Ya},tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(qk,"attribute_object");function Gk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Gk,"describe_table");function xk(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(xk,"validateTableResidence");eN.exports={schema_object:Bk,create_table_object:Fk,table_object:Hk,attribute_object:qk,describe_table:Gk,validateTableResidence:xk}});var rN=T((Vne,tN)=>{"use strict";var kk=require("uuid"),gh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||kk.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=gh});var Fl=T((Yne,sN)=>{"use strict";var Vk=rN(),Ah=class extends Vk{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};sN.exports=Ah});var iN=T((Wne,nN)=>{"use strict";nN.exports=Yk;var $k="inserted";function Yk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===$k?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Yk,"returnObject")});var ql=T((zne,lN)=>{"use strict";var Kk=b(),Oh=Ue(),Wk=uo(),{getSystemSchemaPath:Qk,getSchemaPath:zk}=ve(),Jk=hi(),Xk=Hl(),jk=Fl(),Zk=iN(),{handleHDBError:oN,hdb_errors:cN}=j(),aN=$(),{HTTP_STATUS_CODES:eV}=cN,Nh=Jk.hdb_attribute,uN=[];for(let e=0;e<Nh.attributes.length;e++)uN.push(Nh.attributes[e].attribute);var tV="inserted";lN.exports=rV;async function rV(e){let t=Xk.attribute_object(e);if(t)throw oN(new Error,t.message,cN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&aN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oN(new Error,r,eV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new jk(e.schema,e.table,e.attribute,e.id);try{let i=await Oh.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}`);Oh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Oh.openEnvironment(Qk(),Kk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Wk.insertRecords(o,Nh.hash_attribute,uN,[n]);return Zk(tV,c,{records:[n]},u)}catch(i){throw i}}a(rV,"lmdbCreateAttribute")});var yh=T((Xne,dN)=>{var{hdb_table:sV,hdb_database:_N}=Ls(),nV=qe(),bh=require("joi"),iV={undefined:"undefined",null:"null"},oV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||iV[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),aV=bh.object({database:_N,schema:_N,table:sV,records:bh.array().items(bh.object().custom(oV)).required()});dN.exports=function(e){return nV.validateBySchema(e,aV)}});var Qa=T((eie,EN)=>{"use strict";var sn=$(),fN=G(),Zne=yh(),{getDatabases:cV}=(fe(),Z(Ce)),{ClientError:mi}=j();EN.exports=uV;function uV(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=cV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new mi("a valid hash attribute must be provided with update record, check log for more info");if(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(uV,"insertUpdateValidate")});var za=T((rie,hN)=>{"use strict";var lV=b().OPERATIONS_ENUM,Ih=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=lV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};hN.exports=Ih});var Za=T((iie,mN)=>{"use strict";var nie=za(),Gl=b(),Ch=$(),wh=G(),_V=require("uuid"),{handleHDBError:Ja,hdb_errors:dV}=j(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:ja}=dV;mN.exports=fV;function fV(e,t,r){for(let n=0;n<t.length;n++)EV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];hV(i,r,e.operation)}}a(fV,"processRows");function EV(e){if(Buffer.byteLength(String(e))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),ja.BAD_REQUEST,void 0,void 0,!0);if(Ch.isEmptyOrZeroLength(e)||Ch.isEmpty(e.trim()))throw Ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(EV,"validateAttribute");function hV(e,t,r){if(!e.hasOwnProperty(t)||Ch.isEmptyOrZeroLength(e[t])){if(r===Gl.OPERATIONS_ENUM.INSERT||r===Gl.OPERATIONS_ENUM.UPSERT){e[t]=_V.v4();return}throw wh.error("Update transaction aborted due to record with no hash value:",e),Ja(new Error,Xa.RECORD_MISSING_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wh.error(e),Ja(new Error,Xa.HASH_VAL_LENGTH_ERR,ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw wh.error(e),Ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(hV,"validateHash")});var SN=T((aie,pN)=>{"use strict";var Lh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=Lh});var gN=T((uie,RN)=>{"use strict";var Dh=Ue(),mV=G(),TN=dr().LMDB_ERRORS_ENUM;RN.exports=pV;async function pV(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Dh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==TN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Dh.closeEnvironment(global.lmdb_map[s]),await Dh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==TN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){mV.error(t)}}a(pV,"cleanLMDBMap")});var nn=T((_ie,bN)=>{"use strict";var ec=require("crypto"),SV=X(),{CONFIG_PARAMS:TV}=b(),ON="aes-256-cbc",RV=32,gV=16,Uh=64,NN=32,AV=Uh+NN,AN=new Map;bN.exports={encrypt:OV,decrypt:NV,createNatsTableStreamName:bV};function OV(e){let t=ec.randomBytes(RV),r=ec.randomBytes(gV),s=ec.createCipheriv(ON,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(OV,"encrypt");function NV(e){let t=e.substr(0,Uh),r=e.substr(Uh,NN),s=e.substr(AV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ec.createDecipheriv(ON,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(NV,"decrypt");function bV(e,t){let r=SV.get(TV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=AN.get(r);return s||(s=ec.createHash("md5").update(r).digest("hex"),AN.set(r,s)),s}a(bV,"createNatsTableStreamName")});var pi=T((Eie,IN)=>{"use strict";var fie=Fr(),xl=G(),yN=Hl(),yV=nn(),kl=$(),{handleHDBError:Vl,hdb_errors:IV}=j(),{HDB_ERROR_MSGS:$l,HTTP_STATUS_CODES:Mh}=IV,wV=X();wV.initSync();var{getDatabases:Ph}=(fe(),Z(Ce));IN.exports={describeAll:CV,describeTable:Yl,describeSchema:LV};async function CV(e){try{let t=kl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Ph(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Yl({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Yl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){xl.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return xl.error("Got an error in describeAll"),xl.error(t),Vl(new Error,$l.DESCRIBE_ALL_ERR)}}a(CV,"describeAll");async function Yl(e,t){kl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=yN.describe_table(e);if(i)throw i;let c=Ph()[r];if(!c)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let u=c[s];if(!u)throw Vl(new Error,$l.TABLE_NOT_FOUND(e.schema,e.table),Mh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=yV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){xl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Yl,"descTable");async function LV(e){kl.transformReq(e);let t=yN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Ph()[s];if(!i)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),kl.isEmpty(u)||u.describe){let _=await Yl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(LV,"describeSchema")});var Pn=T((Sie,UN)=>{var DV=hi(),{callbackify:CN,promisify:UV}=require("util"),{getDatabases:LN}=(fe(),Z(Ce));UN.exports={setSchemaDataToGlobal:wN,getTableSchema:MV,getSystemSchema:PV,setSchemaDataToGlobalAsync:UV(wN)};var DN=pi(),mie=CN(DN.describeAll),pie=CN(DN.describeTable);function wN(e){global.hdb_schema=LN(),e&&e()}a(wN,"setSchemaDataToGlobal");function MV(e,t,r){let s=LN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(MV,"getTableSchema");function PV(){return DV}a(PV,"getSystemSchema")});var qr=T((Rie,BN)=>{"use strict";var Wl=yh(),bt=$(),vV=require("util"),Ql=ls(),BV=Pn(),MN=G(),{handleHDBError:Si,hdb_errors:HV}=j(),{HTTP_STATUS_CODES:Ti}=HV,FV=vV.promisify(BV.getTableSchema),qV="updated",PN="inserted",vN="upserted";BN.exports={insert:xV,update:kV,upsert:VV,validation:GV,flush:$V};async function GV(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await FV(e.schema,e.table),r=Wl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&bt.isEmptyOrZeroLength(c[s]))throw MN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw MN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(GV,"validation");async function xV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.createRecords(e);return Kl(PN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(xV,"insertData");async function kV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.updateRecords(e);return bt.isEmpty(s.existing_rows)?Kl(qV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Kl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(kV,"updateData");async function VV(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.upsertRecords(e);return Kl(vN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(VV,"upsertData");function Kl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===PN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===vN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Kl,"returnObject");function $V(e){return bt.transformReq(e),Ql.flush(e.schema,e.table)}a($V,"flush")});var Bh=T((Aie,qN)=>{var YV=qe(),vh=require("joi"),{hdb_table:KV,hdb_database:HN}=Ls(),FN={schema:HN,database:HN,table:KV},WV={date:vh.date().iso().required()},QV={timestamp:vh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qN.exports=function(e,t){let r=t==="timestamp"?{...FN,...QV}:{...FN,...WV},s=vh.object(r);return YV.validateBySchema(e,s)}});var kN=T((Oie,xN)=>{var zV=qe(),Hh=require("joi"),{hdb_table:JV,hdb_database:GN}=Ls(),XV=Hh.object({schema:GN,database:GN,table:JV,hash_values:Hh.array().required(),ids:Hh.array()});xN.exports=function(e){return zV.validateBySchema(e,XV)}});var $N=T((Nie,VN)=>{"use strict";var Fh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},qh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Gh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:Fh,NoSQLSeachObject:qh,DeleteResponseObject:Gh}});var Ai=T((yie,zN)=>{"use strict";var KN=Bh(),jV=kN(),Ri=$(),YN=require("moment"),WN=G(),{promisify:ZV,callbackify:e$}=require("util"),gi=b(),t$=Pn(),xh=ZV(t$.getTableSchema),kh=ls(),{DeleteResponseObject:r$}=$N(),{handleHDBError:vn,hdb_errors:s$}=j(),{HDB_ERROR_MSGS:zl,HTTP_STATUS_CODES:Bn}=s$,n$="records successfully deleted",i$=e$(QN);zN.exports={delete:i$,deleteRecord:QN,deleteFilesBefore:o$,deleteAuditLogsBefore:a$};async function o$(e){let t=KN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw vn(new Error,zl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await kh.deleteRecordsBefore(e);if(await xh(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(o$,"deleteFilesBefore");async function a$(e){let t=KN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,zl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await kh.deleteAuditLogsBefore(e);return await xh(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(a$,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=jV(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await xh(e.schema,e.table);let s=await kh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${n$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new r$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QN,"deleteRecord")});var Jl=T((wie,jN)=>{var c$=require("crypto"),JN=9;function u$(e){let t=_$(JN),r=XN(e+t);return t+r}a(u$,"createHash");function l$(e,t){let r=e.substr(0,JN),s=r+XN(t+r);return e===s}a(l$,"validateHash");function _$(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(_$,"generateSalt");function XN(e){return c$.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:u$,validate:l$}});var eb=T((Lie,ZN)=>{var Vh=qe(),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 d$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Vh.validateObject(e,Ht)}a(d$,"addUserValidation");function f$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Vh.validateObject(e,Ht)}a(f$,"alterUserValidation");function E$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Vh.validateObject(e,Ht)}a(E$,"dropUserValidation");ZN.exports={addUserValidation:d$,alterUserValidation:f$,dropUserValidation:E$}});var ke=T((Mie,rb)=>{"use strict";var{platform:Uie}=require("os"),h$="nats-server.zip",$h="nats-server",m$=process.platform==="win32"?`${$h}.exe`:$h,Yh="HDB",p$=/^[^\s.,*>]+$/,tb="__request__",S$=a(e=>`${e}.${tb}`,"REQUEST_SUBJECT"),T$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},R$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},g$={HUB:"hub.pid",LEAF:"leaf.pid"},A$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},O$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Yh,deliver_subject:"__HDB__.WORKQUEUE"},N$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Yh,deliver_subject:"HDB.SCHEMAQUEUE"},b$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Yh,deliver_subject:"HDB.USERQUEUE"},y$={SUCCESS:"success",ERROR:"error"},I$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},w$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},C$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},L$={debug:"-D",trace:"-DVV"};rb.exports={NATS_SERVER_ZIP:h$,NATS_SERVER_NAME:$h,NATS_BINARY_NAME:m$,PID_FILES:g$,NATS_CONFIG_FILES:R$,SERVER_SUFFIX:A$,WORK_QUEUE_CONSUMER_NAMES:O$,SCHEMA_QUEUE_CONSUMER_NAMES:N$,USER_QUEUE_CONSUMER_NAMES:b$,NATS_TERM_CONSTRAINTS_RX:p$,REQUEST_SUFFIX:tb,UPDATE_REMOTE_RESPONSE_STATUSES:y$,CLUSTER_STATUS_STATUSES:I$,REQUEST_SUBJECT:S$,SUBJECT_PREFIXES:w$,MSG_HEADERS:T$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:L$,LOG_LEVEL_HIERARCHY:C$}});var nb=T((vie,sb)=>{"use strict";var Xl=b(),jl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Kh=class extends jl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};sb.exports={BaseLicense:jl,ExtendedLicense:Kh}});var tc=T((Hie,lb)=>{"use strict";var Eo=require("fs-extra"),ib=Jl(),ob=require("crypto"),D$=require("moment"),U$=require("uuid").v4,Ft=G(),Qh=require("path"),M$=$(),Hn=b(),P$=nb().ExtendedLicense,fo="invalid license key format",v$="061183",B$="mofi25",H$="aes-256-cbc",F$=16,q$=32,ab=X();ab.initSync();var Wh;lb.exports={validateLicense:cb,generateFingerPrint:x$,licenseSearch:ub,getLicense:$$};function zh(){return Qh.join(ab.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(zh,"getLicenseDirPath");function G$(){let e=zh();return Qh.join(e,Hn.LICENSE_FILE_NAME)}a(G$,"getLicenseFilePath");function Jh(){let e=zh();return Qh.join(e,Hn.REG_KEY_FILE_NAME)}a(Jh,"getFingerPrintFilePath");async function x$(){let e=Jh();try{return await Eo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await k$();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(x$,"generateFingerPrint");async function k$(){let e=U$(),t=ib.hash(e),r=Jh();try{await Eo.mkdirp(zh()),await Eo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(k$,"writeFingerprint");function cb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Jh(),n=!1;try{n=Eo.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Eo.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(B$),c=o[1];c=Buffer.concat([Buffer.from(c)],F$);let u=Buffer.concat([Buffer.from(i)],q$),_=ob.createDecipheriv(H$,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=V$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fo),Ft.error(fo),new Error(fo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(fo),Ft.error(fo),new Error(fo)}else r.exp_date=l;r.exp_date<D$().valueOf()&&(r.valid_date=!1),ib.validate(o[1],`${v$}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ft.error("Invalid licence"),r}a(cb,"validateLicense");function V$(e,t){try{let r=ob.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(V$,"checkOldLicense");function ub(){let e=new P$,t=[];try{t=Eo.readFileSync(G$(),"utf-8").split(Hn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(M$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=cb(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Wh=e,e}a(ub,"licenseSearch");async function $$(){return Wh||await ub(),Wh}a($$,"getLicense")});var Gr=T((kie,yb)=>{"use strict";var Eb="username is required",hb="nothing to update, must supply active, role or password to update",mb="password cannot be an empty string",pb="If role is specified, it cannot be empty.",Sb="active must be true or false";yb.exports={addUser:Z$,alterUser:eY,dropUser:rY,getSuperUser:oY,userInfo:sY,listUsers:e_,listUsersExternal:nY,setUsersToGlobal:mo,findAndValidateUser:Nb,getClusterUser:aY,USERNAME_REQUIRED:Eb,ALTERUSER_NOTHING_TO_UPDATE:hb,EMPTY_PASSWORD:mb,EMPTY_ROLE:pb,ACTIVE_BOOLEAN:Sb};var Tb=qr(),Y$=Ai(),Zh=Jl(),Rb=eb(),gb=Fr(),em=on(),Tr=$(),Ab=require("validate.js"),_e=G(),{promisify:K$}=require("util"),tm=nn(),_b=b(),db=ke(),W$=Er(),qie=X(),Gie=tc(),Q$=hi(),{table:xie}=(fe(),Z(Ce)),{handleHDBError:Us,hdb_errors:z$}=j(),{HTTP_STATUS_CODES:Ms,AUTHENTICATION_ERROR_MSGS:Xh,HDB_ERROR_MSGS:ho}=z$,{UserEventMsg:rm}=_s(),jh=require("lodash"),{server:sm}=(Ur(),Z(eo)),J$=G();sm.getUser=Nb;var Ob={username:!0,active:!0,role:!0,password:!0},fb=new Map,Zl=gb.searchByValue,X$=gb.searchByHash,j$=K$(Y$.delete);async function Z$(e){let t=Ab.cleanAttributes(e,Ob),r=Rb.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 Zl(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Us(new Error,ho.ROLE_NAME_NOT_FOUND(t.role),Ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Us(new Error,ho.DUP_ROLES_FOUND(t.role),Ms.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Tb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await mo()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Us(new Error,ho.USER_ALREADY_EXISTS(t.username),Ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],em.signalUserChange(new rm(process.pid)),`${c.username} successfully added`}a(Z$,"addUser");async function eY(e){let t=Ab.cleanAttributes(e,Ob);if(Tr.isEmptyOrZeroLength(t.username))throw new Error(Eb);if(Tr.isEmptyOrZeroLength(t.password)&&Tr.isEmptyOrZeroLength(t.role)&&Tr.isEmptyOrZeroLength(t.active))throw new Error(hb);if(!Tr.isEmpty(t.password)&&Tr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mb);if(!Tr.isEmpty(t.active)&&!Tr.isBoolean(t.active))throw new Error(Sb);let r=tY(t.username);if(!Tr.isEmpty(t.password)&&!Tr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password)),t.role==="")throw new Error(pb);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Zl(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=ho.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Us(new Error,c,Ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ho.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 Tb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await mo()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return em.signalUserChange(new rm(process.pid)),n}a(eY,"alterUser");function tY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(tY,"isClusterUser");async function rY(e){try{let t=Rb.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,ho.USER_NOT_EXIST(e.username),Ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await j$(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await mo()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return em.signalUserChange(new rm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(rY,"dropUser");async function sY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await X$(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(sY,"userInfo");async function nY(){let e;try{e=await e_()}catch(t){throw _e.error("Got an error listing users."),_e.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(nY,"listUsersExternal");async function e_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Zl(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=jh.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Zl(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=jh.cloneDeep(o),o.role=r[o.role],iY(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(e_,"listUsers");function iY(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(Q$)){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(iY,"appendSystemTablesToRole");async function mo(){try{let e=await e_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(mo,"setUsersToGlobal");async function Nb(e,t,r=!0){global.hdb_users||await mo();let s=global.hdb_users.get(e);if(!s)throw Us(new Error,Xh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Us(new Error,Xh.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(fb.get(t)===s.password)return n;if(Zh.validate(s.password,t))fb.set(t,s.password);else throw Us(new Error,Xh.GENERIC_AUTH_FAIL,Ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Nb,"findAndValidateUser");async function oY(){global.hdb_users||await mo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(oY,"getSuperUser");async function aY(){let e=await e_(),t=W$.getConfigFromFile(_b.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Tr.isEmpty(r)&&r?.role?.role===_b.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=tm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+db.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+db.SERVER_SUFFIX.ADMIN,r}a(aY,"getClusterUser");var bb=[];sm.invalidateUser=function(e){for(let t of bb)try{t(e)}catch(r){J$.error("Error invalidating user",r)}};sm.onInvalidatedUser=function(e){bb.push(e)}});var sc=T((Kie,Lb)=>{"use strict";var Oi=G(),Rr=b(),cY=gN(),$ie=Pn(),Yie=pi(),uY=Gr(),{validateEvent:Ib}=_s(),rc=ls(),lY=require("process"),{resetDatabases:_Y}=(fe(),Z(Ce)),dY={[Rr.ITC_EVENT_TYPES.SCHEMA]:fY,[Rr.ITC_EVENT_TYPES.USER]:Cb};async function fY(e){let t=Ib(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await cY(e.message),await EY(e.message)}a(fY,"schemaHandler");async function EY(e){try{rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=_Y();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(EY,"syncSchemaMetadata");var wb=[];async function Cb(e){try{try{rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),rc.resetReadTxn(Rr.SYSTEM_SCHEMA_NAME,Rr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Ib(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${Rr.HDB_ITC_CLIENT_PREFIX}${lY.pid} received user event:`,e),await uY.setUsersToGlobal();for(let r of wb)r()}catch(t){Oi.error(t)}}a(Cb,"userHandler");Cb.addListener=function(e){wb.push(e)};Lb.exports=dY});var _s=T((jie,Ub)=>{"use strict";var Qie=G(),nm=$(),hY=b(),{ITC_ERRORS:nc}=dr(),{parentPort:zie,threadId:mY,isMainThread:pY,workerData:Jie}=require("worker_threads"),{onMessageFromWorkers:SY,broadcast:Xie,broadcastWithAcknowledgement:TY}=Ze();Ub.exports={sendItcEvent:RY,validateEvent:Db,SchemaEventMsg:gY,UserEventMsg:AY};var t_;SY(async(e,t)=>{t_=t_||sc(),Db(e),t_[e.type]&&await t_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function RY(e){return!pY&&e.message&&(e.message.originator=mY),TY(e)}a(RY,"sendItcEvent");function Db(e){if(typeof e!="object")return nc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||nm.isEmpty(e.type))return nc.MISSING_TYPE;if(!e.hasOwnProperty("message")||nm.isEmpty(e.message))return nc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||nm.isEmpty(e.message.originator))return nc.MISSING_ORIGIN;if(hY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return nc.INVALID_EVENT(e.type)}a(Db,"validateEvent");function gY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(gY,"SchemaEventMsg");function AY(e){this.originator=e}a(AY,"UserEventMsg")});var on=T((toe,Bb)=>{"use strict";var Mb=b(),eoe=$(),r_=G(),Pb=SN(),po,{sendItcEvent:vb}=_s();function OY(e){try{r_.trace("signalSchemaChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.SCHEMA,e);return po.schema(t),vb(t)}catch(t){r_.error(t)}}a(OY,"signalSchemaChange");function NY(e){try{r_.trace("signalUserChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.USER,e);return po.user(t),vb(t)}catch(t){r_.error(t)}}a(NY,"signalUserChange");Bb.exports={signalSchemaChange:OY,signalUserChange:NY}});var s_=T((soe,Fb)=>{"use strict";var Hb=$(),bY=b(),yY=G(),IY=ql(),wY=Fl(),CY=on(),{SchemaEventMsg:LY}=_s(),DY="already exists in";Fb.exports=UY;async function UY(e,t,r){if(Hb.isEmptyOrZeroLength(r))return r;let s=[];Hb.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await MY(e,t.schema,t.name,i)})),n}a(UY,"lmdbCheckForNewAttributes");async function MY(e,t,r,s){let n=new wY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await PY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(DY))yY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(MY,"createNewAttribute");async function PY(e){let t;return t=await IY(e),CY.signalSchemaChange(new LY(process.pid,bY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(PY,"createAttribute")});var So=T((ioe,qb)=>{"use strict";var im=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};qb.exports=im});var xb=T((aoe,Gb)=>{"use strict";var vY=So(),BY=b().OPERATIONS_ENUM,om=class extends vY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(BY.INSERT,r,s,n,i),this.records=t}};Gb.exports=om});var Vb=T((uoe,kb)=>{"use strict";var HY=So(),FY=b().OPERATIONS_ENUM,am=class extends HY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(FY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};kb.exports=am});var Yb=T((_oe,$b)=>{"use strict";var qY=So(),GY=b().OPERATIONS_ENUM,cm=class extends qY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(GY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$b.exports=cm});var Wb=T((foe,Kb)=>{"use strict";var xY=So(),kY=b().OPERATIONS_ENUM,um=class extends xY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(kY.DELETE,s,n,t,i),this.original_records=r}};Kb.exports=um});var ic=T((moe,Xb)=>{"use strict";var hoe=require("path"),Qb=Ue(),VY=xb(),$Y=Vb(),YY=Yb(),KY=Wb(),To=ze(),zb=$(),{CONFIG_PARAMS:WY}=b(),Jb=X();Jb.initSync();var n_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:QY}=ve();Xb.exports=zY;async function zY(e,t){if(Jb.get(WY.LOGGING_AUDITLOG)===!1)return;let r=QY(e.schema,e.table),s=await Qb.openEnvironment(r,e.table,!0),n=JY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Qb.initializeDBIs(s,To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,To.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),zb.isEmpty(n.user_name)||s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(zY,"writeTransaction");function JY(e,t){let r=zb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===n_.INSERT)return new VY(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPDATE)return new $Y(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPSERT)return new YY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.DELETE)return new KY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(JY,"createTransactionObject")});var lm=T((Toe,jb)=>{"use strict";var XY=Qa(),Soe=za(),oc=b(),jY=Za(),ZY=uo().insertRecords,e1=Ue(),t1=G(),r1=s_(),{getSchemaPath:s1}=ve(),n1=ic();jb.exports=i1;async function i1(e){try{let{schema_table:t,attributes:r}=XY(e);jY(e,r,t.hash_attribute),e.schema!==oc.SYSTEM_SCHEMA_NAME&&(r.includes(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await r1(e.hdb_auth_header,t,r),n=s1(e.schema,e.table),i=await e1.openEnvironment(n,e.table),o=await ZY(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await n1(e,o)}catch(c){t1.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(i1,"lmdbCreateRecords")});var ty=T((goe,ey)=>{"use strict";var Zb=b(),o1=lm(),a1=za(),c1=require("fs-extra"),{getSchemaPath:u1}=ve();ey.exports=l1;async function l1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new a1(Zb.SYSTEM_SCHEMA_NAME,Zb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await o1(r),await c1.mkdirp(u1(e.schema))}a(l1,"lmdbCreateSchema")});var sy=T((Ooe,ry)=>{"use strict";var _m=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};ry.exports=_m});var ay=T((woe,oy)=>{"use strict";var ny=Ue(),dm=hr(),fm=dr().LMDB_ERRORS_ENUM,_1=ze(),iy=G(),boe=$(),d1=require("lmdb"),f1=sy(),E1=b(),{OVERFLOW_MARKER:yoe,MAX_SEARCH_KEY_LENGTH:Ioe}=_1,h1=E1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function m1(e,t,r,s){if(dm.validateEnv(e),t===void 0)throw new Error(fm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fm.IDS_REQUIRED):new Error(fm.IDS_MUST_BE_ITERABLE);try{let n=ny.listDBIs(e);ny.initializeDBIs(e,t,n);let i=new f1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[h1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,d1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=dm.getIndexedValues(N);if(Y)for(let Q=0,q=Y.length;Q<q;Q++)I.remove(Y[Q],o)}catch{iy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){iy.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=dm.getNextMonotonicTime(),i}catch(n){throw n}}a(m1,"deleteRecords");oy.exports={deleteRecords:m1}});var ac=T((Loe,uy)=>{"use strict";var Ro=$(),p1=ay(),S1=Ue(),{getSchemaPath:T1}=ve(),R1=ic(),g1=G();uy.exports=A1;async function A1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ro.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ro.isEmptyOrZeroLength(e.hash_values)&&!Ro.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ro.isEmpty(u)||e.hash_values.push(u)}}if(Ro.isEmptyOrZeroLength(e.hash_values))return cy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ro.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=T1(e.schema,e.table),i=await S1.openEnvironment(n,e.table),o=await p1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await R1(e,o)}catch(c){g1.error(`unable to write transaction due to ${c.message}`)}return cy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(A1,"lmdbDeleteRecords");function cy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(cy,"createDeleteResponse")});var hm=T((Moe,ly)=>{"use strict";var O1=b(),Uoe=hr();function Em(e,t){let r=Object.create(null);if(t.length===1&&O1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Em,"parseRow");function N1(e,t,r,s){let n=Em(r,e);s.push(n)}a(N1,"searchAll");function b1(e,t,r,s){let n=Em(r,e);s[t]=n}a(b1,"searchAllToMap");function y1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(y1,"iterateDBI");function 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 I1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(I1,"endsWith");function w1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(w1,"contains");function C1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(C1,"greaterThanCompare");function L1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(L1,"greaterThanEqualCompare");function D1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(D1,"lessThanCompare");function U1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(U1,"lessThanEqualCompare");ly.exports={parseRow:Em,searchAll:N1,searchAllToMap:b1,iterateDBI:y1,endsWith:I1,contains:w1,greaterThanCompare:C1,greaterThanEqualCompare:L1,lessThanCompare:D1,lessThanEqualCompare:U1,pushResults:Ni}});var go=T((Foe,py)=>{"use strict";var Fn=Ue(),voe=G(),gr=hr(),i_=ze(),Je=dr().LMDB_ERRORS_ENUM,Boe=$(),M1=b(),o_=hm(),{parseRow:P1}=o_,Hoe=require("lmdb"),{OVERFLOW_MARKER:_y,MAX_SEARCH_KEY_LENGTH:v1}=i_;function dy(e,t,r,s=!1,n=void 0,i=void 0){return bi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(dy,"iterateFullIndex");function cc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(cc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[i_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(bi,"setupTransaction");function fy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(_y)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[i_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(fy,"getOverflowCheck");function B1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return bi(e,t,t,(o,c,u)=>(a_(r),r=uc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>P1(_.value,r))))}a(B1,"searchAll");function H1(e,t,r,s=!1,n=void 0,i=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);a_(r),r=uc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of dy(e,t,t,s,n,i))o.set(c,o_.parseRow(u,r));return o}a(H1,"searchAllToMap");function F1(e,t,r=!1,s=void 0,n=void 0){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dy(e,void 0,t,r,s,n),c=o.transaction,u=fy(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(F1,"iterateDBI");function q1(e,t){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(q1,"countAll");function G1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=gr.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(G1,"equals");function x1(e,t,r){return qn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(x1,"count");function k1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,null,r,(c,u)=>{s=gr.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(k1,"startsWith");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return Ey(e,t,r,s,n,i,o,!0)}a(V1,"endsWith");function Ey(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=fy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(_y)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[i_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ey,"contains");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!0,!1)}a($1,"greaterThan");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!1,!1)}a(Y1,"greaterThanEqual");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!0)}a(K1,"lessThan");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!1)}a(W1,"lessThanEqual");function Q1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(gr.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=gr.convertKeyValueToWrite(s),n=gr.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return cc(e,t,r,s,n,i,o,c)}a(Q1,"between");function z1(e,t,r,s){gr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(a_(r),r=uc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=o_.parseRow(c,r)),o}a(z1,"searchByHash");function J1(e,t,r){gr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(J1,"checkHashExists");function X1(e,t,r,s,n=[]){return my(e,t,r,s,n),hy(e,t,r,s,n).map(i=>i[1])}a(X1,"batchSearchByHash");function j1(e,t,r,s,n=[]){my(e,t,r,s,n);let i=new Map;for(let[o,c]of hy(e,t,r,s,n))i.set(o,c);return i}a(j1,"batchSearchByHashToMap");function hy(e,t,r,s,n=[]){return bi(e,t,t,(i,o,c)=>{r=uc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,o_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(hy,"batchHashSearch");function my(e,t,r,s,n){if(gr.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(a_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(my,"initializeBatchSearchByHash");function a_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(a_,"validateFetchAttributes");function qn(e,t,r){if(gr.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>v1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function uc(e,t){return t.length===1&&M1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(uc,"setGetWholeRowAttributes");py.exports={searchAll:B1,searchAllToMap:H1,count:x1,countAll:q1,equals:G1,startsWith:k1,endsWith:V1,contains:Ey,searchByHash:z1,setGetWholeRowAttributes:uc,batchSearchByHash:X1,batchSearchByHashToMap:j1,checkHashExists:J1,iterateDBI:F1,greaterThan:$1,greaterThanEqual:Y1,lessThan:K1,lessThanEqual:W1,between:Q1}});var Ao=T((Goe,Ay)=>{var Sy=require("lodash"),Ty=qe(),Be=require("joi"),Z1=$(),{hdb_schema_table:c_,checkValidTable:Ry,hdb_table:gy,hdb_database:u_}=Ls(),{handleHDBError:eK,hdb_errors:tK}=j(),{getDatabases:rK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:sK}=tK,nK=Be.object({database:u_,schema:u_,table:gy,search_attribute:c_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(c_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),iK=Be.object({database:u_,schema:u_,table:gy,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(c_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:c_,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Ay.exports=function(e,t){let r=null;switch(t){case"value":r=Ty.validateBySchema(e,nK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ry("database",e.schema)),i(Ry("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Ty.validateBySchema(e,iK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Z1.checkGlobalSchemaTable(e.schema,e.table);if(n)return eK(new Error,n,sK.NOT_FOUND);let o=rK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Sy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Sy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var mm=T((koe,Oy)=>{"use strict";var oK=Ue(),aK=Ao(),{getSchemaPath:cK}=ve();Oy.exports=uK;function uK(e){let t=aK(e,"hashes");if(t)throw t;let r=cK(e.schema,e.table);return oK.openEnvironment(r,e.table)}a(uK,"initialize")});var pm=T(($oe,Ny)=>{"use strict";var lK=go(),_K=mm();Ny.exports=dK;async function dK(e){let t=await _K(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return lK.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(dK,"lmdbGetDataByHash")});var Oo=T((Koe,by)=>{"use strict";var Sm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};by.exports=Sm});var Iy=T((zoe,yy)=>{"use strict";var Qoe=Oo(),fK=go(),EK=mm();yy.exports=hK;async function hK(e){let t=await EK(e),r=global.hdb_schema[e.schema][e.table];return fK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(hK,"lmdbSearchByHash")});var Ps=T((Xoe,wy)=>{"use strict";var Tm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};wy.exports=Tm});var l_=T((Zoe,Py)=>{"use strict";var qt=go(),mK=Ue(),pK=$(),ae=ze(),yi=b(),SK=hi(),Cy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:TK}=ve(),an=yi.SEARCH_WILDCARDS;async function RK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=SK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=My(e,s.hash_attribute,r,t);return Dy(e,n,s.hash_attribute,r)}a(RK,"prepSearch");async function Dy(e,t,r,s){let n=TK(e.schema,e.table),i=await mK.openEnvironment(n,e.table),o=Uy(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(gK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Ly(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Ly(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Dy,"executeSearch");function Uy(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.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=qt.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=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.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=qt.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=qt.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=qt.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=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Uy,"searchByType");function Ly(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Ly,"createMapFromIterable");function gK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(gK,"checkToFetchMore");function My(e,t,r,s){if(pK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),an.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[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(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Cy.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(Cy.UNKNOWN_SEARCH_TYPE)}}a(My,"createSearchTypeFromSearchObject");Py.exports={executeSearch:Dy,createSearchTypeFromSearchObject:My,prepSearch:RK,searchByType:Uy}});var By=T((rae,vy)=>{"use strict";var tae=Ps(),AK=Ao(),OK=$(),NK=b(),bK=l_();vy.exports=yK;function yK(e,t){if(!OK.isEmpty(t)&&NK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=AK(e,"value");if(s)throw s;let n=!0;return bK.prepSearch(e,t,n)}a(yK,"lmdbGetDataByValue")});var lc=T((iae,Hy)=>{"use strict";var nae=Ps(),IK=Ao(),wK=$(),CK=b(),LK=l_();Hy.exports=DK;async function DK(e,t){if(!wK.isEmpty(t)&&CK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=IK(e,"value");if(s)throw s;return LK.prepSearch(e,t,!1)}a(DK,"lmdbSearchByValue")});var qy=T((cae,Fy)=>{"use strict";var aae=ze(),Rm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},gm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Am=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Rm,SearchCondition:gm,SortAttribute:Am}});var $y=T((dae,Vy)=>{"use strict";var lae=qy().SearchByConditionsObject,UK=Ps(),MK=Ao(),Om=go(),__=ze(),{Resource:_ae}=(os(),Z(CE)),ky=l_(),PK=hm(),vK=require("lodash"),{getSchemaPath:BK}=ve(),Gy=Ue(),{handleHDBError:HK,hdb_errors:FK}=j(),{HTTP_STATUS_CODES:qK}=FK,GK=1e8;Vy.exports=xK;async function xK(e){let t=MK(e,"conditions");if(t)throw HK(t,t.message,qK.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=BK(e.schema,e.table),s=await Gy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Gy.openDBI(s,_.search_attribute);let i=vK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===__.SEARCH_TYPES.EQUALS?_.estimated_count=Om.count(s,_.search_attribute,_.search_value):l===__.SEARCH_TYPES.CONTAINS||l===__.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=GK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await xy(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(ky.filterByType),d=l.length,f=Om.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>PK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await xy(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Om.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(xK,"lmdbSearchByConditions");async function xy(e,t,r,s){let n=new UK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===__.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ky.searchByType(e,n,i,s).map(o=>o.value)}a(xy,"executeConditionSearch")});var _c=T((Eae,Yy)=>{"use strict";var kK=b().OPERATIONS_ENUM,Nm=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}};Yy.exports=Nm});var bm=T((mae,Zy)=>{"use strict";var zy=Ps(),Jy=_c(),Xy=lc(),jy=ac(),Jt=b(),Ky=$(),Wy=Ue(),{getTransactionAuditStorePath:VK,getSchemaPath:$K}=ve(),Qy=G();Zy.exports=YK;async function YK(e){try{if(Ky.isEmpty(global.hdb_schema[e.schema])||Ky.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await KK(e),await WK(e);let t=$K(e.schema,e.table);try{await Wy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=VK(e.schema,e.table);await Wy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(YK,"lmdbDropTable");async function KK(e){let t=new zy(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 Xy(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Jy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jy(n)}a(KK,"deleteAttributesFromSystem");async function WK(e){let t=new zy(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 Xy(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Jy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jy(n)}catch(i){throw i}}a(WK,"dropTableFromSystem")});var tI=T((Sae,eI)=>{"use strict";var QK=require("fs-extra"),zK=Ps(),JK=Oo(),XK=_c(),jK=bm(),ZK=ac(),eW=pm(),tW=lc(),cn=b(),{getSchemaPath:rW}=ve(),{handleHDBError:sW,hdb_errors:nW}=j(),{HDB_ERROR_MSGS:iW,HTTP_STATUS_CODES:oW}=nW;eI.exports=aW;async function aW(e){let t;try{t=await cW(e.schema);let r=new zK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await tW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await jK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new XK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await ZK(n);let i=rW(t);await QK.remove(i)}catch(r){throw r}}a(aW,"lmdbDropSchema");async function cW(e){let t=new JK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await eW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw sW(new Error,iW.SCHEMA_NOT_FOUND(e),oW.NOT_FOUND,void 0,void 0,!0);return s}a(cW,"validateDropSchema")});var Im=T((Rae,rI)=>{"use strict";var ym=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};rI.exports=ym});var nI=T((Oae,sI)=>{"use strict";var uW=require("fs-extra"),d_=Ue(),{getTransactionAuditStorePath:lW}=ve(),wm=ze(),Aae=Im();sI.exports=_W;async function _W(e){let t;try{let r=lW(e.schema,e.table);await uW.mkdirp(r),t=await d_.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(_W,"createTransactionsAuditEnvironment")});var cI=T((bae,aI)=>{"use strict";var Cm=b(),iI=Ue(),dW=uo(),{getSystemSchemaPath:fW,getSchemaPath:EW}=ve(),hW=hi(),mW=ql(),Lm=Fl(),pW=G(),SW=nI(),Um=hW.hdb_table,oI=[];for(let e=0;e<Um.attributes.length;e++)oI.push(Um.attributes[e].attribute);aI.exports=TW;async function TW(e,t){let r=EW(t.schema,t.table),s=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iI.createEnvironment(r,t.table),e!==void 0){let o=await iI.openEnvironment(fW(),Cm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await dW.insertRecords(o,Um.hash_attribute,oI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Dm(s),await Dm(n),await Dm(i)}await SW(t)}catch(o){throw o}}a(TW,"lmdbCreateTable");async function Dm(e){try{await mW(e)}catch(t){pW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dm,"createAttribute")});var lI=T((Iae,uI)=>{"use strict";var RW=Qa(),gW=Za(),AW=s_(),dc=b(),OW=uo().updateRecords,NW=Ue(),{getSchemaPath:bW}=ve(),yW=ic(),IW=G();uI.exports=wW;async function wW(e){try{let{schema_table:t,attributes:r}=RW(e);gW(e,r,t.hash_attribute),e.schema!==dc.SYSTEM_SCHEMA_NAME&&(r.includes(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await AW(e.hdb_auth_header,t,r),n=bW(e.schema,e.table),i=await NW.openEnvironment(n,e.table),o=await OW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await yW(e,o)}catch(c){IW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(wW,"lmdbUpdateRecords")});var dI=T((Cae,_I)=>{"use strict";var CW=b().OPERATIONS_ENUM,Mm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=CW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_I.exports=Mm});var EI=T((Uae,fI)=>{"use strict";var Dae=dI(),LW=Qa(),DW=Za(),UW=s_(),fc=b(),MW=uo().upsertRecords,PW=Ue(),{getSchemaPath:vW}=ve(),BW=ic(),HW=G(),{handleHDBError:FW,hdb_errors:qW}=j();fI.exports=GW;async function GW(e){let t;try{t=LW(e)}catch(u){throw FW(u,u.message,qW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;DW(e,s,r.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(s.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await UW(e.hdb_auth_header,r,s),i=vW(e.schema,e.table),o=await PW.openEnvironment(i,e.table),c=await MW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await BW(e,c)}catch(u){HW.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(GW,"lmdbUpsertRecords")});var mI=T((Pae,hI)=>{"use strict";var Pm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};hI.exports=Pm});var SI=T((Bae,pI)=>{"use strict";var vm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};pI.exports=vm});var gI=T((qae,RI)=>{"use strict";var Bm=Ue(),{getTransactionAuditStorePath:xW}=ve(),Fae=mI(),Ec=ze(),kW=$(),TI=SI(),VW=require("util").promisify,$W=VW(setTimeout),YW=1e4,KW=100;RI.exports=WW;async function WW(e){let t=xW(e.schema,e.table),r=await Bm.openEnvironment(t,e.table,!0),s=Bm.listDBIs(r);Bm.initializeDBIs(r,Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new TI;do n=await QW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await $W(KW);while(n.transactions_deleted>0);return i}a(WW,"deleteAuditLogsBefore");async function QW(e,t){let r=new TI;try{let s=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];kW.isEmpty(c)||(n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>YW)break}return await n,r}catch(s){throw s}}a(QW,"deleteTransactions")});var OI=T((xae,AI)=>{"use strict";var Hm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};AI.exports=Hm});var bI=T(($ae,NI)=>{"use strict";var zW=Ps(),JW=_c(),Vae=OI(),vs=b(),XW=$(),Fm=Ue(),jW=hi(),ZW=lc(),eQ=ac(),{getSchemaPath:tQ}=ve();NI.exports=rQ;async function rQ(e,t=!0){let r;e.schema===vs.SYSTEM_SCHEMA_NAME?r=jW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await nQ(e),n=tQ(e.schema,e.table),i=await Fm.openEnvironment(n,e.table);return t===!0&&await sQ(e,i,r.hash_attribute),Fm.dropDBI(i,e.attribute),s}a(rQ,"lmdbDropAttribute");async function sQ(e,t,r){let s=Fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(sQ,"removeAttributeFromAllObjects");async function nQ(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 ZW(t)).filter(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(XW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new JW(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return eQ(i)}a(nQ,"dropAttributeFromSystem")});var DI=T((Wae,LI)=>{"use strict";var qm=Ue(),No=ze(),Kae=hr(),Gm=b(),yI=$(),{getTransactionAuditStorePath:iQ}=ve(),oQ=go(),f_=So(),aQ=G();LI.exports=cQ;async function cQ(e){let t=iQ(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return II(r,e.search_values);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,lQ(r,e.search_values,n);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return uQ(r,e.search_values);default:return II(r)}}a(cQ,"readAuditLog");function II(e,t=[0,Date.now()]){yI.isEmpty(t[0])&&(t[0]=0),yI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new f_,n))}a(II,"searchTransactionsByTimestamp");function uQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,CI(e,i))}return Object.fromEntries(r)}a(uQ,"searchTransactionsByUsername");function lQ(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=oQ.equals(e,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=CI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);wI(u,"records",r,l,o),wI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(lQ,"searchTransactionsByHashValues");function wI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new f_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new f_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(wI,"loopRecords");function CI(e,t){let r=[];try{let s=e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new f_,i);r.push(o)}}catch(i){aQ.warn(i)}return r}catch(s){throw s}}a(CI,"batchSearchTransactions")});var MI=T((Xae,UI)=>{"use strict";var{getSchemaPath:zae}=ve(),Jae=Ue(),{database:_Q}=(fe(),Z(Ce));UI.exports={writeTransaction:dQ};async function dQ(e,t,r){return _Q({database:e,table:t}).transaction(r)}a(dQ,"writeTransaction")});var HI=T((Zae,BI)=>{"use strict";var{getSchemaPath:PI}=ve(),vI=Ue();BI.exports={flush:fQ,resetReadTxn:EQ};async function fQ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(fQ,"flush");async function EQ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(EQ,"resetReadTxn")});var xI=T((tce,GI)=>{"use strict";var{Readable:hQ}=require("stream"),{getDatabases:mQ}=(fe(),Z(Ce)),{readSync:pQ,openSync:SQ,createReadStream:FI}=require("fs"),{open:TQ}=require("lmdb"),qI=wl(),RQ=Ll(),{AUDIT_STORE_OPTIONS:gQ}=(io(),Z(AO)),{INTERNAL_DBIS_NAME:AQ,AUDIT_STORE_NAME:OQ}=ze();GI.exports=bQ;var xm=32768,NQ=100;async function bQ(e){let t=e.database||e.schema||"data",r=mQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=TQ({noSync:!0,maxDbs:RQ.MAX_DBS}),f,E=d.openDB(AQ,new qI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:q,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(q,K,w),p++%NQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,q=new qI(!Q,Q);await S(I,q)}e.include_audit&&await S(OQ,Object.assign({},gQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=SQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(xm);pQ(c,_,0,xm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:xm}),f=new hQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(bQ,"getBackup")});var $I=T((sce,VI)=>{"use strict";var yQ=G(),{handleHDBError:IQ}=j(),wQ=cO(),CQ=ql(),LQ=lm(),DQ=ty(),UQ=ac(),MQ=pm(),PQ=Iy(),vQ=By(),BQ=lc(),HQ=$y(),FQ=tI(),qQ=cI(),GQ=lI(),xQ=EI(),kQ=gI(),VQ=bm(),$Q=bI(),YQ=DI(),KQ=MI(),kI=HI(),WQ=xI(),km=class extends wQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return HQ(t)}async getDataByHash(t){return await MQ(t)}async searchByHash(t){return await PQ(t)}async getDataByValue(t,r){return await vQ(t,r)}async searchByValue(t){return await BQ(t)}async createSchema(t){return await DQ(t)}async dropSchema(t){return await FQ(t)}async createTable(t,r){return await qQ(t,r)}async dropTable(t){return await VQ(t)}async createAttribute(t){return await CQ(t)}async createRecords(t){return await LQ(t)}async updateRecords(t){return await GQ(t)}async upsertRecords(t){try{return await xQ(t)}catch(r){throw IQ(r,null,null,yQ.ERR,r)}}async deleteRecords(t){return await UQ(t)}async dropAttribute(t){return await $Q(t)}async deleteAuditLogsBefore(t){return await kQ(t)}async readAuditLog(t){return await YQ(t)}writeTransaction(t,r,s){return KQ.writeTransaction(t,r,s)}flush(t,r){return kI.flush(t,r)}resetReadTxn(t,r){return kI.resetReadTxn(t,r)}getBackup(t){return WQ(t)}};VI.exports=km});var ZI={};Qe(ZI,{ResourceBridge:()=>Ym});function Km({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function KI(e,t){let r=Bs(e),s=Km(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&&dl(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Bs(e){let t=e.database||e.schema||zQ,r=Es()[t];if(!r)throw(0,ds.handleHDBError)(new Error,QQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*QI(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var zI,E_,ds,JI,XI,hs,Vm,$m,jI,QQ,zQ,JQ,XQ,YI,Ym,ew=Te(()=>{"use strict";zI=D($I()),E_=D(Ao()),ds=D(j());fe();JI=D(Qa()),XI=D(Za()),hs=D(b()),Vm=D(on()),$m=D(_s()),jI=D($());di();fl();({HDB_ERROR_MSGS:QQ}=ds.hdb_errors),zQ="data",JQ=1e4,XQ=10,Ym=class extends zI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YI=this}async searchByConditions(t){let r=(0,E_.default)(t,"conditions");if(r)throw(0,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:Km(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new 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 hc({database:t.schema,table:null}),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,hs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Wm(t.schema),Vm.signalSchemaChange(new $m.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,YI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,JI.default)(t);(0,XI.default)(t,s,r.primaryKey);let n,i=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=dl(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=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 WI(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,jI.async_set_timeout)(XQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%JQ===0&&await _();return u.length>0&&await _(),n?WI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,E_.default)(t,"hashes");if(r)throw r;return KI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of KI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&hs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,E_.default)(t,"value");if(s)throw s;let n=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:Km(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 QI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return QI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Km,"getSelect");a(KI,"getRecords");a(Bs,"getTable");a(WI,"createDeleteResponse");a(QI,"groupRecordsInHistory")});var ls=T((uce,tw)=>{"use strict";var{ResourceBridge:jQ}=(ew(),Z(ZI)),ZQ=X();ZQ.initSync();var h_;function ez(){return h_||(h_=new jQ,h_)}a(ez,"getBridge");tw.exports=ez()});var iw=T((_ce,nw)=>{"use strict";var rw=require("lodash"),mc=require("mathjs"),tz=require("jsonata"),sw=$();nw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?rw.uniqWith(e,rw.isEqual):e,searchJSON:rz,mad:pc.bind(null,mc.mad),mean:pc.bind(null,mc.mean),mode:pc.bind(null,mc.mode),prod:pc.bind(null,mc.prod),median:pc.bind(null,mc.median)};function pc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(pc,"aggregateFunction");function rz(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(sw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sw.isEmpty(this.__ala__.res[r])){let s=tz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(rz,"searchJSON")});var aw=T((fce,ow)=>{"use strict";var rt=require("moment"),Qm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;ow.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Qm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Qm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Qm)}});var _w=T((Ece,lw)=>{"use strict";var sz=require("@turf/area"),nz=require("@turf/length"),iz=require("@turf/circle"),oz=require("@turf/difference"),az=require("@turf/distance"),cz=require("@turf/boolean-contains"),uz=require("@turf/boolean-equal"),lz=require("@turf/boolean-disjoint"),_z=require("@turf/helpers"),cw=b(),de=$();lw.exports={geoArea:dz,geoLength:fz,geoCircle:Ez,geoDifference:hz,geoDistance:uw,geoNear:mz,geoContains:pz,geoEqual:Sz,geoCrosses:Tz,geoConvert:Rz};var zm="geo1 is required",Jm="geo2 is required";function dz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),sz.default(e)}a(dz,"geoArea");function fz(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),nz.default(e,{units:t||"kilometers"})}a(fz,"geoLength");function Ez(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)),iz.default(e,t,{units:r||"kilometers"})}a(Ez,"geoCircle");function hz(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)),oz(e,t)}a(hz,"geoDifference");function uw(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),az.default(e,t,{units:r||"kilometers"})}a(uw,"geoDistance");function mz(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 uw(e,t,s)<=r}a(mz,"geoNear");function pz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),cz.default(e,t)}a(pz,"geoContains");function Sz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz.default(e,t)}a(Sz,"geoEqual");function Tz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!lz.default(e,t)}a(Tz,"geoCrosses");function Rz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(cw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(cw.GEO_CONVERSION_ENUM).join(",")}`);return _z[t](e,r)}a(Rz,"geoConvert")});var m_=T((mce,dw)=>{var Ii=iw(),Ar=aw(),Hs=_w();dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ar.current_time,e.fn.extract=e.fn.EXTRACT=Ar.extract,e.fn.date=e.fn.DATE=Ar.date,e.fn.date_format=e.fn.DATE_FORMAT=Ar.date_format,e.fn.date_add=e.fn.DATE_ADD=Ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ar.date_diff,e.fn.now=e.fn.NOW=Ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ar.get_server_time,e.fn.getdate=e.fn.GETDATE=Ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ar.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=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 mw=T((pce,hw)=>{"use strict";var Sc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var gz=m_(),fw=require("clone"),p_=require("recursive-iterator"),re=G(),ie=$(),bo=ls(),Az=b(),{hdb_errors:Oz}=j(),{getDatabases:Ew}=(fe(),Z(Ce)),Nz="IS NULL",ms="There was a problem performing this search. Please check the logs and try again.";gz(yt);var Xm=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 p_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(fw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=Ew()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new p_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!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 p_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(Az.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&&Sc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(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(fw(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(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(Nz)>-1&&this.tables.forEach(n=>{let i={columnid:Ew()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!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 bo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(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 bo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,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 bo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,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 bo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,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=Sc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new p_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Sc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(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 bo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await 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(Oz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await bo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ms)}}return Object.values(Object.values(this.data)[0].__merged_data)}};hw.exports=Xm});var Fr=T((Tce,pw)=>{"use strict";var bz=oO();pw.exports={searchByConditions:Iz,searchByHash:wz,searchByValue:Cz,search:Lz};var jm=ls(),{transformReq:Zm}=$(),yz=mw();async function Iz(e){return Zm(e),jm.searchByConditions(e)}a(Iz,"searchByConditions");async function wz(e){Zm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jm.searchByHash(e))r&&t.push(r);return t}a(wz,"searchByHash");async function Cz(e){Zm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jm.searchByValue(e))t.push(r);return t}a(Cz,"searchByValue");function Lz(e,t){try{let r=new bz(e);r.validate(),new yz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Lz,"search")});var S_=T((gce,Sw)=>{"use strict";var Dz=ls();Sw.exports={writeTransaction:Uz};function Uz(e,t,r){return Dz.writeTransaction(e,t,r)}a(Uz,"writeTransaction")});var Aw=T((Nce,gw)=>{"use strict";var Mz=Fr(),Pz=Pn(),Tw=G(),vz=qr(),Oce=S_(),Bz=require("clone"),tp=require("alasql"),Hz=m_(),Rw=require("util"),Fz=Rw.promisify(Pz.getTableSchema),qz=Rw.promisify(Mz.search),Gz=b(),ep=$();Hz(tp);gw.exports={update:kz};var xz="There was a problem performing this update. Please check the logs and try again.";async function kz({statement:e,hdb_user:t}){let r=await Fz(e.table.databaseid,e.table.tableid),s=Vz(e.columns);ep.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Bz(n),c=ep.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=tp.parse(u).statements[0],l=await qz(_),d=$z(s,l);return Yz(o,d,t)}a(kz,"update");function Vz(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tp.compile(`SELECT ${r.expression.toString()} AS [${Gz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Tw.error(t),new Error(xz)}}a(Vz,"createUpdateRecord");function $z(e,t){return ep.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($z,"buildUpdateRecords");async function Yz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Tw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Yz,"updateRecords")});var Nw=T((wce,Ow)=>{var Kz=require("alasql"),Wz=Fr(),Qz=G(),zz=ls(),sp=require("util"),rp=$(),Jz=b(),Xz=Pn(),yce=S_(),Ice=qr(),jz="record",Zz="successfully deleted",eJ=sp.callbackify(nJ),tJ=sp.promisify(Wz.search),rJ=sp.promisify(Xz.getTableSchema);Ow.exports={convertDelete:eJ};function sJ(e){return`${e.deleted_hashes.length} ${jz}${e.deleted_hashes.length===1?"":"s"} ${Zz}`}a(sJ,"generateReturnMessage");async function nJ({statement:e,hdb_user:t}){let r=await rJ(e.table.databaseid,e.table.tableid);rp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=rp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Kz.parse(o).statements[0],u={operation:Jz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await tJ(c);let _=await zz.deleteRecords(u);return rp.isEmptyOrZeroLength(_.message)&&(_.message=sJ(_)),delete _.txn_time,_}catch(_){throw Qz.error(_),_.hdb_code?_.message:_}}a(nJ,"convertDelete")});var Cw=T((Lce,ww)=>{"use strict";var iJ=pi(),{hdb_errors:bw}=j(),{getDatabases:yw}=(fe(),Z(Ce));ww.exports={checkSchemaExists:Iw,checkSchemaTableExists:oJ,schema_describe:iJ};async function Iw(e){if(!yw()[e])return bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Iw,"checkSchemaExists");async function oJ(e,t){let r=await Iw(e);if(r)return r;if(!yw()[e][t])return bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(oJ,"checkSchemaTableExists")});var Tc=T((Uce,aJ)=>{aJ.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 A_={};Qe(A_,{addAnalyticsListener:()=>Ac,recordAction:()=>Or,recordActionBinary:()=>xr,setAnalyticsEnabled:()=>cJ});function cJ(e){qw=e}function Or(e,t,r,s,n){if(!qw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=g_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},g_.set(i,o)}T_||uJ()}function xr(e,t,r,s,n){Or(!!e,t,r,s,n)}function Ac(e){kw.push(e)}function uJ(){T_=performance.now(),setTimeout(async()=>{let e=performance.now()-T_;T_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of g_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of Vw){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await $w()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of kw)n(t);g_=new Map,wi.parentPort?wi.parentPort.postMessage({type:xw,report:r}):Ww({report:r})},Gw).unref()}async function lJ(e,t=6e4){let r=op(),s=Yw(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:q,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=q+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let 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 $w()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:q,...w}=h;q=q.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of q){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,gt)=>Pe.value>gt.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of Vw){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[q,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:q,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,R_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,R_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Lw,active:E-Dw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Lw=f,Dw=E}async function Uw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function op(){return Mw||(Mw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Yw(){return Pw||(Pw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function fJ(){Kw=!0;let e=(0,gc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await lJ(Gw,e),await Uw(op(),_J),await Uw(Yw(),dJ)},Math.min(e/2,2147483647)).unref()}function Ww(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(vw+=s.mean*s.count);r.totalBytesProcessed=vw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Bw.get(t))}),Bw.set(t,t.performance.eventLoopUtilization())),r.id=(0,R_.getNextMonotonicTime)(),op().primaryStore.put(r.id,r),Kw||fJ(),EJ&&(Qw=mJ(r))}async function mJ(e){if(await Qw,!Gn){let r=(0,Rc.dirname)((0,Fw.getLogFilePath)());try{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>hJ){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,Hw,Fw,Rc,np,R_,gc,ip,g_,qw,T_,Gw,xw,kw,Vw,Lw,Dw,$w,
|
|
1
|
+
"use strict";var QB=Object.create;var Sa=Object.defineProperty;var zB=Object.getOwnPropertyDescriptor;var JB=Object.getOwnPropertyNames;var XB=Object.getPrototypeOf,jB=Object.prototype.hasOwnProperty;var a=(e,t)=>Sa(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Qe=(e,t)=>{for(var r in t)Sa(e,r,{get:t[r],enumerable:!0})},ZR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of JB(t))!jB.call(e,n)&&n!==r&&Sa(e,n,{get:()=>t[n],enumerable:!(s=zB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?QB(XB(e)):{},ZR(t||!e||!e.__esModule?Sa(r,"default",{value:e,enumerable:!0}):r,e)),Z=e=>ZR(Sa({},"__esModule",{value:!0}),e);var rg=T((Zre,tg)=>{var ZB=require("fast-glob"),{statSync:jf,existsSync:Zf,readFileSync:eH,writeFileSync:tH}=require("fs"),{spawnSync:rH,spawn:sH,execFileSync:jre}=require("child_process"),{isMainThread:nH}=require("worker_threads"),{join:wn,relative:eg}=require("path"),{PACKAGE_ROOT:ts}=b(),{tmpdir:iH,platform:oH}=require("os");require("source-map-support").install();var aH=["resources","server","dataLayer","components"],Ta="ts-build",eE,cH=__filename.endsWith("tsBuild.js");if(cH){if(nH){let r;try{jf(wn(ts,Ta)),r=!0}catch{}if(r)for(let s of ZB.sync(aH.map(n=>n+"/**/*.ts"),{cwd:ts})){let n=0,i=0;try{n=jf(wn(ts,s)).mtimeMs-5e3,i=jf(wn(ts,Ta,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),eE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),eE=!0;if(eE){let s=wn(ts,"node_modules/.bin/tsc");oH()==="win32"&&(s+=".cmd");let n=rH(s,{cwd:ts});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=wn(iH(),"harperdb-tsc.pid"),o;if(Zf(i))try{process.kill(+eH(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=sH(s,["--watch"],{cwd:ts,detached:!0,stdio:"ignore"});tH(i,c.pid.toString()),c.unref()}}}}let e=tg.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(ts)&&!s[0].includes("node_modules")){let i=eg(ts,s[0]),o;i.startsWith(Ta)?o=wn(ts,eg(Ta,i)):o=wn(ts,Ta,i);let c=wn(o,r),u=c+".js";if(Zf(u))return u;if(c.includes(".")&&Zf(c))return c}return t(r,s,n)}}});var b=T((rse,mg)=>{"use strict";var Ur=require("path"),uH=require("fs"),{relative:ese,join:tse}=Ur,{existsSync:lH}=uH;function _H(){let e=__dirname;for(;!lH(Ur.join(e,"package.json"));){let t=Ur.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(_H,"getHDBPackageRoot");var Cn=_H(),sg="js",Vu=sg,dH="harperdb-config.yaml",fH="defaultConfig.yaml",EH="hdb",ng=`harperdb.${Vu}`,ig=`customFunctionsServer.${Vu}`,hH=`restartHdb.${Vu}`,rE="HarperDB",ku="Custom Functions",$u="Clustering Hub",Yu="Clustering Leaf",mH="Clustering Ingest Service",pH="Clustering Reply Service",SH="foreground.pid",TH="hdb.pid",RH="data",gH={HDB:rE,CLUSTERING_HUB:$u,CLUSTERING_LEAF:Yu,CLUSTERING_INGEST_SERVICE:mH,CLUSTERING_REPLY_SERVICE:pH,CUSTOM_FUNCTIONS:ku,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},AH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},OH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},NH={harperdb:rE,"clustering hub":$u,"clustering leaf":Yu,"custom functions":ku,custom_functions:ku,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},bH={CLUSTERING_HUB_PROC_DESCRIPTOR:$u,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yu},tE={HDB:Ur.join(Cn,"server/harperdb"),CUSTOM_FUNCTIONS:Ur.join(Cn,"server/customFunctions"),CLUSTERING_HUB:Ur.join(Cn,"server/nats"),CLUSTERING_LEAF:Ur.join(Cn,"server/nats")},yH={HDB:Ur.join(tE.HDB,ng),CUSTOM_FUNCTIONS:Ur.join(tE.CUSTOM_FUNCTIONS,ig)},IH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Ur.join(Cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Ur.join(Cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Ur.join(Cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},wH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},og="support@harperdb.io",CH="customer-success@harperdb.io",ag=1,LH=4141,cg="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",DH="https://www.harperdb.io/product",UH=`For support, please submit a request at ${cg} or contact ${og}`,ug=`For license support, please contact ${CH}`,MH="None of the specified records were found.",PH="hash attribute not found",vH=`Your current license only supports ${ag} role. ${ug}`,BH="Your current license only supports 3 connections to a node.",HH="127.0.0.1",FH=1,qH=/^\.$/,GH=/^\.\.$/,xH="U+002E",kH=/\//g,VH="U+002F",$H=/U\+002F/g,YH=/^U\+002E$/,KH=/^U\+002EU\+002E$/,WH="d",QH=999999,zH="*",JH="--max-old-space-size=",XH="system",jH="__hdb_hash",ZH=".harperdb",eF=".hdb",tF="keys",rF="hdb_boot_properties.file",sF=".updateConfig.json",nF="SIGTSTP",iF=24,oF=6e4,aF=448,cF="blob",uF="trash",lF="database",_F="schema",dF="transactions",fF=".count",EF="id",hF="PROCESS_NAME",lg={SETTINGS_PATH_KEY:"settings_path"},_g=require("lodash"),mF={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},pF={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},SF={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},TF={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},RF={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},_r="hdb_internal:",gF={CREATE_SCHEMA:_r+"create_schema",CREATE_TABLE:_r+"create_table",CREATE_ATTRIBUTE:_r+"create_attribute",ADD_USER:_r+"add_user",ALTER_USER:_r+"alter_user",DROP_USER:_r+"drop_user",HDB_NODES:_r+"hdb_nodes",HDB_USERS:_r+"hdb_users",HDB_WORKERS:_r+"hdb_workers",CATCHUP:_r+"catchup",SCHEMA_CATCHUP:_r+"schema_catchup",WORKER_ROOM:_r+"cluster_workers"},AF={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},OF="060493.ks",NF=".license",bF={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},yF={CSV:".csv",JSON:".json"},IF={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},wF={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ra={};Ra[J.INSERT]=J.INSERT;Ra[J.UPDATE]=J.UPDATE;Ra[J.UPSERT]=J.UPSERT;Ra[J.DELETE]=J.DELETE;var ye=Object.create(null);ye[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;ye[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;ye[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;ye[J.READ_LOG]=J.READ_LOG;ye[J.ADD_NODE]=J.ADD_NODE;ye[J.LIST_USERS]=J.LIST_USERS;ye[J.LIST_ROLES]=J.LIST_ROLES;ye[J.USER_INFO]=J.USER_INFO;ye[J.SQL]=J.SQL;ye[J.GET_JOB]=J.GET_JOB;ye[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;ye[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;ye[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;ye[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;ye[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;ye[J.REMOVE_NODE]=J.REMOVE_NODE;ye[J.RESTART]=J.RESTART;ye[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;ye[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;ye[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;ye[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;ye[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;ye[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;ye[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;ye[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;ye[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var CF={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},LF={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dg={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},DF=_g.invert(dg),UF={CUSTOMFUNCTIONS_ENABLED:"customFunctions_enabled",CUSTOMFUNCTIONS_NETWORK_PORT:"customFunctions_network_port",CUSTOMFUNCTIONS_TLS_CERTIFICATE:"customFunctions_tls_certificate",CUSTOMFUNCTIONS_NETWORK_CORS:"customFunctions_network_cors",CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST:"customFunctions_network_corsAccessList",CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT:"customFunctions_network_headersTimeout",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT:"customFunctions_network_keepAliveTimeout",CUSTOMFUNCTIONS_TLS_PRIVATEKEY:"customFunctions_tls_privateKey",CUSTOMFUNCTIONS_TLS_CERT_AUTH:"customFunctions_tls_certificateAuthority",CUSTOMFUNCTIONS_NETWORK_TIMEOUT:"customFunctions_network_timeout",CUSTOMFUNCTIONS_NODEENV:"customFunctions_nodeEnv",CUSTOMFUNCTIONS_ROOT:"customFunctions_root"},O={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",HTTP_TIMEOUT:"http_timeout",HTTP_PORT:"http_port",HTTP_SECUREPORT:"http_securePort",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_STDSTREAMS:"logging_stdStreams",LOGGING_AUDITLOG:"logging_auditLog",LOGGING_AUDITRETENTION:"logging_auditRetention",LOGGING_AUDITAUTHEVENTS_LOGFAILED:"logging_auditAuthEvents_logFailed",LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL:"logging_auditAuthEvents_logSuccessful",OPERATIONSAPI_NETWORK_CORS:"operationsApi_network_cors",OPERATIONSAPI_NETWORK_CORSACCESSLIST:"operationsApi_network_corsAccessList",OPERATIONSAPI_NETWORK_HEADERSTIMEOUT:"operationsApi_network_headersTimeout",OPERATIONSAPI_NETWORK_HTTPS:"operationsApi_network_https",OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT:"operationsApi_network_keepAliveTimeout",OPERATIONSAPI_NETWORK_PORT:"operationsApi_network_port",OPERATIONSAPI_NETWORK_SECUREPORT:"operationsApi_network_securePort",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",OPERATIONSAPI_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",ROOTPATH:"rootPath",STORAGE_WRITEASYNC:"storage_writeAsync",STORAGE_OVERLAPPINGSYNC:"storage_overlappingSync",STORAGE_CACHING:"storage_caching",STORAGE_COMPRESSION:"storage_compression",STORAGE_NOREADAHEAD:"storage_noReadAhead",STORAGE_PREFETCHWRITES:"storage_prefetchWrites",STORAGE_ENCRYPTION:"storage_encryption",STORAGE_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},fg={settings_path:lg.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,rootpath:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.TLS_CERTIFICATE,certificate:O.TLS_CERTIFICATE,private_key_key:O.TLS_PRIVATEKEY,private_key:O.TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.THREADS,max_hdb_processes:O.THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:O.HTTP_PORT,custom_functions_port:O.HTTP_PORT,custom_functions_directory_key:O.COMPONENTSROOT,custom_functions_directory:O.COMPONENTSROOT,max_custom_function_processes:O.THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_network_port:O.HTTP_PORT,customfunctions_tls_certificate:O.TLS_CERTIFICATE,customfunctions_network_cors:O.HTTP_CORS,customfunctions_network_corsaccesslist:O.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:O.HTTP_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:O.HTTP_TIMEOUT,http_threads:O.THREADS,threads:O.THREADS,http_session_affinity:O.HTTP_SESSIONAFFINITY,http_compressionthreshold:O.HTTP_COMPRESSIONTHRESHOLD,http_cors:O.HTTP_CORS,http_corsaccesslist:O.HTTP_CORSACCESSLIST,http_headerstimeout:O.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:O.HTTP_KEEPALIVETIMEOUT,http_timeout:O.HTTP_TIMEOUT,http_port:O.HTTP_PORT,http_secureport:O.HTTP_SECUREPORT,customfunctions_processes:O.THREADS,customfunctions_root:O.COMPONENTSROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:O.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:O.ROOTPATH,databases:O.DATABASES,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:O.COMPONENTSROOT,tls_certificate:O.TLS_CERTIFICATE,tls_privatekey:O.TLS_PRIVATEKEY,tls_certificateauthority:O.TLS_CERTIFICATEAUTHORITY};for(let e in O){let t=O[e];fg[t.toLowerCase()]=t}var MF={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},PF={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},vF={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},BF={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},HF={VERSION_DEFAULT:"2.2.0"},FF={DEVELOPMENT:8192,DEFAULT:512},qF={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},GF={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},xF={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},Eg={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},kF=Symbol("metadata"),VF="__clustering__",$F=Object.values(Eg),YF=15984864e5,hg={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},KF=_g.invert(hg),WF={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},QF=111,zF=`\r
|
|
2
|
+
`,JF={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},XF=["*","%"],jF="unauthorized_access",ZF="func_val",eq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},tq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},rq={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"},sq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},nq={HTTP:"http"},iq={STOPPED:"stopped",ONLINE:"online"},oq="3.x.x",aq={SUCCESS:"success",FAILURE:"failure"},cq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mg.exports={LOCAL_HARPERDB_OPERATIONS:ye,HDB_SUPPORT_ADDRESS:og,HDB_SUPPORT_URL:cg,HDB_PRICING_URL:DH,SUPPORT_HELP_MSG:UH,LICENSE_HELP_MSG:ug,HDB_PROC_NAME:ng,HDB_PROC_DESCRIPTOR:rE,CLUSTERING_LEAF_PROC_DESCRIPTOR:Yu,CLUSTERING_HUB_PROC_DESCRIPTOR:$u,SYSTEM_SCHEMA_NAME:XH,HASH_FOLDER_NAME:jH,HDB_HOME_DIR_NAME:ZH,UPDATE_FILE_NAME:sF,LICENSE_KEY_DIR_NAME:tF,BOOT_PROPS_FILE_NAME:rF,JOB_TYPE_ENUM:PF,JOB_STATUS_ENUM:bF,SYSTEM_TABLE_NAMES:TF,SYSTEM_TABLE_HASH_ATTRIBUTES:RF,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:yF,S3_BUCKET_AUTH_KEYS:IF,VALID_SQL_OPS_ENUM:wF,GEO_CONVERSION_ENUM:LF,HDB_SETTINGS_NAMES:dg,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:DF,SERVICE_ACTIONS_ENUM:CF,CLUSTER_MESSAGE_TYPE_ENUM:vF,CLUSTER_CONNECTION_DIRECTION_ENUM:BF,CLUSTER_EVENTS_DEFS_ENUM:qF,PERIOD_REGEX:qH,DOUBLE_PERIOD_REGEX:GH,UNICODE_PERIOD:xH,FORWARD_SLASH_REGEX:kH,UNICODE_FORWARD_SLASH:VH,ESCAPED_FORWARD_SLASH_REGEX:$H,ESCAPED_PERIOD_REGEX:YH,ESCAPED_DOUBLE_PERIOD_REGEX:KH,REG_KEY_FILE_NAME:OF,RESTART_TIMEOUT_MS:oF,HDB_FILE_PERMISSIONS:aF,DATABASES_DIR_NAME:lF,LEGACY_DATABASES_DIR_NAME:_F,TRANSACTIONS_DIR_NAME:dF,LIMIT_COUNT_NAME:fF,ID_ATTRIBUTE_STRING:EF,INSERT_MODULE_ENUM:pF,UPGRADE_JSON_FIELD_NAMES_ENUM:SF,RESTART_CODE:nF,RESTART_CODE_NUM:iF,CLUSTER_OPERATIONS:Ra,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:AF,HDB_INTERNAL_SC_CHANNEL_PREFIX:_r,INTERNAL_SC_CHANNELS:gF,CLUSTERING_MESSAGE_TYPES:WF,HDB_FILE_SUFFIX:eF,BLOB_FOLDER_NAME:cF,HDB_TRASH_DIR:uF,ORIGINATOR_SET_VALUE:QF,LICENSE_VALUES:HF,RAM_ALLOCATION_ENUM:FF,TIME_STAMP_NAMES_ENUM:Eg,TIME_STAMP_NAMES:$F,PERMS_UPDATE_RELEASE_TIMESTAMP:YF,SEARCH_NOT_FOUND_MESSAGE:MH,SEARCH_ATTRIBUTE_NOT_FOUND:PH,LICENSE_ROLE_DENIED_RESPONSE:vH,LICENSE_MAX_CONNS_REACHED:BH,BASIC_LICENSE_MAX_NON_CU_ROLES:ag,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:LH,VALUE_SEARCH_COMPARATORS:hg,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:KF,LICENSE_FILE_NAME:NF,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:GF,NEW_LINE:zF,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:FH,MOMENT_DAYS_TAG:WH,API_TURNOVER_SEC:QH,LOOPBACK:HH,CODE_EXTENSION:Vu,WILDCARD_SEARCH_VALUE:zH,NODE_ERROR_CODES:xF,JAVASCRIPT_EXTENSION:sg,PERMS_CRUD_ENUM:JF,UNAUTHORIZED_PERMISSION_NAME:jF,SEARCH_WILDCARDS:XF,FUNC_VAL:ZF,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:eq,JWT_ENUM:tq,CLUSTERING_FLAG:VF,ITC_EVENT_TYPES:rq,CUSTOM_FUNCTION_PROC_NAME:ig,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ku,SERVICES:sq,THREAD_TYPES:nq,MEM_SETTING_KEY:JH,HDB_RESTART_SCRIPT:hH,PROCESS_DESCRIPTORS:gH,SERVICE_SERVERS:yH,SERVICE_SERVERS_CWD:tE,PROCESS_DESCRIPTORS_VALIDATE:NH,LAUNCH_SERVICE_SCRIPTS:IH,LOG_LEVELS:OH,PROCESS_NAME_ENV_PROP:hF,LOG_NAMES:AH,PM2_PROCESS_STATUSES:iq,CONFIG_PARAM_MAP:fg,CONFIG_PARAMS:O,HDB_CONFIG_FILE:dH,HDB_DEFAULT_CONFIG_FILE:fH,ROLE_TYPES_ENUM:wH,BOOT_PROP_PARAMS:lg,INSTALL_PROMPTS:mF,HDB_ROOT_DIR_NAME:EH,CLUSTERING_PROCESSES:bH,FOREGROUND_PID_FILE:SH,PACKAGE_ROOT:Cn,PRE_4_0_0_VERSION:oq,DATABASES_PARAM_CONFIG:MF,METADATA_PROPERTY:kF,AUTH_AUDIT_STATUS:aq,AUTH_AUDIT_TYPES:cq,HDB_PID_FILE:TH,DEFAULT_DATABASE_NAME:RH,LEGACY_CONFIG_PARAMS:UF};rg()});var sE=T((nse,Tg)=>{"use strict";var pg=require("minimist");Tg.exports=uq;function uq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=Sg(process.env),s=Sg(pg(process.argv))):(r=process.env,s=pg(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(uq,"assignCMDENVVariables");function Sg(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(Sg,"objKeysToLowerCase")});var G=T((ose,lE)=>{"use strict";var oi=require("fs-extra"),{workerData:lq,threadId:_q}=require("worker_threads"),Xs=require("path"),Ag=require("yaml"),Og=require("properties-reader"),ct=b(),Rg=sE(),dq=require("os"),{PACKAGE_ROOT:iE}=b(),{_assignPackageExport:fq}=require("../../index"),Aa={};for(let e in console)Aa[e]||(Aa[e]=console[e]);var Yt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},Ng={STDOUT:"stdOut",STDERR:"stdErr"},Eq=Xs.join(iE,"logs"),hq=Xs.join(iE,"config/yaml/",ct.HDB_DEFAULT_CONFIG_FILE),mq=1e4,Js,ys,$t,Ku,Wu,Oa,Xi,ga;ga===void 0&&bg();lE.exports={notify:wg,fatal:Cg,error:Na,warn:uE,info:Qu,debug:cE,trace:aE,setLogLevel:Oq,log_level:$t,loggerWithTag:pq,suppressLogging:Sq,initLogSettings:bg,setupConsoleLogging:yg,logCustomLevel:gq,closeLogFile:oE,getLogFilePath:()=>Oa,OUTPUTS:Ng,AuthAuditLog:yq};fq("logger",lE.exports);function bg(e=!1){try{if(ga===void 0||e){oE();let t=Aq(),r=Rg(["ROOTPATH"]);try{ga=Og(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!oi.pathExistsSync(Xs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE)))throw s}({level:$t,config_log_path:Wu,to_file:Js,to_stream:ys}=Nq(r.ROOTPATH?Xs.join(r.ROOTPATH,ct.HDB_CONFIG_FILE):ga.get("settings_path"))),Ku=ct.LOG_NAMES.HDB,Oa=Xs.join(Wu,Ku)}}catch(t){if(ga=void 0,t.code===ct.NODE_ERROR_CODES.ENOENT){let r=Rg(Object.keys(ct.CONFIG_PARAM_MAP),!0);for(let o in r){let c=ct.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===ct.CONFIG_PARAMS.LOGGING_LEVEL){$t=u;continue}if(c===ct.CONFIG_PARAMS.LOGGING_STDSTREAMS){ys=u;continue}c===ct.CONFIG_PARAMS.LOGGING_FILE&&(Js=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=bq();Js=Js===void 0?n:Js,Js=gg(Js),ys=ys===void 0?i:ys,ys=gg(ys),$t=$t===void 0?s:$t,Wu=Eq,Ku=ct.LOG_NAMES.INSTALL,Oa=Xs.join(Wu,Ku);return}throw Na("Error initializing log settings"),Na(t),t}process.env.DEV_MODE&&(ys=!0),yg()}a(bg,"initLogSettings");var nE=!0;function yg(){Ji("error",Na),Ji("warn",uE),Ji("log",Qu),Ji("info",Qu),Ji("debug",cE),Ji("trace",aE)}a(yg,"setupConsoleLogging");function Ji(e,t){console[e]=function(...r){if(nE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Aa[e](...r)}}a(Ji,"logConsole");function pq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wg),fatal:r(Cg),error:r(Na),warn:r(uE),info:r(Qu),debug:r(cE),trace:r(aE)};function r(s){return function(...n){return s(t,...n)}}}a(pq,"loggerWithTag");function Sq(e){try{nE=!1,e()}finally{nE=!0}}a(Sq,"suppressLogging");var Tq=lq?.name?.replace(/ /g,"-")||"main";function js(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||Tq+"/"+_q);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
|
|
3
|
+
`}a(js,"createLogRecord");function ba(e){Js&&Ig(e),ys&&process.stdout.write(e)}a(ba,"logStdOut");function zu(e){Js&&Ig(e),ys&&process.stderr.write(e)}a(zu,"logStdErr");function Ig(e){Rq(),Xi?oi.appendFileSync(Xi,e):Aa.log(e)}a(Ig,"logToFile");function oE(){try{oi.closeSync(Xi)}catch{}Xi=null}a(oE,"closeLogFile");function Rq(){if(!Xi){try{if(!Oa)debugger;Xi=oi.openSync(Oa,"a")}catch(e){Aa.error(e)}setTimeout(()=>{oE()},mq).unref()}}a(Rq,"openLogFile");function Qu(...e){Yt[$t]<=Yt.info&&ba(js("info",e))}a(Qu,"info");function aE(...e){Yt[$t]<=Yt.trace&&ba(js("trace",e))}a(aE,"trace");function Na(...e){Yt[$t]<=Yt.error&&zu(js("error",e))}a(Na,"error");function cE(...e){Yt[$t]<=Yt.debug&&ba(js("debug",e))}a(cE,"debug");function wg(...e){Yt[$t]<=Yt.notify&&ba(js("notify",e))}a(wg,"notify");function Cg(...e){Yt[$t]<=Yt.fatal&&zu(js("fatal",e))}a(Cg,"fatal");function uE(...e){Yt[$t]<=Yt.warn&&zu(js("warn",e))}a(uE,"warn");function gq(e,t,...r){t===Ng.STDERR?zu(js(e,r)):ba(js(e,r))}a(gq,"logCustomLevel");function Aq(){let e;try{e=dq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Xs.join(e,ct.HDB_HOME_DIR_NAME,ct.BOOT_PROPS_FILE_NAME);return oi.existsSync(t)||(t=Xs.join(iE,"utility/hdb_boot_properties.file")),t}a(Aq,"getPropsFilePath");function Oq(e){$t=e}a(Oq,"setLogLevel");function gg(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gg,"autoCastBoolean");function Nq(e){try{if(e.includes("config/settings.js")){let o=Og(e);return{level:o.get(ct.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Xs.dirname(o.get(ct.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(ct.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=Ag.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===ct.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Nq,"getLogConfig");function bq(){try{let e=Ag.parseDocument(oi.readFileSync(hq,"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(bq,"getDefaultConfig");function yq(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(yq,"AuthAuditLog")});var Dg=T((cse,Lg)=>{"use strict";var Iq=require("util"),wq=require("path"),Cq=require("child_process"),Lq=Iq.promisify(Cq.execFile),Dq=1e3*1e3*10;Lg.exports={findPs:Uq};async function Uq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Lq("ps",["wwxo",`pid,${r}`],{maxBuffer:Dq});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:wq.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(Uq,"findPs")});var ze=T((lse,Mg)=>{"use strict";var Mq="__dbis__",Pq="__txns__",vq="__environment_name__",Bq="__dbi_defintion__",Hq={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},Fq=["__createdtime__","__updatedtime__"],qq="\uFFFF",Ug={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Gq=Object.values(Ug);Mg.exports={AUDIT_STORE_NAME:Pq,INTERNAL_DBIS_NAME:Mq,DBI_DEFINITION_NAME:Bq,SEARCH_TYPES:Hq,TIMESTAMP_NAMES:Fq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:vq,TRANSACTIONS_DBI_NAMES_ENUM:Ug,TRANSACTIONS_DBIS:Gq,OVERFLOW_MARKER:qq}});var dr=T((_se,kg)=>{"use strict";var Pg=b(),vg=ze(),Bg={CONTINUE:100,OK:200,CREATED:201,BAD_REQUEST:400,UNAUTHORIZED:401,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,REQUEST_TIMEOUT:408,CONFLICT:409,TOO_MANY_REQUESTS:429,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,INSUFFICIENT_STORAGE:507,NETWORK_AUTHENTICATION_REQUIRED:511},Hg=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Fg={500:Hg("There was an error processing your request."),400:"Invalid request"},xq=Fg[Bg.INTERNAL_SERVER_ERROR],kq={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},Vq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},$q={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},Yq={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${vg.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vg.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},Kq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,ATTR_NAME_NULLISH_ERR:"transaction aborted due to record(s) with an attribute name that is null, undefined or empty string",HASH_VAL_LENGTH_ERR:`transaction aborted due to record(s) with a hash value that exceeds ${Pg.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},qg={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},Wq={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},Qq={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},zq={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},Jq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Xq={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},Gg={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},xg={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},jq={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},Zq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},eG={...qg,...$q,...kq,...Wq,...Qq,...zq,...Jq,...Xq,...Kq,...Gg,...xg,...jq,...Zq,...Vq};kg.exports={CHECK_LOGS_WRAPPER:Hg,HDB_ERROR_MSGS:eG,DEFAULT_ERROR_MSGS:Fg,DEFAULT_ERROR_RESP:xq,HTTP_STATUS_CODES:Bg,LMDB_ERRORS_ENUM:Yq,AUTHENTICATION_ERROR_MSGS:qg,VALIDATION_ERROR_MSGS:Gg,ITC_ERRORS:xg}});var j=T((fse,Yg)=>{"use strict";var ji=dr(),tG=G(),rG=b(),Ju=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Vg),this.statusCode=s||ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ji.DEFAULT_ERROR_MSGS[s]?ji.DEFAULT_ERROR_MSGS[s]:ji.DEFAULT_ERROR_MSGS[ji.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&tG[n](i)}},_E=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},dE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Vg(e,t,r,s=rG.LOG_LEVELS.ERROR,n=null,i=!1){if($g(e))return e;let o=new Ju(e,t,r,s,n);return i&&delete o.stack,o}a(Vg,"handleHDBError");function $g(e){return e.__proto__.constructor.name===Ju.name}a($g,"isHDBError");Yg.exports={isHDBError:$g,handleHDBError:Vg,ClientError:_E,ServerError:dE,hdb_errors:ji}});var Wg=T((hse,Kg)=>{"use strict";var sG={key:"-----BEGIN RSA PRIVATE KEY-----\rMIIEowIBAAKCAQEArBFJQRfFiJku/KwhV1Ssp7cX61vvuKmd4Rp6A9jB2QLgx8nj\r/+Xhp2hPRkISnOA8BuAxr4dMD9syGJwX4kNy9mbZ5Q0fWZCiEGBpVcU1J+k+N5K4\rSuZ2SqgxeN2IN2RLzt3GyQY4imcdHgNv7aHoXUrEwBx0MeYEw3IIDXtrYKCR2D8I\rvWBfwMUgWa24G8lpWILWA5hd9srRz9NxlAiHSjhbgT7B0xruEpHRCHSyKjvaIJVt\rWBR+amejYsAKVrD/hgrqjsA1123Y6++YqvU6vwg64xhS2kz5r3dkNKhvwbWgpZdI\rIaRvsiB77f4kLGo0vi8RFgJ1ZRjGg3RRK2w1LQIDAQABAoIBAQCEOmh78EOpnGZC\rYBjjHrvrysVD5gvLcfVUtl8Ls7gMB60re1eOIF+PoZZCHKZnDd6zPfiQtj1adg0C\rYnnsM/8VoaZS4gm0b3RLd3ubIQifWhuo40RissY2yxfxlPSH9LhZCY8ojnJG0cTL\resK579E8WCfopjUY33XLqEbN7Ylv39J+DSqInjqV3efJZUa+HqUJ98VxxzodcKMD\rP3bwUU4gHoSSp4pAsOFH5sQhaIWH1IcNjrAwpee2cJQuh4G157RRIuuUpagtaEG/\rXJIiAyBguJyu3JQFnIBQF01N5+omJgXYJ1L0m54543/iIRThmF3zDCDgCyUzmOk+\rH6As9fv1AoGBANOpOtOZLSAScjGsgJamT3ceJ2wCa86g2j8Oxu8lJUmUp5s3tA0v\rBFW5O3S4KR1EXwkLMBUMrfFM8YvzHWxsXBI6XV8azGLvyqPHxr65OhmpGYkGZMXu\rn9okgjkqlewnY2I073gvyK7ppX51UL5y9fF1vlsk+UlW+Rgx/vMHbdcjAoGBANAc\rxRUsxs4QJpbS4zD3JOkHjr24a97TrS3kCybAHUMpR2NrEHPZw9zex0/aphOJUHfL\rIMkOZdpfDqMfxWy4FAEmqBEMkO2SB+h0Wp4P+qp81ax4vGFiB0cD3wtixr11U1tt\rlZ/ZTdv4VDpDFNK1KaplhTDeyuCjeYfS3/GJia9vAoGAcOsAgjBevZR5rXx84WH6\rVO8WUu37u7FenXNxt9VWTinrPMh72uixZFY8nOk+rely1e1NCn3IMko9Ns9NbDFm\r8SaH95vhXArXTYbfxZIlp9jp0YtCqcHDL+p4Oq04bFMbFyJseu7rHj1x18QYfnHw\rOY/6LL/N6k1m+Hx7qgXVmIcCgYB/w0nTCBw84XlvWqSTqQaF8VfWbWP79mP5KmkW\rLxdH5g2noVEGbohqDnK6OXd/wusdwByukiJBf94Skyy25AOT+VFwthA7aU1ljhkb\rtJ+lDuJ28eBkwLPLCzthWBC+u0qjdJFJAzVjd/7tjcU43nNn4s90AzL12iaAFhvZ\rwyA+DQKBgGc/4cdyGJ3YkcA8150gQBawgJZ7q8V1JND87ggWA8wnK3cHn7rMZQl2\r3emDp9HEFXFex5dbGDDqZFAoesZCDxjknIn9oNfW4PvaWS8q7b6ZKLZG1p03Pu7/\rtYaD0kPbo0kysfFT/co+NgHbdykvIyboomfGdNLTUjYuy6lpwpvs\r-----END RSA PRIVATE KEY-----\r".replace(/\r/g,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))},nG="certificate.pem",iG="privateKey.pem",oG="ca.pem";Kg.exports={CERTIFICATE_VALUES:sG,CERTIFICATE_PEM_NAME:nG,PRIVATEKEY_PEM_NAME:iG,CA_PEM_NAME:oG}});var qe=T((mse,Qg)=>{"use strict";var 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};Qg.exports={validateObject:aG,validateObjectAsync:cG,validateBySchema:uG};function aG(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(aG,"validateObject");async function cG(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(cG,"validateObjectAsync");function uG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(uG,"validateBySchema")});var EE=T((Tse,Zg)=>{"use strict";var jg=require("fs-extra"),ue=require("joi"),lG=require("os"),{boolean:Ie,string:Is,number:Ot,array:fE}=ue.types(),{totalmem:zg}=require("os"),Zi=require("path"),_G=G(),ju=$(),Sse=Wg(),Jg=b(),dG=qe(),Xg="log",fG="components",EG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SG="rootPath config parameter is undefined",TG="clustering.enabled config parameter is undefined",ai=Ot.min(0).required(),Zu=fE.items({host:Is.required(),port:ai}).empty(null),Zs;Zg.exports={configValidator:RG,routesValidator:yG,route_constraints:Zu};function RG(e){if(Zs=e.rootPath,ju.isEmpty(Zs))throw SG;let t=Ie.required(),r=Ot.min(0).max(1e3).empty(null).default(bG),s=Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Xu),n=Is.optional().empty(null),i=Is.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=ue.string().empty(null).default(Xu),c=ue.custom(AG).empty(null).default(Xu),u=e.clustering?.enabled;if(ju.isEmpty(u))throw TG;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:Zu}).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:Zu}).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(NG).optional().empty(null),maxSize:Is.custom(OG).optional().empty(null),path:Is.optional().empty(null).default(Xu)}).required(),root:s,stdStreams:Ie.required(),auditLog:Ie.required()}).required(),operationsApi:ue.object({network:ue.object({cors:Ie.optional(),corsAccessList:fE.optional(),headersTimeout:Ot.min(1).optional(),keepAliveTimeout:Ot.min(1).optional(),port:Ot.optional().empty(null),securePort:Ot.optional().empty(null),timeout:Ot.min(1).optional()}).optional(),tls: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:fE.optional(),headersTimeout:Ot.min(1).optional(),port:Ot.min(0).optional().empty(null),securePort:Ot.min(0).optional().empty(null)}).required(),threads:r.optional(),storage: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(RG,"configValidator");function gG(e){return jg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(gG,"doesPathExist");function AG(e,t){ue.assert(e,Is.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=gG(e);if(r)return t.message(r)}a(AG,"validatePath");function OG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(mG):e}a(OG,"validateRotationMaxSize");function NG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(pG):e}a(NG,"validateRotationInterval");function bG(e,t){let r=t.state.path.join("."),s=lG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zg();return i=Math.round(Math.min(i,zg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),_G.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(bG,"setDefaultThreads");function Xu(e,t){if(!ju.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(ju.isEmpty(Zs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Zi.join(Zs,fG);case"logging.root":return Zi.join(Zs,Xg);case"clustering.leafServer.streams.path":return Zi.join(Zs,"clustering","leaf");case"storage.path":let s=Zi.join(Zs,Jg.LEGACY_DATABASES_DIR_NAME);return jg.existsSync(s)?s:Zi.join(Zs,Jg.DATABASES_DIR_NAME);case"logging.rotation.path":return Zi.join(Zs,Xg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Xu,"setDefaultRoot");function yG(e){let t=ue.object({routes:Zu});return dG.validateBySchema({routes:e},t)}a(yG,"routesValidator")});var eo={};Qe(eo,{server:()=>ut});var eA,ut,Mr=Te(()=>{eA=require("../../index"),ut={};(0,eA._assignPackageExport)("server",ut)});var hr=T((Ase,uA)=>{"use strict";var Er=b(),mt=$(),lt=G(),{configValidator:IG,routesValidator:tA}=EE(),Wt=require("fs-extra"),wG=require("yaml"),rs=require("path"),CG=require("is-number"),sA=require("properties-reader"),LG=require("lodash"),{handleHDBError:DG}=j(),{HTTP_STATUS_CODES:UG,HDB_ERROR_MSGS:el}=dr(),gse=require("minimist"),{server:MG}=(Mr(),Z(eo)),{DATABASES_PARAM_CONFIG:ya,CONFIG_PARAMS:fr,CONFIG_PARAM_MAP:ss}=Er,PG="Unable to get config value because config is uninitialized",vG="Config successfully initialized",BG="Error backing up config file",HG="Empty parameter sent to getConfigValue",nA=rs.join(Er.PACKAGE_ROOT,"config","yaml",Er.HDB_DEFAULT_CONFIG_FILE),FG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rA={logging_rotation_retain:"logging.rotation.retain",logging_rotation_rotate:"logging.rotation.rotate",logging_rotation_rotateinterval:"logging.rotation.rotateInterval",logging_rotation_rotatemodule:"logging.rotation.rotateModule",logging_rotation_timezone:"logging.rotation.timezone",logging_rotation_workerinterval:"logging.rotation.workerInterval"},tl,_t,rl;uA.exports={createConfigFile:qG,getDefaultConfig:GG,getConfigValue:oA,initConfig:mE,flattenConfig:to,updateConfigValue:aA,updateConfigObject:kG,getConfiguration:YG,setConfiguration:KG,readConfigFile:SE,getClusteringRoutes:WG,initOldConfig:cA,getConfigFromFile:QG,getConfigFilePath:ci,addConfig:zG,deleteConfigFromFile:JG,getConfigObj:XG};function qG(e){let t=Ln(nA);tl=to(t.toJSON());let r;for(let o in e){let c=ss[o.toLowerCase()];if(c===fr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=hE(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){lt.error(l)}}}r&&iA(t,r),pE(t);let s=t.toJSON();_t=to(s);let n=t.getIn(["rootPath"]),i=rs.join(n,Er.HDB_CONFIG_FILE);Wt.createFileSync(i),Wt.writeFileSync(i,String(t)),lt.trace(`Config file written to ${i}`)}a(qG,"createConfigFile");function iA(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!mt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ya.TABLES))for(let i in s[n][ya.TABLES])for(let o in s[n][ya.TABLES][i]){let c=s[n][ya.TABLES][i][o],u=[fr.DATABASES,n,ya.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[fr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){lt.error("Error parsing schemas CLI/env config arguments",s)}}a(iA,"setSchemasConfig");function GG(e){if(tl===void 0){let r=Ln(nA);tl=to(r.toJSON())}let t=ss[e.toLowerCase()];if(t!==void 0)return tl[t.toLowerCase()]}a(GG,"getDefaultConfig");function oA(e){if(e==null){lt.error(HG);return}if(_t===void 0){lt.trace(PG);return}let t=ss[e.toLowerCase()];if(t!==void 0)return _t[t.toLowerCase()]}a(oA,"getConfigValue");function ci(e=mt.getPropsFilePath()){let t=mt.getEnvCliRootPath();return t?rs.join(t,Er.HDB_CONFIG_FILE):sA(e).get(Er.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ci,"getConfigFilePath");function mE(e=!1){if(_t===void 0||e){let t;if(!mt.noBootFile()){t=mt.getPropsFilePath();try{Wt.accessSync(t,Wt.constants.F_OK|Wt.constants.R_OK)}catch(i){throw lt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ci(t),s;if(r.includes("config/settings.js"))try{cA(r);return}catch(i){if(i.code!==Er.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ln(r)}catch(i){if(i.code===Er.NODE_ERROR_CODES.ENOENT){lt.trace(`HarperDB config file not found at ${r}.
|
|
5
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw lt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}xG(s,r),pE(s);let n=s.toJSON();if(MG.config=n,_t=to(n),_t.logging_rotation_rotate)for(let i in rA)_t[i]&<.error(`Config ${rA[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);lt.trace(vG)}}a(mE,"initConfig");function xG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],rs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],rs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],rs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(lt.trace("Updating config file with missing config params"),Wt.writeFileSync(t,String(e)))}a(xG,"checkForUpdatedConfig");function pE(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=IG(t);if(r.error)throw el.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(pE,"validateConfig");function kG(e,t){_t===void 0&&(_t={});let r=ss[e.toLowerCase()];if(r===void 0){lt.trace(`Unable to update config object because config param '${e}' does not exist`);return}_t[r.toLowerCase()]=t}a(kG,"updateConfigObject");function aA(e,t,r=void 0,s=!1,n=!1,i=!1){_t===void 0&&mE();let o=oA(ss.hdb_root),c=rs.join(o,Er.HDB_CONFIG_FILE),u=Ln(c),_;if(r===void 0&&e.toLowerCase()===fr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ss[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=hE(f,t);u.setIn([...E],h)}else for(let f in r){let E=ss[f.toLowerCase()];if(E===fr.HTTP_SECUREPORT&&r[f]===_t[fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===_t[fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===fr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=Er.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let S=hE(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){lt.error(A)}}}_&&iA(u,_),pE(u);let l=u.getIn(["rootPath"]),d=rs.join(l,Er.HDB_CONFIG_FILE);s===!0&&VG(c,l),Wt.writeFileSync(d,String(u)),n&&(_t=to(u.toJSON())),lt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(aA,"updateConfigValue");function VG(e,t){try{let r=rs.join(t,"backup",`${Er.HDB_CONFIG_FILE}.bak`);Wt.copySync(e,r),lt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){lt.error(BG),lt.error(r)}}a(VG,"backupConfigFile");var $G=["databases"];function to(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),rl=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!$G.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!fr[u.toUpperCase()]&&ss[u]&&(n[ss[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(to,"flattenConfig");function hE(e,t){if(e===fr.CLUSTERING_NODENAME||e===fr.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(CG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||mt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return mt.autoCast(t)}a(hE,"castConfigValue");function YG(){let e=mt.getPropsFilePath(),t=ci(e);return Ln(t).toJSON()}a(YG,"getConfiguration");async function KG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return aA(void 0,void 0,n,!0),FG}catch(i){throw typeof i=="string"||i instanceof String?DG(i,i,UG.BAD_REQUEST,void 0,void 0,!0):i}}a(KG,"setConfiguration");function SE(){let e=mt.getPropsFilePath();try{Wt.accessSync(e,Wt.constants.F_OK|Wt.constants.R_OK)}catch(s){if(!mt.noBootFile())throw lt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ci(e);return Ln(t).toJSON()}a(SE,"readConfigFile");function Ln(e){return wG.parseDocument(Wt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ln,"parseYamlDoc");function WG(){let e=SE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=mt.isEmptyOrZeroLength(t)?[]:t;let r=tA(t);if(r)throw el.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=mt.isEmptyOrZeroLength(s)?[]:s;let n=tA(s);if(n)throw el.CONFIG_VALIDATION(n.message);if(!mt.isEmptyOrZeroLength(s)&&!mt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!mt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw el.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(WG,"getClusteringRoutes");function cA(e){let t=sA(e);_t={};for(let r in ss){let s=t.get(r.toUpperCase());if(mt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ss[r].toLowerCase();n===fr.LOGGING_ROOT?_t[n]=rs.dirname(s):_t[n]=s}return _t}a(cA,"initOldConfig");function QG(e){let t=SE();return LG.get(t,e.replaceAll("_","."))}a(QG,"getConfigFromFile");async function zG(e,t){let r=Ln(ci());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Wt.writeFile(ci(),String(r))}a(zG,"addConfig");function JG(e){let t=ci(mt.getPropsFilePath()),r=Ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=rs.join(s,Er.HDB_CONFIG_FILE);Wt.writeFileSync(n,String(r))}a(JG,"deleteConfigFromFile");function XG(){return rl||(mE(),rl)}a(XG,"getConfigObj")});var X=T((Nse,dA)=>{"use strict";var TE=require("fs-extra"),ns=require("path"),lA=require("os"),jG=require("properties-reader"),Ia=G(),ui=$(),ee=b(),sl=hr(),ZG="Error initializing environment manager",nl="BOOT_PROPS_FILE_PATH",_A=!1,ex={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},en={};dA.exports={BOOT_PROPS_FILE_PATH:nl,getHdbBasePath:tx,setHdbBasePath:rx,get:sx,initSync:ix,setProperty:he,initTestEnvironment:ox};function tx(){return en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(tx,"getHdbBasePath");function rx(e){en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(rx,"setHdbBasePath");function sx(e){let t=sl.getConfigValue(e);return t===void 0?en[e]:t}a(sx,"get");function he(e,t){ex[e]&&(en[e]=t),sl.updateConfigObject(e,t)}a(he,"setProperty");function nx(){let e;try{e=ui.getPropsFilePath(),TE.accessSync(e,TE.constants.F_OK|TE.constants.R_OK),_A=!0;let t=jG(e);return en[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),en[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),en[nl]=e,!0}catch{return Ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(nx,"doesPropFileExist");function ix(e=!1){try{(_A||nx()||ui.noBootFile())&&(sl.initConfig(e),en[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=sl.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ia.error(ZG),Ia.error(t),console.error(t),process.exit(1)}}a(ix,"initSync");function ox(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=ns.join(__dirname,"../../","unitTests");en[nl]=ns.join(u,"hdb_boot_properties.file"),he(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,ns.join(u,"settings.test")),he(ee.HDB_SETTINGS_NAMES.INSTALL_USER,lA.userInfo()?lA.userInfo().username:void 0),he(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.HDB_SETTINGS_NAMES.CERT_KEY,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.CONFIG_PARAMS.TLS_PRIVATEKEY,ns.join(u,"envDir","utility","keys","privateKey.pem")),he(ee.CONFIG_PARAMS.TLS_CERTIFICATE,ns.join(u,"envDir","utility","keys","certificate.pem")),he(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,ns.join(u,"envDir","log")),he(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,ns.join(u,"envDir")),he(ee.CONFIG_PARAMS.STORAGE_PATH,ns.join(u,"envDir")),he(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ui.isEmpty(n)?!0:n),he(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ui.isEmpty(n)?!0:n),he(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ui.isEmpty(i)?!1:i),he(ee.CONFIG_PARAMS.HTTP_CORS,ui.isEmpty(i)?!1:i),he(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ui.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ee.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(he(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ee.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(he(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ee.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(he(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ee.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${nl}. Please check your boot props and settings files`;Ia.fatal(r),Ia.error(t)}}a(ox,"initTestEnvironment")});var ve=T((yse,TA)=>{"use strict";var Ua=b(),ax=$(),Qt=X(),Ma=require("path"),cx=require("minimist"),fA=require("fs-extra"),EA=require("lodash");Qt.initSync();var{CONFIG_PARAMS:Dn,DATABASES_PARAM_CONFIG:wa,SYSTEM_SCHEMA_NAME:il}=Ua,Ca,La,Da;function hA(){if(Ca!==void 0)return Ca;if(Qt.getHdbBasePath()!==void 0)return Ca=Qt.get(Dn.STORAGE_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.DATABASES_DIR_NAME),Ca}a(hA,"getBaseSchemaPath");function mA(){if(La!==void 0)return La;if(Qt.getHdbBasePath()!==void 0)return La=SA(il),La}a(mA,"getSystemSchemaPath");function pA(){if(Da!==void 0)return Da;if(Qt.getHdbBasePath()!==void 0)return Da=Qt.get(Ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Ma.join(Qt.getHdbBasePath(),Ua.TRANSACTIONS_DIR_NAME),Da}a(pA,"getTransactionAuditStoreBasePath");function ux(e,t){let r=Qt.get(Dn.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Ma.join(pA(),e.toString())}a(ux,"getTransactionAuditStorePath");function SA(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(Ua.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Ma.join(hA(),e)}a(SA,"getSchemaPath");function lx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,cx(process.argv));let s=r[Dn.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!ax.isObject(s))throw o;i=s}for(let o of i){let c=o[il];if(!c)continue;let u=Qt.get(Dn.DATABASES);u=u??{};let _=c?.tables?.[t]?.[wa.PATH];if(_)return EA.set(u,[il,wa.TABLES,t,wa.PATH],_),Qt.setProperty(Dn.DATABASES,u),_;let l=c?.[wa.PATH];if(l)return EA.set(u,[il,wa.PATH],l),Qt.setProperty(Dn.DATABASES,u),l}}let n=r[Dn.STORAGE_PATH.toUpperCase()];if(n){if(!fA.pathExistsSync(n))throw new Error(n+" does not exist");let i=Ma.join(n,e);return fA.mkdirsSync(i),Qt.setProperty(Dn.STORAGE_PATH,n),i}return mA()}a(lx,"initSystemSchemaPaths");function _x(){Ca=void 0,La=void 0,Da=void 0}a(_x,"resetPaths");TA.exports={getBaseSchemaPath:hA,getSystemSchemaPath:mA,getTransactionAuditStorePath:ux,getTransactionAuditStoreBasePath:pA,getSchemaPath:SA,initSystemSchemaPaths:lx,resetPaths:_x}});var mr=T((Lse,NA)=>{"use strict";var dx=dr().LMDB_ERRORS_ENUM,wse=require("lmdb"),fx=ze(),Cse=require("buffer").Buffer,{OVERFLOW_MARKER:RA,MAX_SEARCH_KEY_LENGTH:ol}=fx,gA=["number","string","symbol","boolean","bigint"];function Ex(e){if(e=e?.primaryStore||e,!e)throw new Error(dx.ENV_REQUIRED)}a(Ex,"validateEnv");function hx(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(hx,"stringifyData");function mx(e){return e instanceof Date?e.valueOf():e}a(mx,"convertKeyValueToWrite");function px(e){if(e==null)return;if(gA.includes(typeof e))return e.length>ol?[e.slice(0,ol)+RA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(gA.includes(typeof n))n.length>ol?t.push(n.slice(0,ol)+RA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(px,"getIndexedValues");var al=0,AA=0;function OA(){AA=Date.now()-performance.now()}a(OA,"adjustStartTime");OA();var Sx=6e4;setInterval(OA,Sx).unref();function Tx(){let e=performance.now()+AA;return e>al?(al=e,e):(al+=488e-6,al)}a(Tx,"getNextMonotonicTime");NA.exports={validateEnv:Ex,stringifyData:hx,convertKeyValueToWrite:mx,getNextMonotonicTime:Tx,getIndexedValues:px}});var bA,is,RE,Pa=Te(()=>{bA=require("events"),is=class extends bA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new RE;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){return this.queue?.shift()}on(t,r){if(t==="data"&&!this.hasDataListeners)for(this.hasDataListeners=!0;this.queue?.length>0;)r(this.queue.shift());return super.on(t,r)}},RE=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Pr(e){return e[Bt]||(e[Bt]=Object.create(null))}function _l(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a string, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a number, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new os.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new os.ClientError(`${c} must be a Date, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Pr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Pr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new os.ClientError(`${c} must be an object, attempt to assign ${l}`);Pr(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Bt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=yA(d,o);if(f)return l||(l=this[Bt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Bt];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new os.ClientError("Can not add a property to a sealed table schema");Pr(this)[o]=c}),i("deleteProperty",function(o){Pr(this)[o]=void 0}),i("toJSON",function(){let o=this[Bt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function yA(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Re]=n}},_l(r,t)),new r(e)):new cl(e);case Array:let s=new ll(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=yA(o,t?.elements)),s[n]=o}return s}}function dl(e){let t=e[Bt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=dl(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function va(e){let t;if(e[Re]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=va(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Bt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=va(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ul(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[li]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Re]===n){if(ul(i))return!0}else return!0}}else{let r=e[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(ul(n))return!0}else return!0}else return!0}}return!1}var os,Bt,cl,li,ll,fl=Te(()=>{as();os=D(j()),Bt=Symbol("own-data");a(Pr,"getChanges");a(_l,"assignTrackedAccessors");a(yA,"trackObject");cl=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};_l(cl,{});a(dl,"collapseData");a(va,"deepFreeze");a(ul,"hasChanges");li=Symbol.for("has-array-changes"),ll=class extends Array{static{a(this,"TrackedArray")}[li];constructor(t){super(t)}splice(...t){return this[li]=!0,super.splice(...t)}push(...t){return this[li]=!0,super.push(...t)}pop(){return this[li]=!0,super.pop()}unshift(...t){return this[li]=!0,super.unshift(...t)}shift(){return this[li]=!0,super.shift()}};ll.prototype.constructor=Array});function Ox(){Ax=setInterval(function(){for(let e of gE)if(e.stale){let t=e[me]?.url;IA.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},gx).unref()}var AE,IA,Rx,gE,_i,El,gx,Ax,OE=Te(()=>{AE=D(mr()),IA=D(G());as();Rx=100,gE=new Set,_i=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),gE.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(gE.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,AE.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let p=this.writes[h];if(!p)continue;let S=p[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<Rx>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},El=class extends _i{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,AE.getNextMonotonicTime)())}getReadTxn(){}},gx=3e4;a(Ox,"startMonitoringTxns");Ox()});function Ge(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new _i;e.timestamp&&(s.timestamp=e.timestamp),s[me]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var wA,di=Te(()=>{wA=require("../../index");as();OE();a(Ge,"transaction");(0,wA._assignPackageExport)("transaction",Ge);Ge.commit=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ge.abort=function(e){let t=(e[me]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function bE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new ro.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(DA[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=Cs.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+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 ro.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new ro.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=yE(e);if(!S)throw new ro.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:I})=>new Promise((N,Y)=>setImmediate(()=>{try{N(I&&S(I)?A:LA.SKIP)}catch(Q){Y(Q)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:S})=>S)}function yE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),DA[t]||t){case pt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case pt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case pt.SEARCH_TYPES.ENDS_WITH:case pt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case pt.SEARCH_TYPES.STARTS_WITH:case pt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case pt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case pt.SEARCH_TYPES.GREATER_THAN:case pt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case pt.SEARCH_TYPES.GREATER_THAN_EQUAL:case pt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case pt.SEARCH_TYPES.LESS_THAN:case"lt":case pt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case pt.SEARCH_TYPES.LESS_THAN_EQUAL:case pt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:throw new ro.ClientError(`Unknown query comparator "${t}"`)}}function ws(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function hl(e){if(!e)return;let t=new NE,r,s,n,i,o,c=CA;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=Nx[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?bx:CA,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var ro,pt,Cs,LA,Nx,DA,CA,bx,NE,ml=Te(()=>{ro=D(j()),pt=D(ze()),Cs=require("ordered-binary"),LA=require("lmdb"),Nx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(bE,"idsForCondition");DA={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(yE,"filterByType");a(ws,"attributeComparator");CA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,bx=/([^&|*=]+)([&|*=]*)/g;a(hl,"parseQuery");NE=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let s=this.conditions[r];if(s.attribute===t)return s.value}}}});var CE={};Qe(CE,{CONTEXT:()=>me,ID_PROPERTY:()=>we,IS_COLLECTION:()=>cs,RECORD_PROPERTY:()=>Re,Resource:()=>Nt,SAVE_UPDATES_PROPERTY:()=>HA,snake_case:()=>Ix});function Ix(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UA(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new wE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function vr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[me]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[me]||i):_=i:(_=n,c=_[we]??_[this.primaryKey]??null):i?o=i[me]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return Ge(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[HA]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new pl(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new pl(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function Br(e,t){let r=new BA.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function IE(e){let t=e[Re];if(t){let r=e[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 MA(e){if(typeof e=="string")return t=>IE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=IE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=IE(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var PA,vA,BA,me,we,cs,HA,Re,yx,Nt,pl,wE,as=Te(()=>{PA=require("crypto");Pa();vA=require("../../index"),BA=D(j());fl();di();ml();me=Symbol.for("context"),we=Symbol.for("primary-key"),cs=Symbol("is-collection"),HA=Symbol("save-updates"),Re=Symbol("stored-record"),yx={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Nt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[we]=t;let s=r?.[me];this[me]=s!==void 0?s:r||null}static get=vr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let _=MA(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=vr(function(t,r,s,n){if(Array.isArray(n)&&t[cs]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):Br(t,"put")},{hasContent:!0,type:"update"});static delete=vr(function(t,r,s,n){return t.delete?t.delete(r):Br(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,PA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ge(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Br(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=vr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Br(t,"delete")},{hasContent:!1,type:"update"});static post=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=vr(function(t,r,s,n){return t.connect?t.connect(n,r):Br(t,"connect")},{hasContent:!0,type:"read"});static subscribe=vr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Br(t,"subscribe")},{type:"read"});static publish=vr(function(t,r,s,n){return t[we]!=null&&t.update?.(),t.publish?t.publish(n,r):Br(t,"publish")},{hasContent:!0,type:"create"});static search=vr(function(t,r,s,n){let i=t.search?t.search(r):Br(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=MA(o);return i.map(c)}return i},{type:"read"});static query=vr(function(t,r,s,n){return t.search?t.search(n,r):Br(t,"search")},{hasContent:!0,type:"read"});static copy=vr(function(t,r,s,n){return t.copy?t.copy(n,r):Br(t,"copy")},{type:"create"});static move=vr(function(t,r,s,n){return t.move?t.move(n,r):Br(t,"move")},{type:"delete"});post(t){if(this[cs])return this.constructor.create(this[we],t,this[me]);Br(this,"post")}static isCollection(t){return t?.[cs]}static coerceId(t){return t}static parseQuery(t){return hl(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&yx[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:UA(t,this)}}return UA(t,this)}static getResource(t,r,s){let n,i=r[me],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[we]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[we],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[cs]=!0),n}subscribe(t){return new is}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new is}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[we]}getContext(){return this[me]}};Nt.prototype[me]=null;(0,vA._assignPackageExport)("Resource",Nt);a(Ix,"snake_case");pl=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(UA,"pathToId");wE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(vr,"transactional");a(Br,"missingMethod");a(IE,"selectFromObject");a(MA,"transformForSelect")});var DE={};Qe(DE,{loadGQLSchema:()=>Lx,start:()=>LE,startOnMainThread:()=>Cx});function LE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let Q=function(q){if(q.kind==="NonNullType"){let B=Q(q.type);return B.nullable=!1,B}if(q.kind==="ListType")return{type:"array",elements:Q(q.type)};let K={type:q.name?.value};return Object.defineProperty(K,"location",{value:q.loc.startToken}),K};a(Q,"getProperty");let A=S.name.value,I=[],N={table:null,database:null,properties:I};f.set(A,N);for(let q of S.directives){if(q.name.value==="table"){for(let w of q.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(q.name.value==="sealed"&&(N.sealed=!0),q.name.value==="export"){N.export=!0;for(let w of q.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let Y=!1;for(let q of S.fields){let w=Q(q.type);w.name=q.name.value,I.push(w);for(let K of q.directives)if(K.name.value==="primaryKey")Y?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,Y=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let x of K.arguments)x.name.value==="role"&&B.push(x.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function p(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?p(S.elements):wx.includes(S.type)||(0,FA.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let S of f.values())for(let A of S.properties)p(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Sl.dirname)(s),S.tableClass):i.set((0,Sl.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Sl.dirname)(s)+"/"+S.name,A.tableClass)}}}var Sl,FA,wx,Cx,Lx,qA=Te(()=>{Sl=require("path");fe();FA=D(Ze()),wx=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(LE,"start");Cx=LE,Lx=LE({ensureTable:et}).handleFile});async function Tl(e){return Dx?(Ba||(Ba=Ux(Px)),(await(await Ba).import(e)).namespace):import(e)}async function Ux(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Ba=new Compartment({console,Math,Date,fetch:Mx,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xA.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Nt,tables:pr,databases:xe})}};let s=await(0,GA.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Ba}function Mx(e,t){let r=typeof e=="string"||e.url;if(new URL(r).protocol!="https")throw new Error("Only https is allowed in fetch");return fetch(e,t)}function Px(){return{Resource:Nt,tables:pr}}var GA,xA,Dx,Ba,UE=Te(()=>{as();fe();GA=require("fs/promises"),xA=require("path"),Dx=!1;a(Tl,"secureImport");a(Ux,"getCompartment");a(Mx,"secureOnlyFetch");a(Px,"getGlobalVars")});var PE={};Qe(PE,{handleFile:()=>vx});async function vx(e,t,r,s){let n=new Map,i=(0,kA.pathToFileURL)(r).toString(),o=await Tl(i);u(o.default)&&s.set((0,ME.dirname)(t),o.default),c(o,(0,ME.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var kA,ME,VA=Te(()=>{kA=require("url");UE();ME=require("path");a(vx,"handleFile")});var BE={};Qe(BE,{start:()=>Bx});function Bx({resources:e}){e.set("login",vE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var vE,$A=Te(()=>{as();a(Bx,"start");vE=class extends Nt{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var FE=T((cne,WA)=>{"use strict";var{Readable:Hx}=require("stream"),Fx=1e4;WA.exports={streamAsJSON(e){return new HE({value:e})}};var HE=class extends Hx{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),YA)}catch(n){yield YA(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);KA(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>Fx?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return KA(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let s of this.activeIterators)t?s.throw(t):s.return();r()}};function YA(e){return console.error(e),JSON.stringify(e.toString())}a(YA,"handleError");function KA(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(KA,"when")});var oO=T((_ne,iO)=>{"use strict";var qE=require("recursive-iterator"),qx=require("alasql"),GE=require("clone"),QA=$(),{handleHDBError:zA,hdb_errors:Gx}=j(),{HDB_ERROR_MSGS:JA,HTTP_STATUS_CODES:XA}=Gx,{getDatabases:xx}=(fe(),Z(Ce)),kx=["DISTINCT_ARRAY"],jA=Symbol("validateTables"),xE=Symbol("validateTable"),lne=Symbol("getAllColumns"),ZA=Symbol("validateAllColumns"),Rl=Symbol("findColumn"),eO=Symbol("validateOrderBy"),Ha=Symbol("validateSegment"),kE=Symbol("validateColumn"),tO=Symbol("setColumnsForTable"),rO=Symbol("checkColumnsForAsterisk"),sO=Symbol("validateGroupBy"),nO=Symbol("hasColumns"),VE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[jA](),this[rO](),this[ZA]()}[jA](){if(this[nO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[xE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[xE](t.table)})}}[nO](){let t=!1,r=new qE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[xE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=xx();if(!r[t.databaseid])throw zA(new Error,JA.SCHEMA_NOT_FOUND(t.databaseid),XA.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zA(new Error,JA.TABLE_NOT_FOUND(t.databaseid,t.tableid),XA.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=GE(n);i.table=GE(t),this.attributes.push(i)})}[Rl](t){return this.attributes.filter(r=>t.tableid?(r.table.as===t.tableid||r.table.tableid===t.tableid)&&r.attribute===t.columnid:r.attribute===t.columnid)}[rO](){let t=new qE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tO](r.tableid)}[tO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new qx.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZA](){this[Ha](this.statement.columns,!1),this[Ha](this.statement.joins,!1),this[Ha](this.statement.where,!1),this[sO](this.statement.group,!1),this[Ha](this.statement.order,!0)}[Ha](t,r){if(!t)return;let s=new qE(t),n=[];for(let{node:i,path:o}of s)!QA.isEmpty(i)&&!QA.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eO](i):n.push(this[kE](i)));return n}[sO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&kx.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=GE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Rl](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Rl](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[eO](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[kE](t)}[kE](t){let r=this[Rl](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};iO.exports=VE});var cO=T((fne,aO)=>{"use strict";var $E=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};aO.exports=$E});var lO=T((hne,uO)=>{"use strict";var YE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uO.exports=YE});var AO={};Qe(AO,{AUDIT_STORE_OPTIONS:()=>RO,createAuditEntry:()=>Ol,openAuditStore:()=>Al,readAuditEntry:()=>Sr,setAuditRetention:()=>Vx,transactionKeyEncoder:()=>TO});function Al(e){let t=e.auditStore=e.openDB(hO.AUDIT_STORE_NAME,RO);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,pO.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Fa||(Fa=setTimeout(()=>{if(Fa=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-KE})){if((n[0]&15)===QE){let i=Sr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},KE/10).unref())}),t}function Vx(e){clearTimeout(Fa),Fa=null,KE=e}function Ol(e,t,r,s,n,i,o){let c=gO[i],u=1;s&&(s>1?so.setFloat64(0,s):Hr.set(XE),u=9),f(0),f(t),d(r),so.setFloat64(u,e),u+=8,n?d(n):Hr[u++]=0,Hr[s?8:0]=c;let l=Hr.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,no.writeKey)(E,Hr,u);let p=u-h-1;p>127?p>16383?(JE.error("Key or username was too large for audit entry",E),u=h+1,Hr[h]=0):(Hr.copyWithin(h+2,h+1,u),so.setUint16(h,p|32768),u++):Hr[h]=p}function f(E){E<128?Hr[u++]=E:E<16384?(so.setUint16(u,E|32768),u+=2):E<1056964608?(so.setUint32(u,E|3221225472),u+=4):(Hr[u]=255,so.setUint32(u+1,E),u+=5)}}function Sr(e){try{let t=e.dataView||(e.dataView=new zE(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:gO[s&7],tableId:i,get recordId(){return EO(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?EO(e,l,d):void 0},getValue(f){return s&WE?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return JE.error("Reading audit entry error",e),{}}}function EO(e,t,r){let s=e.subarray(t,r);return(0,no.readKey)(s,0,r-t)}var no,gl,hO,mO,pO,SO,JE,Hr,so,TO,RO,KE,Fa,WE,_O,QE,dO,fO,gO,zE,io=Te(()=>{no=require("ordered-binary"),gl=D(X()),hO=D(ze()),mO=D(b()),pO=D(Ze()),SO=D($());Ga();JE=D(G());(0,gl.initSync)();Hr=Buffer.alloc(1024),so=new DataView(Hr.buffer,Hr.byteOffset,1024),TO={writeKey(e,t,r){return e===qa?(t.set(qa,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,no.writeKey)(e,t,r)},readKey(e,t,r){return e[t]===66?(e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength))).getFloat64(t):(0,no.readKey)(e,t,r)}},RO={encoding:"binary",keyEncoder:TO},KE=(0,SO.convertToMS)((0,gl.get)(mO.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Fa=null;a(Al,"openAuditStore");a(Vx,"setAuditRetention");WE=16,_O=1,QE=2,dO=3,fO=4,gO={put:_O|WE,[_O]:"put",delete:QE,[QE]:"delete",message:dO|WE,[dO]:"message",invalidate:fO,[fO]:"invalidate"};a(Ol,"createAuditEntry");a(Sr,"readAuditEntry");zE=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return t>=128?t>=192?t===255?(t=this.getUint32(this.position),this.position+=4,t):(t=this.getUint32(this.position-1)&1073741823,this.position+=3,t):(t=this.getUint16(this.position-1)&32767,this.position++,t):t}readFloat64(){try{let t=this.getFloat64(this.position);return this.position+=8,t}catch{debugger}}};a(EO,"readKeySafely")});var wO={};Qe(wO,{HAS_EXPIRATION:()=>sh,LAST_TIMESTAMP_PLACEHOLDER:()=>qa,LOCAL_TIMESTAMP:()=>$x,METADATA:()=>xa,NO_TIMESTAMP:()=>jE,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>XE,RecordEncoder:()=>rh,TIMESTAMP_ASSIGN_LAST:()=>Kx,TIMESTAMP_ASSIGN_NEW:()=>bO,TIMESTAMP_ASSIGN_PREVIOUS:()=>yO,TIMESTAMP_PLACEHOLDER:()=>Nl,TIMESTAMP_RECORD_PREVIOUS:()=>ZE,getUpdateRecord:()=>nh,handleLocalTimeForGets:()=>Il});function IO(){return ao[0]=ao[0]^64,Yx.getFloat64(0)}function Il(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[xa]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[xa];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=Wx.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(ao,0,d),l.timestampBytes=null,l.localTime=IO())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<fi.length;u++){let _=fi[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function nh(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?oo=i?.localTime?ZE|yO:jE:oo=u?i?.localTime?ZE|16384:bO|16384:jE,l>0&&(c|=sh),yl=c,th=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:oo>0},p;try{f&&(h.ifVersion=p=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=eh,A.timestampOffset=eh.start||0))}if(u){let A=_?.user?.username;if(E&&(bl=e.encoder.encode(E)),f&&i?.localTime){let I=i?.localTime,N=r.get(I);if(N){let Y=Sr(N).previousLocalTime;return r.put(I,Ol(o,t,s,Y,A,d,bl),{ifVersion:p}),S}}r.put(qa,Ol(o,t,s,i?.localTime?1:0,A,d,bl),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var OO,NO,Nl,qa,XE,$x,xa,ao,Yx,jE,bO,Kx,yO,ZE,sh,eh,bl,oo,yl,th,rh,Wx,fi,Ga=Te(()=>{OO=require("msgpackr");io();NO=D(G()),Nl=new Uint8Array([1,1,1,1,4,64,0,0]),qa=new Uint8Array([1,1,1,1,1,0,0,0]),XE=new Uint8Array([1,1,1,1,3,64,0,0]),$x=Symbol("local-timestamp"),xa=Symbol("metadata"),ao=new Uint8Array(8),Yx=new DataView(ao.buffer,0,8),jE=0,bO=0,Kx=1,yO=3,ZE=4,sh=16,oo=0,yl=-1,th=0,rh=class extends OO.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(oo||yl>=0){let i=0,o=oo;o&&(i+=8,oo=0);let c=yl,u=th;c>=0&&(i+=2,yl=-1,u&&(i+=8,th=0));let _=eh=r.call(this,s,n|2048|i);bl=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Nl[4]=o,Nl[5]=o>>8,_.set(Nl,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(ao,0,c),c+=8;else for(let d=0;d<8;d++)ao[d]=t[c++];u=IO(),i=t[c]}let _;i<32&&(o=i,c+=2,o&sh&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[xa]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(IO,"getTimestamp");Wx=Map.prototype.get;a(Il,"handleLocalTimeForGets");fi=[];setInterval(()=>{for(let e=0;e<fi.length;e++){let t=fi[e].deref();!t||t.isDone||t.isCommitted?fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&NO.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t),t.openTimer++):t.openTimer=1)}},15e3).unref();a(nh,"getUpdateRecord")});var wl=T((gne,CO)=>{"use strict";var oh=X(),ah=b(),{RecordEncoder:Qx}=(Ga(),Z(wO));oh.initSync();var zx=oh.get(ah.CONFIG_PARAMS.STORAGE_COMPRESSION),Jx=oh.get(ah.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Xx=ah.UPDATES_PROPERTY,ih=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=zx&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Jx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:Qx},this.alwaysLazyProperty=s=>s===Xx)}};CO.exports=ih});var Ll=T((One,DO)=>{"use strict";var co=X(),ka=b();co.initSync();var jx=co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||co.get(ka.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",LO=co.get(ka.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Zx=co.get(ka.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Cl=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=jx,this.noFSAccess=!0,LO!==void 0&&(this.overlappingSync=LO),this.noReadAhead=Zx}};DO.exports=Cl;Cl.MAX_DBS=1e4});var Ue=T((bne,xO)=>{"use strict";var uh=require("lmdb"),us=require("fs-extra"),Tr=require("path"),Dl=mr(),PO=G(),zt=dr().LMDB_ERRORS_ENUM,Ul=lO(),lh=wl(),vO=Ll(),Un=ze(),UO=b(),{table:ek,resetDatabases:tk}=(fe(),Z(Ce)),MO=X(),ls=Un.INTERNAL_DBIS_NAME,BO=Un.DBI_DEFINITION_NAME,rk="data.mdb",sk="lock.mdb",Va=".mdb",nk="-lock",ch=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Fr(t,r),this.key_type=this.dbi[Un.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Un.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new uh.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ml(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(Ml,"pathEnvNameValidation");async function _h(e,t,r=!0){try{await us.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Tr.join(e,t+Va);return await us.access(s,us.constants.R_OK|us.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await us.access(Tr.join(e,t,rk),us.constants.R_OK|us.constants.F_OK),Tr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(_h,"validateEnvironmentPath");function Pl(e,t){if(Dl.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(Pl,"validateEnvDBIName");async function ik(e,t,r=!1,s=!1){Ml(e,t);let n=Tr.basename(e);t=t.toString();let i=MO.get(UO.CONFIG_PARAMS.DATABASES);i||MO.setProperty(UO.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await _h(e,t,s),HO(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Tr.join(e,t);await us.mkdirp(s?c:e);let u=new vO(s?c:c+Va,!1),_=uh.open(u);_.dbis=Object.create(null);let l=new lh(!1);_.openDB(ls,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=dh(e,t,r);return _[Un.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(ik,"createEnvironment");async function ok(e,t,r,s=!0){Ml(e,t),t=t.toString();let n=Tr.join(e,t);return ek({table:t,database:Tr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(ok,"copyEnvironment");async function HO(e,t,r=!1){Ml(e,t),t=t.toString();let s=dh(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await _h(e,t),i=Tr.join(e,t+Va),o=n!=i,c=new vO(n,o),u=uh.open(c);u.dbis=Object.create(null);let _=qO(u);for(let l=0;l<_.length;l++)Fr(u,_[l]);return u[Un.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(HO,"openEnvironment");async function ak(e,t,r=!1){Ml(e,t),t=t.toString();let s=Tr.join(e,t+Va),n=await _h(e,t);if(global.lmdb_map!==void 0){let i=dh(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await FO(o),delete global.lmdb_map[i]}}await us.remove(n),await us.remove(n===s?n+nk:Tr.join(Tr.dirname(n),sk))}a(ak,"deleteEnvironment");async function FO(e){Dl.validateEnv(e);let t=e[Un.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(FO,"closeEnvironment");function dh(e,t,r=!1){let n=`${Tr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(dh,"getCachedEnvironmentName");function ck(e){Dl.validateEnv(e);let t=Object.create(null),r=Fr(e,ls);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ls)try{t[s]=Object.assign(new Ul,n)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(ck,"listDBIDefinitions");function qO(e){Dl.validateEnv(e);let t=[],r=Fr(e,ls);for(let{key:s}of r.getRange({start:!1}))s!==ls&&t.push(s);return t}a(qO,"listDBIs");function uk(e,t){let s=Fr(e,ls).getEntry(t),n=new Ul;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{PO.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(uk,"getDBIDefinition");function GO(e,t,r,s=!r){if(Pl(e,t),t=t.toString(),t===ls)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Fr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new lh(r,s===!0),o=e.openDB(t,i),c=new Ul(r===!0,s);return o[BO]=c,Fr(e,ls).putSync(t,c),e.dbis[t]=o,o}throw n}}a(GO,"createDBI");function Fr(e,t){if(Pl(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ls?r=uk(e,t):r=new Ul,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new lh(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(zt.DBI_DOES_NOT_EXIST):n}return s[BO]=r,e.dbis[t]=s,s}a(Fr,"openDBI");function lk(e,t){Pl(e,t),t=t.toString();let r=Fr(e,t),s=r.getStats();return r[Un.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(lk,"statDBI");async function _k(e,t){try{let r=Tr.join(e,t+Va);return(await us.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(_k,"environmentDataSize");function dk(e,t){if(Pl(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(dk,"dropDBI");function fk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Fr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)GO(e,i,i!==t,i===t),s=!0;else throw o}}s&&tk()}a(fk,"initializeDBIs");xO.exports={openDBI:Fr,openEnvironment:HO,createEnvironment:ik,listDBIs:qO,listDBIDefinitions:ck,createDBI:GO,dropDBI:dk,statDBI:lk,deleteEnvironment:ak,initializeDBIs:fk,TransactionCursor:ch,environmentDataSize:_k,copyEnvironment:ok,closeEnvironment:FO}});var VO=T((Ine,kO)=>{"use strict";var fh=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};kO.exports=fh});var YO=T((Cne,$O)=>{"use strict";var Eh=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};$O.exports=Eh});var WO=T((Dne,KO)=>{"use strict";var hh=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};KO.exports=hh});var uo=T((Bne,JO)=>{"use strict";var Ek=Ue(),hk=VO(),mk=YO(),pk=WO(),Ls=mr(),$a=dr().LMDB_ERRORS_ENUM,Sk=ze(),tn=b(),Tk=$(),Rk=require("uuid"),Mne=require("lmdb"),{handleHDBError:gk,hdb_errors:Ak}=j(),{OVERFLOW_MARKER:Pne,MAX_SEARCH_KEY_LENGTH:vne}=Sk,QO=X();QO.initSync();var vl=QO.get(tn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),mh=tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Ei=tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Ok(e,t,r,s,n=Ls.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new hk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];zO(_,!0,n);let l=Nk(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Sh(o,c,s,i,n)}a(Ok,"insertRecords");function Nk(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][tn.FUNC_VAL],s[o]=c)}let u=Ls.getIndexedValues(c),_=e.dbis[o];if(u){vl&&_.prefetch(u.map(l=>({key:l,value:n})),Bl);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}vl&&e.dbis[t].prefetch([n],Bl),e.dbis[t].put(n,s,s[Ei])})}a(Nk,"insertRecord");function bk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(bk,"removeSkippedRecords");function zO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Ei]))&&(e[Ei]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[mh]))&&(e[mh]=r||Ls.getNextMonotonicTime()):delete e[mh]}a(zO,"setTimestamps");function ph(e,t,r){r.indexOf(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(tn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Ek.initializeDBIs(e,t,r)}a(ph,"initializeTransaction");async function yk(e,t,r,s,n=Ls.getNextMonotonicTime()){Rh(e,t,r,s),ph(e,t,r);let i=new mk,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Th(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Sh(c,u,s,i,n,o)}a(yk,"updateRecords");async function Ik(e,t,r,s,n=Ls.getNextMonotonicTime()){try{Rh(e,t,r,s)}catch(u){throw gk(u,u.message,Ak.HTTP_STATUS_CODES.BAD_REQUEST)}ph(e,t,r);let i=new pk,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;Tk.isEmpty(_[t])?(l=Rk.v4(),_[t]=l):l=_[t];let d=Th(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Sh(o,c,s,i,n)}a(Ik,"upsertRecords");async function Sh(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||Ls.getNextMonotonicTime(),bk(r,i),s}a(Sh,"finalizeWrite");function Th(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(zO(r,!l,o),Number.isInteger(r[Ei])&&_[Ei]>r[Ei])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof p=="function"){let N=p([[_]]);Array.isArray(N)&&(p=N[0][tn.FUNC_VAL],r[h]=p)}if(p===A)continue;let I=Ls.getIndexedValues(A);if(I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);for(let N=0,Y=I.length;N<Y;N++)S.remove(I[N],s)}if(I=Ls.getIndexedValues(p),I){vl&&S.prefetch(I.map(N=>({key:N,value:s})),Bl);for(let N=0,Y=I.length;N<Y;N++)S.put(I[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Ei])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Th(e,t,r,s,n,i,o))}a(Th,"updateUpsertRecord");function wk(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error($a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error($a.WRITE_ATTRIBUTES_REQUIRED):new Error($a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(wk,"validateBasic");function Rh(e,t,r,s){if(wk(e,t,r),!Array.isArray(s))throw s===void 0?new Error($a.RECORDS_REQUIRED):new Error($a.RECORDS_MUST_BE_ARRAY)}a(Rh,"validateWrite");function Bl(){}a(Bl,"noop");JO.exports={insertRecords:Ok,updateRecords:yk,upsertRecords:Ik}});var hi=T((Fne,Ck)=>{Ck.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metric"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=T((qne,ZO)=>{"use strict";var jO=$(),XO=b(),lo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,rn=require("joi"),Mn={schema_format:{pattern:lo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Lk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required(),Dk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()),Uk=rn.alternatives(rn.string().min(1).max(Mn.schema_length.maximum).pattern(lo).messages({"string.pattern.base":"{:#label} "+Mn.schema_format.message}),rn.number()).required();function Mk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mn.schema_length.maximum?`'${e}' maximum of 250 characters`:lo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Mk,"checkValidTable");function Pk(e,t){return jO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Pk,"validateSchemaExists");function vk(e,t){let r=t.state.ancestors[0].schema;return jO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(vk,"validateTableExists");function Bk(e,t){return e.toLowerCase()===XO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${XO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Bk,"validateSchemaName");ZO.exports={common_validators:Mn,schema_regex:lo,hdb_schema_table:Lk,validateSchemaExists:Pk,validateTableExists:vk,validateSchemaName:Bk,checkValidTable:Mk,hdb_database:Dk,hdb_table:Uk}});var Hl=T((xne,eN)=>{var{common_validators:Us}=Ds(),Ka=qe(),Ya="is required",tt={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function Wa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Wa,"makeAttributesStrings");function Hk(e){return e=Wa(e),tt.table.presence=!1,tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Hk,"schema_object");function Fk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Fk,"table_object");function qk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,Ka.validateObject(e,tt)}a(qk,"create_table_object");function Gk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence={message:Ya},tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(Gk,"attribute_object");function xk(e){return e=Wa(e),tt.table.presence={message:Ya},tt.attribute.presence=!1,tt.hash_attribute.presence=!1,Ka.validateObject(e,tt)}a(xk,"describe_table");function kk(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(kk,"validateTableResidence");eN.exports={schema_object:Hk,create_table_object:qk,table_object:Fk,attribute_object:Gk,describe_table:xk,validateTableResidence:kk}});var rN=T((Vne,tN)=>{"use strict";var Vk=require("uuid"),gh=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Vk.v4(),this.schema_table=`${this.schema}.${this.table}`}};tN.exports=gh});var Fl=T((Yne,sN)=>{"use strict";var $k=rN(),Ah=class extends $k{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};sN.exports=Ah});var iN=T((Wne,nN)=>{"use strict";nN.exports=Kk;var Yk="inserted";function Kk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Yk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Kk,"returnObject")});var ql=T((zne,lN)=>{"use strict";var Wk=b(),Oh=Ue(),Qk=uo(),{getSystemSchemaPath:zk,getSchemaPath:Jk}=ve(),Xk=hi(),jk=Hl(),Zk=Fl(),eV=iN(),{handleHDBError:oN,hdb_errors:cN}=j(),aN=$(),{HTTP_STATUS_CODES:tV}=cN,Nh=Xk.hdb_attribute,uN=[];for(let e=0;e<Nh.attributes.length;e++)uN.push(Nh.attributes[e].attribute);var rV="inserted";lN.exports=sV;async function sV(e){let t=jk.attribute_object(e);if(t)throw oN(new Error,t.message,cN.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&aN.checkGlobalSchemaTable(e.schema,e.table);if(r)throw oN(new Error,r,tV.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=aN.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new Zk(e.schema,e.table,e.attribute,e.id);try{let i=await Oh.openEnvironment(Jk(e.schema,e.table),e.table);if(i.dbis[e.attribute]!==void 0)throw new Error(`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`);Oh.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Oh.openEnvironment(zk(),Wk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Qk.insertRecords(o,Nh.hash_attribute,uN,[n]);return eV(rV,c,{records:[n]},u)}catch(i){throw i}}a(sV,"lmdbCreateAttribute")});var yh=T((Xne,dN)=>{var{hdb_table:nV,hdb_database:_N}=Ds(),iV=qe(),bh=require("joi"),oV={undefined:"undefined",null:"null"},aV=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||oV[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),cV=bh.object({database:_N,schema:_N,table:nV,records:bh.array().items(bh.object().custom(aV)).required()});dN.exports=function(e){return iV.validateBySchema(e,cV)}});var Qa=T((eie,EN)=>{"use strict";var sn=$(),fN=G(),Zne=yh(),{getDatabases:uV}=(fe(),Z(Ce)),{ClientError:mi}=j();EN.exports=lV;function lV(e){if(sn.isEmpty(e))throw new mi("invalid update parameters defined.");if(sn.isEmptyOrZeroLength(e.schema))throw new mi("invalid schema specified.");if(sn.isEmptyOrZeroLength(e.table))throw new mi("invalid table specified.");if(!Array.isArray(e.records))throw new mi("records must be an array");let t=uV()[e.schema]?.[e.table];if(sn.isEmpty(t))throw new mi(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&sn.isEmptyOrZeroLength(o[r]))throw fN.error("a valid hash attribute must be provided with update record:",o),new mi("a valid hash attribute must be provided with update record, check log for more info");if(!sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw fN.error(`a valid hash value must be provided with ${e.operation} record:`,o),new mi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!sn.isEmpty(o[r])&&o[r]!==""&&s.has(sn.autoCast(o[r]))&&(o.skip=!0),s.add(sn.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(lV,"insertUpdateValidate")});var za=T((rie,hN)=>{"use strict";var _V=b().OPERATIONS_ENUM,Ih=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=_V.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};hN.exports=Ih});var Za=T((iie,mN)=>{"use strict";var nie=za(),Gl=b(),Ch=$(),wh=G(),dV=require("uuid"),{handleHDBError:Ja,hdb_errors:fV}=j(),{HDB_ERROR_MSGS:Xa,HTTP_STATUS_CODES:ja}=fV;mN.exports=EV;function EV(e,t,r){for(let n=0;n<t.length;n++)hV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];mV(i,r,e.operation)}}a(EV,"processRows");function hV(e){if(Buffer.byteLength(String(e))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ja(new Error,Xa.ATTR_NAME_LENGTH_ERR(e),ja.BAD_REQUEST,void 0,void 0,!0);if(Ch.isEmptyOrZeroLength(e)||Ch.isEmpty(e.trim()))throw Ja(new Error,Xa.ATTR_NAME_NULLISH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(hV,"validateAttribute");function mV(e,t,r){if(!e.hasOwnProperty(t)||Ch.isEmptyOrZeroLength(e[t])){if(r===Gl.OPERATIONS_ENUM.INSERT||r===Gl.OPERATIONS_ENUM.UPSERT){e[t]=dV.v4();return}throw wh.error("Update transaction aborted due to record with no hash value:",e),Ja(new Error,Xa.RECORD_MISSING_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw wh.error(e),Ja(new Error,Xa.HASH_VAL_LENGTH_ERR,ja.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw wh.error(e),Ja(new Error,Xa.INVALID_FORWARD_SLASH_IN_HASH_ERR,ja.BAD_REQUEST,void 0,void 0,!0)}a(mV,"validateHash")});var SN=T((aie,pN)=>{"use strict";var Lh=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};pN.exports=Lh});var gN=T((uie,RN)=>{"use strict";var Dh=Ue(),pV=G(),TN=dr().LMDB_ERRORS_ENUM;RN.exports=SV;async function SV(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Dh.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==TN.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Dh.closeEnvironment(global.lmdb_map[s]),await Dh.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==TN.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){pV.error(t)}}a(SV,"cleanLMDBMap")});var nn=T((_ie,bN)=>{"use strict";var ec=require("crypto"),TV=X(),{CONFIG_PARAMS:RV}=b(),ON="aes-256-cbc",gV=32,AV=16,Uh=64,NN=32,OV=Uh+NN,AN=new Map;bN.exports={encrypt:NV,decrypt:bV,createNatsTableStreamName:yV};function NV(e){let t=ec.randomBytes(gV),r=ec.randomBytes(AV),s=ec.createCipheriv(ON,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(NV,"encrypt");function bV(e){let t=e.substr(0,Uh),r=e.substr(Uh,NN),s=e.substr(OV,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ec.createDecipheriv(ON,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(bV,"decrypt");function yV(e,t){let r=TV.get(RV.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=AN.get(r);return s||(s=ec.createHash("md5").update(r).digest("hex"),AN.set(r,s)),s}a(yV,"createNatsTableStreamName")});var pi=T((Eie,IN)=>{"use strict";var fie=qr(),xl=G(),yN=Hl(),IV=nn(),kl=$(),{handleHDBError:Vl,hdb_errors:wV}=j(),{HDB_ERROR_MSGS:$l,HTTP_STATUS_CODES:Mh}=wV,CV=X();CV.initSync();var{getDatabases:Ph}=(fe(),Z(Ce));IN.exports={describeAll:LV,describeTable:Yl,describeSchema:DV};async function LV(e){try{let t=kl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Ph(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await Yl({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await Yl({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){xl.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return xl.error("Got an error in describeAll"),xl.error(t),Vl(new Error,$l.DESCRIBE_ALL_ERR)}}a(LV,"describeAll");async function Yl(e,t){kl.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=yN.describe_table(e);if(i)throw i;let c=Ph()[r];if(!c)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let u=c[s];if(!u)throw Vl(new Error,$l.TABLE_NOT_FOUND(e.schema,e.table),Mh.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l};d.clustering_stream_name=IV.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){xl.warn(`unable to stat table dbi due to ${f}`)}return d}a(Yl,"descTable");async function DV(e){kl.transformReq(e);let t=yN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(r=e.hdb_user.role.permission[e.schema]);let s=e.schema.toString(),i=Ph()[s];if(!i)throw Vl(new Error,$l.SCHEMA_NOT_FOUND(e.schema),Mh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),kl.isEmpty(u)||u.describe){let _=await Yl({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(DV,"describeSchema")});var Pn=T((Sie,UN)=>{var UV=hi(),{callbackify:CN,promisify:MV}=require("util"),{getDatabases:LN}=(fe(),Z(Ce));UN.exports={setSchemaDataToGlobal:wN,getTableSchema:PV,getSystemSchema:vV,setSchemaDataToGlobalAsync:MV(wN)};var DN=pi(),mie=CN(DN.describeAll),pie=CN(DN.describeTable);function wN(e){global.hdb_schema=LN(),e&&e()}a(wN,"setSchemaDataToGlobal");function PV(e,t,r){let s=LN()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(PV,"getTableSchema");function vV(){return UV}a(vV,"getSystemSchema")});var Gr=T((Rie,BN)=>{"use strict";var Wl=yh(),bt=$(),BV=require("util"),Ql=_s(),HV=Pn(),MN=G(),{handleHDBError:Si,hdb_errors:FV}=j(),{HTTP_STATUS_CODES:Ti}=FV,qV=BV.promisify(HV.getTableSchema),GV="updated",PN="inserted",vN="upserted";BN.exports={insert:kV,update:VV,upsert:$V,validation:xV,flush:YV};async function xV(e){if(bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await qV(e.schema,e.table),r=Wl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&bt.isEmptyOrZeroLength(c[s]))throw MN.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw MN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!bt.isEmpty(c[s])&&c[s]!==""&&n.has(bt.autoCast(c[s]))&&(c.skip=!0),n.add(bt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(xV,"validation");async function kV(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.createRecords(e);return Kl(PN,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(kV,"insertData");async function VV(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.updateRecords(e);return bt.isEmpty(s.existing_rows)?Kl(GV,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Kl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(VV,"updateData");async function $V(e){if(e.operation!=="upsert")throw Si(new Error,"invalid operation, must be upsert",Ti.INTERNAL_SERVER_ERROR);let t=Wl(e);if(t)throw Si(new Error,t.message,Ti.BAD_REQUEST);bt.transformReq(e);let r=bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Si(new Error,r,Ti.BAD_REQUEST);let s=await Ql.upsertRecords(e);return Kl(vN,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a($V,"upsertData");function Kl(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===PN?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===vN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Kl,"returnObject");function YV(e){return bt.transformReq(e),Ql.flush(e.schema,e.table)}a(YV,"flush")});var Bh=T((Aie,qN)=>{var KV=qe(),vh=require("joi"),{hdb_table:WV,hdb_database:HN}=Ds(),FN={schema:HN,database:HN,table:WV},QV={date:vh.date().iso().required()},zV={timestamp:vh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};qN.exports=function(e,t){let r=t==="timestamp"?{...FN,...zV}:{...FN,...QV},s=vh.object(r);return KV.validateBySchema(e,s)}});var kN=T((Oie,xN)=>{var JV=qe(),Hh=require("joi"),{hdb_table:XV,hdb_database:GN}=Ds(),jV=Hh.object({schema:GN,database:GN,table:XV,hash_values:Hh.array().required(),ids:Hh.array()});xN.exports=function(e){return JV.validateBySchema(e,jV)}});var $N=T((Nie,VN)=>{"use strict";var Fh=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},qh=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},Gh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};VN.exports={InsertObject:Fh,NoSQLSeachObject:qh,DeleteResponseObject:Gh}});var Ai=T((yie,zN)=>{"use strict";var KN=Bh(),ZV=kN(),Ri=$(),YN=require("moment"),WN=G(),{promisify:e$,callbackify:t$}=require("util"),gi=b(),r$=Pn(),xh=e$(r$.getTableSchema),kh=_s(),{DeleteResponseObject:s$}=$N(),{handleHDBError:vn,hdb_errors:n$}=j(),{HDB_ERROR_MSGS:zl,HTTP_STATUS_CODES:Bn}=n$,i$="records successfully deleted",o$=t$(QN);zN.exports={delete:o$,deleteRecord:QN,deleteFilesBefore:a$,deleteAuditLogsBefore:c$};async function a$(e){let t=KN(e,"date");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),!YN(e.date,YN.ISO_8601).isValid())throw vn(new Error,zl.INVALID_DATE,Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_DATE,!0);let s=Ri.checkSchemaTableExist(e.schema,e.table);if(s)throw vn(new Error,s,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,s,!0);let n=await kh.deleteRecordsBefore(e);if(await xh(e.schema,e.table),WN.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(a$,"deleteFilesBefore");async function c$(e){let t=KN(e,"timestamp");if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);if(Ri.transformReq(e),isNaN(e.timestamp))throw vn(new Error,zl.INVALID_VALUE("Timestamp"),Bn.BAD_REQUEST,gi.LOG_LEVELS.ERROR,zl.INVALID_VALUE("Timestamp"),!0);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);let s=await kh.deleteAuditLogsBefore(e);return await xh(e.schema,e.table),WN.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(c$,"deleteAuditLogsBefore");async function QN(e){e.ids&&(e.hash_values=e.ids);let t=ZV(e);if(t)throw vn(t,t.message,Bn.BAD_REQUEST,void 0,void 0,!0);Ri.transformReq(e);let r=Ri.checkSchemaTableExist(e.schema,e.table);if(r)throw vn(new Error,r,Bn.NOT_FOUND,gi.LOG_LEVELS.ERROR,r,!0);try{await xh(e.schema,e.table);let s=await kh.deleteRecords(e);return Ri.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${i$}`),s}catch(s){if(s.message===gi.SEARCH_NOT_FOUND_MESSAGE){let n=new s$;return n.message=gi.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(QN,"deleteRecord")});var Jl=T((wie,jN)=>{var u$=require("crypto"),JN=9;function l$(e){let t=d$(JN),r=XN(e+t);return t+r}a(l$,"createHash");function _$(e,t){let r=e.substr(0,JN),s=r+XN(t+r);return e===s}a(_$,"validateHash");function d$(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(d$,"generateSalt");function XN(e){return u$.createHash("md5").update(e).digest("hex")}a(XN,"md5");jN.exports={hash:l$,validate:_$}});var eb=T((Lie,ZN)=>{var Vh=qe(),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 f$(e){return Ht.password.presence=!0,Ht.username.presence=!0,Ht.role.presence=!0,Ht.active.presence=!0,Vh.validateObject(e,Ht)}a(f$,"addUserValidation");function E$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Vh.validateObject(e,Ht)}a(E$,"alterUserValidation");function h$(e){return Ht.password.presence=!1,Ht.username.presence=!0,Ht.role.presence=!1,Ht.active.presence=!1,Vh.validateObject(e,Ht)}a(h$,"dropUserValidation");ZN.exports={addUserValidation:f$,alterUserValidation:E$,dropUserValidation:h$}});var ke=T((Mie,rb)=>{"use strict";var{platform:Uie}=require("os"),m$="nats-server.zip",$h="nats-server",p$=process.platform==="win32"?`${$h}.exe`:$h,Yh="HDB",S$=/^[^\s.,*>]+$/,tb="__request__",T$=a(e=>`${e}.${tb}`,"REQUEST_SUBJECT"),R$={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},g$={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},A$={HUB:"hub.pid",LEAF:"leaf.pid"},O$={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},N$={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Yh,deliver_subject:"__HDB__.WORKQUEUE"},b$={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Yh,deliver_subject:"HDB.SCHEMAQUEUE"},y$={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Yh,deliver_subject:"HDB.USERQUEUE"},I$={SUCCESS:"success",ERROR:"error"},w$={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},C$={TXN:"txn",MSGID:"msgid"},_o={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},L$={[_o.ERR]:1,[_o.WRN]:2,[_o.INF]:3,[_o.DBG]:4,[_o.TRC]:5},D$={debug:"-D",trace:"-DVV"};rb.exports={NATS_SERVER_ZIP:m$,NATS_SERVER_NAME:$h,NATS_BINARY_NAME:p$,PID_FILES:A$,NATS_CONFIG_FILES:g$,SERVER_SUFFIX:O$,WORK_QUEUE_CONSUMER_NAMES:N$,SCHEMA_QUEUE_CONSUMER_NAMES:b$,USER_QUEUE_CONSUMER_NAMES:y$,NATS_TERM_CONSTRAINTS_RX:S$,REQUEST_SUFFIX:tb,UPDATE_REMOTE_RESPONSE_STATUSES:I$,CLUSTER_STATUS_STATUSES:w$,REQUEST_SUBJECT:T$,SUBJECT_PREFIXES:C$,MSG_HEADERS:R$,LOG_LEVELS:_o,LOG_LEVEL_FLAGS:D$,LOG_LEVEL_HIERARCHY:L$}});var nb=T((vie,sb)=>{"use strict";var Xl=b(),jl=class{static{a(this,"BaseLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Kh=class extends jl{static{a(this,"ExtendedLicense")}constructor(t=0,r=Xl.RAM_ALLOCATION_ENUM.DEFAULT,s=Xl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};sb.exports={BaseLicense:jl,ExtendedLicense:Kh}});var tc=T((Hie,lb)=>{"use strict";var Eo=require("fs-extra"),ib=Jl(),ob=require("crypto"),U$=require("moment"),M$=require("uuid").v4,Ft=G(),Qh=require("path"),P$=$(),Hn=b(),v$=nb().ExtendedLicense,fo="invalid license key format",B$="061183",H$="mofi25",F$="aes-256-cbc",q$=16,G$=32,ab=X();ab.initSync();var Wh;lb.exports={validateLicense:cb,generateFingerPrint:k$,licenseSearch:ub,getLicense:Y$};function zh(){return Qh.join(ab.getHdbBasePath(),Hn.LICENSE_KEY_DIR_NAME,Hn.LICENSE_FILE_NAME)}a(zh,"getLicenseDirPath");function x$(){let e=zh();return Qh.join(e,Hn.LICENSE_FILE_NAME)}a(x$,"getLicenseFilePath");function Jh(){let e=zh();return Qh.join(e,Hn.REG_KEY_FILE_NAME)}a(Jh,"getFingerPrintFilePath");async function k$(){let e=Jh();try{return await Eo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await V$();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(k$,"generateFingerPrint");async function V$(){let e=M$(),t=ib.hash(e),r=Jh();try{await Eo.mkdirp(zh()),await Eo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(V$,"writeFingerprint");function cb(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hn.RAM_ALLOCATION_ENUM.DEFAULT,version:Hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Jh(),n=!1;try{n=Eo.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Eo.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(H$),c=o[1];c=Buffer.concat([Buffer.from(c)],q$);let u=Buffer.concat([Buffer.from(i)],G$),_=ob.createDecipheriv(F$,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let E=$$(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(fo),Ft.error(fo),new Error(fo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(fo),Ft.error(fo),new Error(fo)}else r.exp_date=l;r.exp_date<U$().valueOf()&&(r.valid_date=!1),ib.validate(o[1],`${B$}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||Ft.error("Invalid licence"),r}a(cb,"validateLicense");function $$(e,t){try{let r=ob.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a($$,"checkOldLicense");function ub(){let e=new v$,t=[];try{t=Eo.readFileSync(x$(),"utf-8").split(Hn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(P$.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=cb(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=Hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Wh=e,e}a(ub,"licenseSearch");async function Y$(){return Wh||await ub(),Wh}a(Y$,"getLicense")});var xr=T((kie,yb)=>{"use strict";var Eb="username is required",hb="nothing to update, must supply active, role or password to update",mb="password cannot be an empty string",pb="If role is specified, it cannot be empty.",Sb="active must be true or false";yb.exports={addUser:eY,alterUser:tY,dropUser:sY,getSuperUser:aY,userInfo:nY,listUsers:e_,listUsersExternal:iY,setUsersToGlobal:mo,findAndValidateUser:Nb,getClusterUser:cY,USERNAME_REQUIRED:Eb,ALTERUSER_NOTHING_TO_UPDATE:hb,EMPTY_PASSWORD:mb,EMPTY_ROLE:pb,ACTIVE_BOOLEAN:Sb};var Tb=Gr(),K$=Ai(),Zh=Jl(),Rb=eb(),gb=qr(),em=on(),Rr=$(),Ab=require("validate.js"),_e=G(),{promisify:W$}=require("util"),tm=nn(),_b=b(),db=ke(),Q$=hr(),qie=X(),Gie=tc(),z$=hi(),{table:xie}=(fe(),Z(Ce)),{handleHDBError:Ms,hdb_errors:J$}=j(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Xh,HDB_ERROR_MSGS:ho}=J$,{UserEventMsg:rm}=ds(),jh=require("lodash"),{server:sm}=(Mr(),Z(eo)),X$=G();sm.getUser=Nb;var Ob={username:!0,active:!0,role:!0,password:!0},fb=new Map,Zl=gb.searchByValue,j$=gb.searchByHash,Z$=W$(K$.delete);async function eY(e){let t=Ab.cleanAttributes(e,Ob),r=Rb.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await Zl(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw Ms(new Error,ho.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,ho.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await Tb.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await mo()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,ho.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],em.signalUserChange(new rm(process.pid)),`${c.username} successfully added`}a(eY,"addUser");async function tY(e){let t=Ab.cleanAttributes(e,Ob);if(Rr.isEmptyOrZeroLength(t.username))throw new Error(Eb);if(Rr.isEmptyOrZeroLength(t.password)&&Rr.isEmptyOrZeroLength(t.role)&&Rr.isEmptyOrZeroLength(t.active))throw new Error(hb);if(!Rr.isEmpty(t.password)&&Rr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mb);if(!Rr.isEmpty(t.active)&&!Rr.isBoolean(t.active))throw new Error(Sb);let r=rY(t.username);if(!Rr.isEmpty(t.password)&&!Rr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=tm.encrypt(t.password)),t.password=Zh.hash(t.password)),t.role==="")throw new Error(pb);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await Zl(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=ho.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ho.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),Ms(new Error,c,Ps.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await Tb.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await mo()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return em.signalUserChange(new rm(process.pid)),n}a(tY,"alterUser");function rY(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(rY,"isClusterUser");async function sY(e){try{let t=Rb.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Rr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,ho.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await Z$(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await mo()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return em.signalUserChange(new rm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(sY,"dropUser");async function nY(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=jh.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await j$(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(nY,"userInfo");async function iY(){let e;try{e=await e_()}catch(t){throw _e.error("Got an error listing users."),_e.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(iY,"listUsersExternal");async function e_(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Zl(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=jh.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await Zl(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=jh.cloneDeep(o),o.role=r[o.role],oY(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),Rr.errorizeMessage(e)}return null}a(e_,"listUsers");function oY(e){try{if(!e){_e.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(z$)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(oY,"appendSystemTablesToRole");async function mo(){try{let e=await e_();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(mo,"setUsersToGlobal");async function Nb(e,t,r=!0){global.hdb_users||await mo();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Xh.USER_INACTIVE,Ps.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(fb.get(t)===s.password)return n;if(Zh.validate(s.password,t))fb.set(t,s.password);else throw Ms(new Error,Xh.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(Nb,"findAndValidateUser");async function aY(){global.hdb_users||await mo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(aY,"getSuperUser");async function cY(){let e=await e_(),t=Q$.getConfigFromFile(_b.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Rr.isEmpty(r)&&r?.role?.role===_b.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=tm.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+db.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+db.SERVER_SUFFIX.ADMIN,r}a(cY,"getClusterUser");var bb=[];sm.invalidateUser=function(e){for(let t of bb)try{t(e)}catch(r){X$.error("Error invalidating user",r)}};sm.onInvalidatedUser=function(e){bb.push(e)}});var sc=T((Kie,Lb)=>{"use strict";var Oi=G(),gr=b(),uY=gN(),$ie=Pn(),Yie=pi(),lY=xr(),{validateEvent:Ib}=ds(),rc=_s(),_Y=require("process"),{resetDatabases:dY}=(fe(),Z(Ce)),fY={[gr.ITC_EVENT_TYPES.SCHEMA]:EY,[gr.ITC_EVENT_TYPES.USER]:Cb};async function EY(e){let t=Ib(e);if(t){Oi.error(t);return}Oi.trace("ITC schemaHandler received schema event:",e),await uY(e.message),await hY(e.message)}a(EY,"schemaHandler");async function hY(e){try{rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=dY();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Oi.error(t)}}a(hY,"syncSchemaMetadata");var wb=[];async function Cb(e){try{try{rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),rc.resetReadTxn(gr.SYSTEM_SCHEMA_NAME,gr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Oi.warn(r)}let t=Ib(e);if(t){Oi.error(t);return}Oi.trace(`ITC userHandler ${gr.HDB_ITC_CLIENT_PREFIX}${_Y.pid} received user event:`,e),await lY.setUsersToGlobal();for(let r of wb)r()}catch(t){Oi.error(t)}}a(Cb,"userHandler");Cb.addListener=function(e){wb.push(e)};Lb.exports=fY});var ds=T((jie,Ub)=>{"use strict";var Qie=G(),nm=$(),mY=b(),{ITC_ERRORS:nc}=dr(),{parentPort:zie,threadId:pY,isMainThread:SY,workerData:Jie}=require("worker_threads"),{onMessageFromWorkers:TY,broadcast:Xie,broadcastWithAcknowledgement:RY}=Ze();Ub.exports={sendItcEvent:gY,validateEvent:Db,SchemaEventMsg:AY,UserEventMsg:OY};var t_;TY(async(e,t)=>{t_=t_||sc(),Db(e),t_[e.type]&&await t_[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function gY(e){return!SY&&e.message&&(e.message.originator=pY),RY(e)}a(gY,"sendItcEvent");function Db(e){if(typeof e!="object")return nc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||nm.isEmpty(e.type))return nc.MISSING_TYPE;if(!e.hasOwnProperty("message")||nm.isEmpty(e.message))return nc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||nm.isEmpty(e.message.originator))return nc.MISSING_ORIGIN;if(mY.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return nc.INVALID_EVENT(e.type)}a(Db,"validateEvent");function AY(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(AY,"SchemaEventMsg");function OY(e){this.originator=e}a(OY,"UserEventMsg")});var on=T((toe,Bb)=>{"use strict";var Mb=b(),eoe=$(),r_=G(),Pb=SN(),po,{sendItcEvent:vb}=ds();function NY(e){try{r_.trace("signalSchemaChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.SCHEMA,e);return po.schema(t),vb(t)}catch(t){r_.error(t)}}a(NY,"signalSchemaChange");function bY(e){try{r_.trace("signalUserChange called with message:",e),po=po||sc();let t=new Pb(Mb.ITC_EVENT_TYPES.USER,e);return po.user(t),vb(t)}catch(t){r_.error(t)}}a(bY,"signalUserChange");Bb.exports={signalSchemaChange:NY,signalUserChange:bY}});var s_=T((soe,Fb)=>{"use strict";var Hb=$(),yY=b(),IY=G(),wY=ql(),CY=Fl(),LY=on(),{SchemaEventMsg:DY}=ds(),UY="already exists in";Fb.exports=MY;async function MY(e,t,r){if(Hb.isEmptyOrZeroLength(r))return r;let s=[];Hb.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await PY(e,t.schema,t.name,i)})),n}a(MY,"lmdbCheckForNewAttributes");async function PY(e,t,r,s){let n=new CY(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await vY(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(UY))IY.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(PY,"createNewAttribute");async function vY(e){let t;return t=await wY(e),LY.signalSchemaChange(new DY(process.pid,yY.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(vY,"createAttribute")});var So=T((ioe,qb)=>{"use strict";var im=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};qb.exports=im});var xb=T((aoe,Gb)=>{"use strict";var BY=So(),HY=b().OPERATIONS_ENUM,om=class extends BY{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(HY.INSERT,r,s,n,i),this.records=t}};Gb.exports=om});var Vb=T((uoe,kb)=>{"use strict";var FY=So(),qY=b().OPERATIONS_ENUM,am=class extends FY{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(qY.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};kb.exports=am});var Yb=T((_oe,$b)=>{"use strict";var GY=So(),xY=b().OPERATIONS_ENUM,cm=class extends GY{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(xY.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$b.exports=cm});var Wb=T((foe,Kb)=>{"use strict";var kY=So(),VY=b().OPERATIONS_ENUM,um=class extends kY{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(VY.DELETE,s,n,t,i),this.original_records=r}};Kb.exports=um});var ic=T((moe,Xb)=>{"use strict";var hoe=require("path"),Qb=Ue(),$Y=xb(),YY=Vb(),KY=Yb(),WY=Wb(),To=ze(),zb=$(),{CONFIG_PARAMS:QY}=b(),Jb=X();Jb.initSync();var n_=b().OPERATIONS_ENUM,{getTransactionAuditStorePath:zY}=ve();Xb.exports=JY;async function JY(e,t){if(Jb.get(QY.LOGGING_AUDITLOG)===!1)return;let r=zY(e.schema,e.table),s=await Qb.openEnvironment(r,e.table,!0),n=XY(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){Qb.initializeDBIs(s,To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,To.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),zb.isEmpty(n.user_name)||s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[To.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(JY,"writeTransaction");function XY(e,t){let r=zb.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===n_.INSERT)return new $Y(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPDATE)return new YY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.UPSERT)return new KY(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===n_.DELETE)return new WY(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(XY,"createTransactionObject")});var lm=T((Toe,jb)=>{"use strict";var jY=Qa(),Soe=za(),oc=b(),ZY=Za(),e1=uo().insertRecords,t1=Ue(),r1=G(),s1=s_(),{getSchemaPath:n1}=ve(),i1=ic();jb.exports=o1;async function o1(e){try{let{schema_table:t,attributes:r}=jY(e);ZY(e,r,t.hash_attribute),e.schema!==oc.SYSTEM_SCHEMA_NAME&&(r.includes(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(oc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await s1(e.hdb_auth_header,t,r),n=n1(e.schema,e.table),i=await t1.openEnvironment(n,e.table),o=await e1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await i1(e,o)}catch(c){r1.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(o1,"lmdbCreateRecords")});var ty=T((goe,ey)=>{"use strict";var Zb=b(),a1=lm(),c1=za(),u1=require("fs-extra"),{getSchemaPath:l1}=ve();ey.exports=_1;async function _1(e){let t=[{name:e.schema,createddate:Date.now()}],r=new c1(Zb.SYSTEM_SCHEMA_NAME,Zb.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await a1(r),await u1.mkdirp(l1(e.schema))}a(_1,"lmdbCreateSchema")});var sy=T((Ooe,ry)=>{"use strict";var _m=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};ry.exports=_m});var ay=T((woe,oy)=>{"use strict";var ny=Ue(),dm=mr(),fm=dr().LMDB_ERRORS_ENUM,d1=ze(),iy=G(),boe=$(),f1=require("lmdb"),E1=sy(),h1=b(),{OVERFLOW_MARKER:yoe,MAX_SEARCH_KEY_LENGTH:Ioe}=d1,m1=h1.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function p1(e,t,r,s){if(dm.validateEnv(e),t===void 0)throw new Error(fm.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fm.IDS_REQUIRED):new Error(fm.IDS_MUST_BE_ITERABLE);try{let n=ny.listDBIs(e);ny.initializeDBIs(e,t,n);let i=new E1,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[m1]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,f1.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let I=e.dbis[A],N=h[A];if(N!=null)try{let Y=dm.getIndexedValues(N);if(Y)for(let Q=0,q=Y.length;Q<q;Q++)I.remove(Y[Q],o)}catch{iy.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){iy.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=dm.getNextMonotonicTime(),i}catch(n){throw n}}a(p1,"deleteRecords");oy.exports={deleteRecords:p1}});var ac=T((Loe,uy)=>{"use strict";var Ro=$(),S1=ay(),T1=Ue(),{getSchemaPath:R1}=ve(),g1=ic(),A1=G();uy.exports=O1;async function O1(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ro.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ro.isEmptyOrZeroLength(e.hash_values)&&!Ro.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ro.isEmpty(u)||e.hash_values.push(u)}}if(Ro.isEmptyOrZeroLength(e.hash_values))return cy([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ro.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=R1(e.schema,e.table),i=await T1.openEnvironment(n,e.table),o=await S1.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await g1(e,o)}catch(c){A1.error(`unable to write transaction due to ${c.message}`)}return cy(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(O1,"lmdbDeleteRecords");function cy(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(cy,"createDeleteResponse")});var hm=T((Moe,ly)=>{"use strict";var N1=b(),Uoe=mr();function Em(e,t){let r=Object.create(null);if(t.length===1&&N1.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(Em,"parseRow");function b1(e,t,r,s){let n=Em(r,e);s.push(n)}a(b1,"searchAll");function y1(e,t,r,s){let n=Em(r,e);s[t]=n}a(y1,"searchAllToMap");function I1(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(I1,"iterateDBI");function Ni(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Ni,"pushResults");function w1(e,t,r,s,n,i){t.toString().endsWith(e)&&Ni(t,r,s,n,i)}a(w1,"endsWith");function C1(e,t,r,s,n,i){t.toString().includes(e)&&Ni(t,r,s,n,i)}a(C1,"contains");function L1(e,t,r,s,n,i){t>e&&Ni(t,r,s,n,i)}a(L1,"greaterThanCompare");function D1(e,t,r,s,n,i){t>=e&&Ni(t,r,s,n,i)}a(D1,"greaterThanEqualCompare");function U1(e,t,r,s,n,i){t<e&&Ni(t,r,s,n,i)}a(U1,"lessThanCompare");function M1(e,t,r,s,n,i){t<=e&&Ni(t,r,s,n,i)}a(M1,"lessThanEqualCompare");ly.exports={parseRow:Em,searchAll:b1,searchAllToMap:y1,iterateDBI:I1,endsWith:w1,contains:C1,greaterThanCompare:L1,greaterThanEqualCompare:D1,lessThanCompare:U1,lessThanEqualCompare:M1,pushResults:Ni}});var go=T((Foe,py)=>{"use strict";var Fn=Ue(),voe=G(),Ar=mr(),i_=ze(),Je=dr().LMDB_ERRORS_ENUM,Boe=$(),P1=b(),o_=hm(),{parseRow:v1}=o_,Hoe=require("lmdb"),{OVERFLOW_MARKER:_y,MAX_SEARCH_KEY_LENGTH:B1}=i_;function dy(e,t,r,s=!1,n=void 0,i=void 0){return bi(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(dy,"iterateFullIndex");function cc(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return bi(e,t,r,(l,d,f,E)=>{let I={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(I.values=!1,d.getRange(I).map(N=>({value:N}))):d.getRange(I)})}a(cc,"iterateRangeBetween");function bi(e,t,r,s){let n=e.database||e,i=Fn.openDBI(n,r);i[i_.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Fn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(bi,"setupTransaction");function fy(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(_y)){if(!n)if(r)n=Fn.openDBI(e,r);else{let u=Fn.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Fn.openDBI(e,u[_]),!n[i_.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(fy,"getOverflowCheck");function H1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return bi(e,t,t,(o,c,u)=>(a_(r),r=uc(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>v1(_.value,r))))}a(H1,"searchAll");function F1(e,t,r,s=!1,n=void 0,i=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);a_(r),r=uc(e.database||e,r);let o=new Map;for(let{key:c,value:u}of dy(e,t,t,s,n,i))o.set(c,o_.parseRow(u,r));return o}a(F1,"searchAllToMap");function q1(e,t,r=!1,s=void 0,n=void 0){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=dy(e,void 0,t,r,s,n),c=o.transaction,u=fy(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(q1,"iterateDBI");function G1(e,t){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);return Fn.statDBI(e,t).entryCount}a(G1,"countAll");function x1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,t,r,(c,u,_,l)=>(s=Ar.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(x1,"equals");function k1(e,t,r){return qn(e,t,r),Fn.openDBI(e,t).getValuesCount(r)}a(k1,"count");function V1(e,t,r,s,n=!1,i=void 0,o=void 0){return qn(e,r,s),bi(e,null,r,(c,u)=>{s=Ar.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(V1,"startsWith");function $1(e,t,r,s,n=!1,i=void 0,o=void 0){return Ey(e,t,r,s,n,i,o,!0)}a($1,"endsWith");function Ey(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return qn(e,r,s),bi(e,null,r,(u,_,l,d)=>{let f=fy(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(_y)?_.getValues(E,{transaction:u}).map(p=>{let S=f(E,p);if(c?S.endsWith(s):S.includes(s))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[i_.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ey,"contains");function Y1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!0,!1)}a(Y1,"greaterThan");function K1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),cc(e,t,r,s,u,n,i,o,!1,!1)}a(K1,"greaterThanEqual");function W1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!0)}a(W1,"lessThan");function Q1(e,t,r,s,n=!1,i=void 0,o=void 0){qn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),cc(e,t,r,u,s,n,i,o,!1,!1)}a(Q1,"lessThanEqual");function z1(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Ar.validateEnv(e),r===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Je.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Je.END_VALUE_REQUIRED);if(s=Ar.convertKeyValueToWrite(s),n=Ar.convertKeyValueToWrite(n),s>n)throw new Error(Je.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return cc(e,t,r,s,n,i,o,c)}a(z1,"between");function J1(e,t,r,s){Ar.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(a_(r),r=uc(n,r),s===void 0)throw new Error(Je.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=o_.parseRow(c,r)),o}a(J1,"searchByHash");function X1(e,t,r){Ar.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(X1,"checkHashExists");function j1(e,t,r,s,n=[]){return my(e,t,r,s,n),hy(e,t,r,s,n).map(i=>i[1])}a(j1,"batchSearchByHash");function Z1(e,t,r,s,n=[]){my(e,t,r,s,n);let i=new Map;for(let[o,c]of hy(e,t,r,s,n))i.set(o,c);return i}a(Z1,"batchSearchByHashToMap");function hy(e,t,r,s,n=[]){return bi(e,t,t,(i,o,c)=>{r=uc(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,o_.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(hy,"batchHashSearch");function my(e,t,r,s,n){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.HASH_ATTRIBUTE_REQUIRED);if(a_(r),s==null)throw new Error(Je.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Je.IDS_MUST_BE_ITERABLE)}a(my,"initializeBatchSearchByHash");function a_(e){if(!Array.isArray(e))throw e===void 0?new Error(Je.FETCH_ATTRIBUTES_REQUIRED):new Error(Je.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(a_,"validateFetchAttributes");function qn(e,t,r){if(Ar.validateEnv(e),t===void 0)throw new Error(Je.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Je.SEARCH_VALUE_REQUIRED);if(r?.length>B1)throw new Error(Je.SEARCH_VALUE_TOO_LARGE)}a(qn,"validateComparisonFunctions");function uc(e,t){return t.length===1&&P1.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Fn.listDBIs(e)),t}a(uc,"setGetWholeRowAttributes");py.exports={searchAll:H1,searchAllToMap:F1,count:k1,countAll:G1,equals:x1,startsWith:V1,endsWith:$1,contains:Ey,searchByHash:J1,setGetWholeRowAttributes:uc,batchSearchByHash:j1,batchSearchByHashToMap:Z1,checkHashExists:X1,iterateDBI:q1,greaterThan:Y1,greaterThanEqual:K1,lessThan:W1,lessThanEqual:Q1,between:z1}});var Ao=T((Goe,Ay)=>{var Sy=require("lodash"),Ty=qe(),Be=require("joi"),eK=$(),{hdb_schema_table:c_,checkValidTable:Ry,hdb_table:gy,hdb_database:u_}=Ds(),{handleHDBError:tK,hdb_errors:rK}=j(),{getDatabases:sK}=(fe(),Z(Ce)),{HTTP_STATUS_CODES:nK}=rK,iK=Be.object({database:u_,schema:u_,table:gy,search_attribute:c_,search_value:Be.any().required(),get_attributes:Be.array().min(1).items(c_).optional(),desc:Be.bool(),limit:Be.number().integer().min(1),offset:Be.number().integer().min(0)}),oK=Be.object({database:u_,schema:u_,table:gy,operator:Be.string().valid("and","or").default("and").lowercase(),offset:Be.number().integer().min(0),limit:Be.number().integer().min(1),get_attributes:Be.array().min(1).items(c_).optional(),conditions:Be.array().min(1).items(Be.object({search_attribute:c_,search_type:Be.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Be.when("search_type",{switch:[{is:"equals",then:Be.any()},{is:"between",then:Be.array().items(Be.alternatives([Be.string(),Be.number()])).length(2)}],otherwise:Be.alternatives(Be.string(),Be.number())}).required()})).required()});Ay.exports=function(e,t){let r=null;switch(t){case"value":r=Ty.validateBySchema(e,iK);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Ry("database",e.schema)),i(Ry("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),n&&(r=new Error(n.trim()));break;case"conditions":r=Ty.validateBySchema(e,oK);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=eK.checkGlobalSchemaTable(e.schema,e.table);if(n)return tK(new Error,n,nK.NOT_FOUND);let o=sK()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=Sy.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Sy.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var mm=T((koe,Oy)=>{"use strict";var aK=Ue(),cK=Ao(),{getSchemaPath:uK}=ve();Oy.exports=lK;function lK(e){let t=cK(e,"hashes");if(t)throw t;let r=uK(e.schema,e.table);return aK.openEnvironment(r,e.table)}a(lK,"initialize")});var pm=T(($oe,Ny)=>{"use strict";var _K=go(),dK=mm();Ny.exports=fK;async function fK(e){let t=await dK(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return _K.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(fK,"lmdbGetDataByHash")});var Oo=T((Koe,by)=>{"use strict";var Sm=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};by.exports=Sm});var Iy=T((zoe,yy)=>{"use strict";var Qoe=Oo(),EK=go(),hK=mm();yy.exports=mK;async function mK(e){let t=await hK(e),r=global.hdb_schema[e.schema][e.table];return EK.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(mK,"lmdbSearchByHash")});var vs=T((Xoe,wy)=>{"use strict";var Tm=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};wy.exports=Tm});var l_=T((Zoe,Py)=>{"use strict";var qt=go(),pK=Ue(),SK=$(),ae=ze(),yi=b(),TK=hi(),Cy=dr().LMDB_ERRORS_ENUM,{getSchemaPath:RK}=ve(),an=yi.SEARCH_WILDCARDS;async function gK(e,t,r){let s;e.schema===yi.SYSTEM_SCHEMA_NAME?s=TK[e.table]:s=global.hdb_schema[e.schema][e.table];let n=My(e,s.hash_attribute,r,t);return Dy(e,n,s.hash_attribute,r)}a(gK,"prepSearch");async function Dy(e,t,r,s){let n=RK(e.schema,e.table),i=await pK.openEnvironment(n,e.table),o=Uy(i,e,t,r),c=o.transaction||i;if([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(AK(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Ly(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Ly(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?qt.batchSearchByHashToMap(c,r,e.get_attributes,_):qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Dy,"executeSearch");function Uy(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=qt.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=qt.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=qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return qt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=qt.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=qt.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=qt.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=qt.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=qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Uy,"searchByType");function Ly(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Ly,"createMapFromIterable");function AK(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(AK,"checkToFetchMore");function My(e,t,r,s){if(SK.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),an.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(an[0])<0&&n.indexOf(an[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(an.indexOf(i)>=0&&an.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(an.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(an.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(an[0])||n.includes(an[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(Cy.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(Cy.UNKNOWN_SEARCH_TYPE)}}a(My,"createSearchTypeFromSearchObject");Py.exports={executeSearch:Dy,createSearchTypeFromSearchObject:My,prepSearch:gK,searchByType:Uy}});var By=T((rae,vy)=>{"use strict";var tae=vs(),OK=Ao(),NK=$(),bK=b(),yK=l_();vy.exports=IK;function IK(e,t){if(!NK.isEmpty(t)&&bK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OK(e,"value");if(s)throw s;let n=!0;return yK.prepSearch(e,t,n)}a(IK,"lmdbGetDataByValue")});var lc=T((iae,Hy)=>{"use strict";var nae=vs(),wK=Ao(),CK=$(),LK=b(),DK=l_();Hy.exports=UK;async function UK(e,t){if(!CK.isEmpty(t)&&LK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=wK(e,"value");if(s)throw s;return DK.prepSearch(e,t,!1)}a(UK,"lmdbSearchByValue")});var qy=T((cae,Fy)=>{"use strict";var aae=ze(),Rm=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},gm=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Am=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Fy.exports={SearchByConditionsObject:Rm,SearchCondition:gm,SortAttribute:Am}});var $y=T((dae,Vy)=>{"use strict";var lae=qy().SearchByConditionsObject,MK=vs(),PK=Ao(),Om=go(),__=ze(),{Resource:_ae}=(as(),Z(CE)),ky=l_(),vK=hm(),BK=require("lodash"),{getSchemaPath:HK}=ve(),Gy=Ue(),{handleHDBError:FK,hdb_errors:qK}=j(),{HTTP_STATUS_CODES:GK}=qK,xK=1e8;Vy.exports=kK;async function kK(e){let t=PK(e,"conditions");if(t)throw FK(t,t.message,GK.BAD_REQUEST,void 0,void 0,!0);e.operator=e.operator?e.operator.toLowerCase():void 0,e.offset=Number.isInteger(e.offset)?e.offset:0;let r=HK(e.schema,e.table),s=await Gy.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Gy.openDBI(s,_.search_attribute);let i=BK.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===__.SEARCH_TYPES.EQUALS?_.estimated_count=Om.count(s,_.search_attribute,_.search_value):l===__.SEARCH_TYPES.CONTAINS||l===__.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=xK}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await xy(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(ky.filterByType),d=l.length,f=Om.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(E=>vK.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await xy(o,e,f,n.hash_attribute);c=c.concat(E)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Om.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(kK,"lmdbSearchByConditions");async function xy(e,t,r,s){let n=new MK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===__.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,ky.searchByType(e,n,i,s).map(o=>o.value)}a(xy,"executeConditionSearch")});var _c=T((Eae,Yy)=>{"use strict";var VK=b().OPERATIONS_ENUM,Nm=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=VK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Yy.exports=Nm});var bm=T((mae,Zy)=>{"use strict";var zy=vs(),Jy=_c(),Xy=lc(),jy=ac(),Jt=b(),Ky=$(),Wy=Ue(),{getTransactionAuditStorePath:$K,getSchemaPath:YK}=ve(),Qy=G();Zy.exports=KK;async function KK(e){try{if(Ky.isEmpty(global.hdb_schema[e.schema])||Ky.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await WK(e),await QK(e);let t=YK(e.schema,e.table);try{await Wy.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=$K(e.schema,e.table);await Wy.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Qy.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(KK,"lmdbDropTable");async function WK(e){let t=new zy(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 Xy(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new Jy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jy(n)}a(WK,"deleteAttributesFromSystem");async function QK(e){let t=new zy(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 Xy(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new Jy(Jt.SYSTEM_SCHEMA_NAME,Jt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jy(n)}catch(i){throw i}}a(QK,"dropTableFromSystem")});var tI=T((Sae,eI)=>{"use strict";var zK=require("fs-extra"),JK=vs(),XK=Oo(),jK=_c(),ZK=bm(),eW=ac(),tW=pm(),rW=lc(),cn=b(),{getSchemaPath:sW}=ve(),{handleHDBError:nW,hdb_errors:iW}=j(),{HDB_ERROR_MSGS:oW,HTTP_STATUS_CODES:aW}=iW;eI.exports=cW;async function cW(e){let t;try{t=await uW(e.schema);let r=new JK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await rW(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await ZK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new jK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await eW(n);let i=sW(t);await zK.remove(i)}catch(r){throw r}}a(cW,"lmdbDropSchema");async function uW(e){let t=new XK(cn.SYSTEM_SCHEMA_NAME,cn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[cn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await tW(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw nW(new Error,oW.SCHEMA_NOT_FOUND(e),aW.NOT_FOUND,void 0,void 0,!0);return s}a(uW,"validateDropSchema")});var Im=T((Rae,rI)=>{"use strict";var ym=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};rI.exports=ym});var nI=T((Oae,sI)=>{"use strict";var lW=require("fs-extra"),d_=Ue(),{getTransactionAuditStorePath:_W}=ve(),wm=ze(),Aae=Im();sI.exports=dW;async function dW(e){let t;try{let r=_W(e.schema,e.table);await lW.mkdirp(r),t=await d_.createEnvironment(r,e.table,!0)}catch(r){throw r.message=`unable to create transactions audit environment for ${e.schema}.${e.table} due to: ${r.message}`,r}try{d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),d_.createDBI(t,wm.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(dW,"createTransactionsAuditEnvironment")});var cI=T((bae,aI)=>{"use strict";var Cm=b(),iI=Ue(),fW=uo(),{getSystemSchemaPath:EW,getSchemaPath:hW}=ve(),mW=hi(),pW=ql(),Lm=Fl(),SW=G(),TW=nI(),Um=mW.hdb_table,oI=[];for(let e=0;e<Um.attributes.length;e++)oI.push(Um.attributes[e].attribute);aI.exports=RW;async function RW(e,t){let r=hW(t.schema,t.table),s=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Lm(t.schema,t.table,Cm.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Lm(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await iI.createEnvironment(r,t.table),e!==void 0){let o=await iI.openEnvironment(EW(),Cm.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await fW.insertRecords(o,Um.hash_attribute,oI,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Dm(s),await Dm(n),await Dm(i)}await TW(t)}catch(o){throw o}}a(RW,"lmdbCreateTable");async function Dm(e){try{await pW(e)}catch(t){SW.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Dm,"createAttribute")});var lI=T((Iae,uI)=>{"use strict";var gW=Qa(),AW=Za(),OW=s_(),dc=b(),NW=uo().updateRecords,bW=Ue(),{getSchemaPath:yW}=ve(),IW=ic(),wW=G();uI.exports=CW;async function CW(e){try{let{schema_table:t,attributes:r}=gW(e);AW(e,r,t.hash_attribute),e.schema!==dc.SYSTEM_SCHEMA_NAME&&(r.includes(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(dc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await OW(e.hdb_auth_header,t,r),n=yW(e.schema,e.table),i=await bW.openEnvironment(n,e.table),o=await NW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await IW(e,o)}catch(c){wW.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(CW,"lmdbUpdateRecords")});var dI=T((Cae,_I)=>{"use strict";var LW=b().OPERATIONS_ENUM,Mm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=LW.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};_I.exports=Mm});var EI=T((Uae,fI)=>{"use strict";var Dae=dI(),DW=Qa(),UW=Za(),MW=s_(),fc=b(),PW=uo().upsertRecords,vW=Ue(),{getSchemaPath:BW}=ve(),HW=ic(),FW=G(),{handleHDBError:qW,hdb_errors:GW}=j();fI.exports=xW;async function xW(e){let t;try{t=DW(e)}catch(u){throw qW(u,u.message,GW.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;UW(e,s,r.hash_attribute),e.schema!==fc.SYSTEM_SCHEMA_NAME&&(s.includes(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(fc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await MW(e.hdb_auth_header,r,s),i=BW(e.schema,e.table),o=await vW.openEnvironment(i,e.table),c=await PW(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await HW(e,c)}catch(u){FW.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(xW,"lmdbUpsertRecords")});var mI=T((Pae,hI)=>{"use strict";var Pm=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};hI.exports=Pm});var SI=T((Bae,pI)=>{"use strict";var vm=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};pI.exports=vm});var gI=T((qae,RI)=>{"use strict";var Bm=Ue(),{getTransactionAuditStorePath:kW}=ve(),Fae=mI(),Ec=ze(),VW=$(),TI=SI(),$W=require("util").promisify,YW=$W(setTimeout),KW=1e4,WW=100;RI.exports=QW;async function QW(e){let t=kW(e.schema,e.table),r=await Bm.openEnvironment(t,e.table,!0),s=Bm.listDBIs(r);Bm.initializeDBIs(r,Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new TI;do n=await zW(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await YW(WW);while(n.transactions_deleted>0);return i}a(QW,"deleteAuditLogsBefore");async function zW(e,t){let r=new TI;try{let s=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];VW.isEmpty(c)||(n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ec.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>KW)break}return await n,r}catch(s){throw s}}a(zW,"deleteTransactions")});var OI=T((xae,AI)=>{"use strict";var Hm=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};AI.exports=Hm});var bI=T(($ae,NI)=>{"use strict";var JW=vs(),XW=_c(),Vae=OI(),Bs=b(),jW=$(),Fm=Ue(),ZW=hi(),eQ=lc(),tQ=ac(),{getSchemaPath:rQ}=ve();NI.exports=sQ;async function sQ(e,t=!0){let r;e.schema===Bs.SYSTEM_SCHEMA_NAME?r=ZW[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await iQ(e),n=rQ(e.schema,e.table),i=await Fm.openEnvironment(n,e.table);return t===!0&&await nQ(e,i,r.hash_attribute),Fm.dropDBI(i,e.attribute),s}a(sQ,"lmdbDropAttribute");async function nQ(e,t,r){let s=Fm.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(nQ,"removeAttributeFromAllObjects");async function iQ(e){let t=new JW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await eQ(t)).filter(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(jW.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[Bs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new XW(Bs.SYSTEM_SCHEMA_NAME,Bs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return tQ(i)}a(iQ,"dropAttributeFromSystem")});var DI=T((Wae,LI)=>{"use strict";var qm=Ue(),No=ze(),Kae=mr(),Gm=b(),yI=$(),{getTransactionAuditStorePath:oQ}=ve(),aQ=go(),f_=So(),cQ=G();LI.exports=uQ;async function uQ(e){let t=oQ(e.schema,e.table),r=await qm.openEnvironment(t,e.table,!0),s=qm.listDBIs(r);qm.initializeDBIs(r,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return II(r,e.search_values);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,_Q(r,e.search_values,n);case Gm.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return lQ(r,e.search_values);default:return II(r)}}a(uQ,"readAuditLog");function II(e,t=[0,Date.now()]){yI.isEmpty(t[0])&&(t[0]=0),yI.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new f_,n))}a(II,"searchTransactionsByTimestamp");function lQ(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,CI(e,i))}return Object.fromEntries(r)}a(lQ,"searchTransactionsByUsername");function _Q(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=aQ.equals(e,No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,No.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=CI(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);wI(u,"records",r,l,o),wI(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(_Q,"searchTransactionsByHashValues");function wI(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new f_(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new f_(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(wI,"loopRecords");function CI(e,t){let r=[];try{let s=e.dbis[No.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new f_,i);r.push(o)}}catch(i){cQ.warn(i)}return r}catch(s){throw s}}a(CI,"batchSearchTransactions")});var MI=T((Xae,UI)=>{"use strict";var{getSchemaPath:zae}=ve(),Jae=Ue(),{database:dQ}=(fe(),Z(Ce));UI.exports={writeTransaction:fQ};async function fQ(e,t,r){return dQ({database:e,table:t}).transaction(r)}a(fQ,"writeTransaction")});var HI=T((Zae,BI)=>{"use strict";var{getSchemaPath:PI}=ve(),vI=Ue();BI.exports={flush:EQ,resetReadTxn:hQ};async function EQ(e,t){return(await vI.openEnvironment(PI(e,t),t.toString())).flushed}a(EQ,"flush");async function hQ(e,t){try{(await vI.openEnvironment(PI(e,t),t.toString())).resetReadTxn()}catch{}}a(hQ,"resetReadTxn")});var xI=T((tce,GI)=>{"use strict";var{Readable:mQ}=require("stream"),{getDatabases:pQ}=(fe(),Z(Ce)),{readSync:SQ,openSync:TQ,createReadStream:FI}=require("fs"),{open:RQ}=require("lmdb"),qI=wl(),gQ=Ll(),{AUDIT_STORE_OPTIONS:AQ}=(io(),Z(AO)),{INTERNAL_DBIS_NAME:OQ,AUDIT_STORE_NAME:NQ}=ze();GI.exports=yQ;var xm=32768,bQ=100;async function yQ(e){let t=e.database||e.schema||"data",r=pQ()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=RQ({noSync:!0,maxDbs:gQ.MAX_DBS}),f,E=d.openDB(OQ,new qI(!1)),h=l.useReadTransaction(),p=0,S=a(async function(I,N){N.encoding="binary",N.encoder=void 0;let Y=d.openDB(I,N),Q=l.openDB(I,N);for(let{key:q,version:w,value:K}of Q.getRange({transaction:h,versions:Q.useVersions}))f=Y.put(q,K,w),p++%bQ===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:I,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(Y=>I.startsWith?.(Y+"/"))){E.put(I,N);let[,Y]=I.split("/"),Q=!Y,q=new qI(!Q,Q);await S(I,q)}e.include_audit&&await S(NQ,Object.assign({},AQ)),await f;let A=FI(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=TQ(o.path);return o.transaction(()=>{let _=Buffer.alloc(xm);SQ(c,_,0,xm),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=FI(null,{fd:c,start:xm}),f=new mQ.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(yQ,"getBackup")});var $I=T((sce,VI)=>{"use strict";var IQ=G(),{handleHDBError:wQ}=j(),CQ=cO(),LQ=ql(),DQ=lm(),UQ=ty(),MQ=ac(),PQ=pm(),vQ=Iy(),BQ=By(),HQ=lc(),FQ=$y(),qQ=tI(),GQ=cI(),xQ=lI(),kQ=EI(),VQ=gI(),$Q=bm(),YQ=bI(),KQ=DI(),WQ=MI(),kI=HI(),QQ=xI(),km=class extends CQ{static{a(this,"LMDBBridge")}async searchByConditions(t){return FQ(t)}async getDataByHash(t){return await PQ(t)}async searchByHash(t){return await vQ(t)}async getDataByValue(t,r){return await BQ(t,r)}async searchByValue(t){return await HQ(t)}async createSchema(t){return await UQ(t)}async dropSchema(t){return await qQ(t)}async createTable(t,r){return await GQ(t,r)}async dropTable(t){return await $Q(t)}async createAttribute(t){return await LQ(t)}async createRecords(t){return await DQ(t)}async updateRecords(t){return await xQ(t)}async upsertRecords(t){try{return await kQ(t)}catch(r){throw wQ(r,null,null,IQ.ERR,r)}}async deleteRecords(t){return await MQ(t)}async dropAttribute(t){return await YQ(t)}async deleteAuditLogsBefore(t){return await VQ(t)}async readAuditLog(t){return await KQ(t)}writeTransaction(t,r,s){return WQ.writeTransaction(t,r,s)}flush(t,r){return kI.flush(t,r)}resetReadTxn(t,r){return kI.resetReadTxn(t,r)}getBackup(t){return QQ(t)}};VI.exports=km});var ZI={};Qe(ZI,{ResourceBridge:()=>Ym});function Km({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function KI(e,t){let r=Hs(e),s=Km(e,r);if(!r)throw new Es.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;Ge(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:n,select:s},i);return l=l&&dl(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function Hs(e){let t=e.database||e.schema||JQ,r=hs()[t];if(!r)throw(0,Es.handleHDBError)(new Error,zQ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function WI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*QI(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var zI,E_,Es,JI,XI,ms,Vm,$m,jI,zQ,JQ,XQ,jQ,YI,Ym,ew=Te(()=>{"use strict";zI=D($I()),E_=D(Ao()),Es=D(j());fe();JI=D(Qa()),XI=D(Za()),ms=D(b()),Vm=D(on()),$m=D(ds()),jI=D($());di();fl();({HDB_ERROR_MSGS:zQ}=Es.hdb_errors),JQ="data",XQ=1e4,jQ=10,Ym=class extends zI.default{static{a(this,"ResourceBridge")}constructor(t){super(t),YI=this}async searchByConditions(t){let r=(0,E_.default)(t,"conditions");if(r)throw(0,Es.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Hs(t);if(!s)throw new Es.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Km(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Es.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}et({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Hs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Hs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){Hs(t).dropTable()}createSchema(t){return hc({database:t.schema,table:null}),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Wm(t.schema),Vm.signalSchemaChange(new $m.SchemaEventMsg(process.pid,ms.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,YI.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,JI.default)(t);(0,XI.default)(t,s,r.primaryKey);let n,i=hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Ge(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=dl(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=hs()[t.schema][t.table],s={user:t.hdb_user};return Ge(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return WI(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Es.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,jI.async_set_timeout)(jQ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%XQ===0&&await _();return u.length>0&&await _(),n?WI(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,E_.default)(t,"hashes");if(r)throw r;return KI(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of KI(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,E_.default)(t,"value");if(s)throw s;let n=Hs(t);if(!n)throw new Es.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===ms.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Km(t,n)})}async getDataByValue(t,r){let s=new Map,n=Hs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){Hs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Hs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Hs(t),s={};switch(t.search_type){case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of QI(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return QI(r,t.search_values?.[0],t.search_values?.[1])}}};a(Km,"getSelect");a(KI,"getRecords");a(Hs,"getTable");a(WI,"createDeleteResponse");a(QI,"groupRecordsInHistory")});var _s=T((uce,tw)=>{"use strict";var{ResourceBridge:ZQ}=(ew(),Z(ZI)),ez=X();ez.initSync();var h_;function tz(){return h_||(h_=new ZQ,h_)}a(tz,"getBridge");tw.exports=tz()});var iw=T((_ce,nw)=>{"use strict";var rw=require("lodash"),mc=require("mathjs"),rz=require("jsonata"),sw=$();nw.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?rw.uniqWith(e,rw.isEqual):e,searchJSON:sz,mad:pc.bind(null,mc.mad),mean:pc.bind(null,mc.mean),mode:pc.bind(null,mc.mode),prod:pc.bind(null,mc.prod),median:pc.bind(null,mc.median)};function pc(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(pc,"aggregateFunction");function sz(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(sw.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),sw.isEmpty(this.__ala__.res[r])){let s=rz(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(sz,"searchJSON")});var aw=T((fce,ow)=>{"use strict";var rt=require("moment"),Qm="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;ow.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(Qm),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(Qm),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(Qm)}});var _w=T((Ece,lw)=>{"use strict";var nz=require("@turf/area"),iz=require("@turf/length"),oz=require("@turf/circle"),az=require("@turf/difference"),cz=require("@turf/distance"),uz=require("@turf/boolean-contains"),lz=require("@turf/boolean-equal"),_z=require("@turf/boolean-disjoint"),dz=require("@turf/helpers"),cw=b(),de=$();lw.exports={geoArea:fz,geoLength:Ez,geoCircle:hz,geoDifference:mz,geoDistance:uw,geoNear:pz,geoContains:Sz,geoEqual:Tz,geoCrosses:Rz,geoConvert:gz};var zm="geo1 is required",Jm="geo2 is required";function fz(e){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),nz.default(e)}a(fz,"geoArea");function Ez(e,t){if(de.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),iz.default(e,{units:t||"kilometers"})}a(Ez,"geoLength");function hz(e,t,r){if(de.isEmpty(e))throw new Error("point is required");if(de.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),oz.default(e,t,{units:r||"kilometers"})}a(hz,"geoCircle");function mz(e,t){if(de.isEmpty(e))throw new Error("poly1 is required");if(de.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),az(e,t)}a(mz,"geoDifference");function uw(e,t,r){if(de.isEmpty(e))throw new Error("point1 is required");if(de.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),cz.default(e,t,{units:r||"kilometers"})}a(uw,"geoDistance");function pz(e,t,r,s){if(de.isEmpty(e))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 uw(e,t,s)<=r}a(pz,"geoNear");function Sz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),uz.default(e,t)}a(Sz,"geoContains");function Tz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),lz.default(e,t)}a(Tz,"geoEqual");function Rz(e,t){if(de.isEmpty(e))throw new Error(zm);if(de.isEmpty(e))throw new Error(Jm);return typeof e=="string"&&(e=de.autoCastJSON(e)),typeof t=="string"&&(t=de.autoCastJSON(t)),!_z.default(e,t)}a(Rz,"geoCrosses");function gz(e,t,r){if(de.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(de.isEmpty(t))throw new Error("geo_type is required");if(de.isEmpty(cw.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(cw.GEO_CONVERSION_ENUM).join(",")}`);return dz[t](e,r)}a(gz,"geoConvert")});var m_=T((mce,dw)=>{var Ii=iw(),Or=aw(),Fs=_w();dw.exports=e=>{e.aggr.mad=e.aggr.MAD=Ii.mad,e.aggr.mean=e.aggr.MEAN=Ii.mean,e.aggr.mode=e.aggr.MODE=Ii.mode,e.aggr.prod=e.aggr.PROD=Ii.prod,e.aggr.median=e.aggr.MEDIAN=Ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Or.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Or.current_time,e.fn.extract=e.fn.EXTRACT=Or.extract,e.fn.date=e.fn.DATE=Or.date,e.fn.date_format=e.fn.DATE_FORMAT=Or.date_format,e.fn.date_add=e.fn.DATE_ADD=Or.date_add,e.fn.date_sub=e.fn.DATE_SUB=Or.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Or.date_diff,e.fn.now=e.fn.NOW=Or.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Or.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Or.get_server_time,e.fn.getdate=e.fn.GETDATE=Or.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Or.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Fs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Fs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Fs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Fs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Fs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Fs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Fs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Fs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Fs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Fs.geoNear}});var mw=T((pce,hw)=>{"use strict";var Sc=require("lodash"),yt=require("alasql");yt.options.cache=!1;var Az=m_(),fw=require("clone"),p_=require("recursive-iterator"),re=G(),ie=$(),bo=_s(),Oz=b(),{hdb_errors:Nz}=j(),{getDatabases:Ew}=(fe(),Z(Ce)),bz="IS NULL",ps="There was a problem performing this search. Please check the logs and try again.";Az(yt);var Xm=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 p_(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(fw(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Sc.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=Ew()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){re.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new p_(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!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 p_(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ie.isEmpty(Oz.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&&Sc.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(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(fw(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(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(bz)>-1&&this.tables.forEach(n=>{let i={columnid:Ew()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Sc.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!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 bo.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),re.error(l),new Error(ps)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await bo.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,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 bo.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,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 bo.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,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=Sc.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=p.length;S<A;S++){let I=p[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[I]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new p_(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Sc.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw re.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),re.error(i),new Error(ps)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await bo.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let p=n.columns[h],S=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw re.error("Error thrown from getDataByHash function in SQLSearch class method getData."),re.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();re.trace(`Final SQL: ${n}`),s=await 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(Nz.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),re.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await bo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw re.error("There was an error when processing this SQL operation. Check your logs"),re.error(o),new Error(ps)}}return Object.values(Object.values(this.data)[0].__merged_data)}};hw.exports=Xm});var qr=T((Tce,pw)=>{"use strict";var yz=oO();pw.exports={searchByConditions:wz,searchByHash:Cz,searchByValue:Lz,search:Dz};var jm=_s(),{transformReq:Zm}=$(),Iz=mw();async function wz(e){return Zm(e),jm.searchByConditions(e)}a(wz,"searchByConditions");async function Cz(e){Zm(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jm.searchByHash(e))r&&t.push(r);return t}a(Cz,"searchByHash");async function Lz(e){Zm(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jm.searchByValue(e))t.push(r);return t}a(Lz,"searchByValue");function Dz(e,t){try{let r=new yz(e);r.validate(),new Iz(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(Dz,"search")});var S_=T((gce,Sw)=>{"use strict";var Uz=_s();Sw.exports={writeTransaction:Mz};function Mz(e,t,r){return Uz.writeTransaction(e,t,r)}a(Mz,"writeTransaction")});var Aw=T((Nce,gw)=>{"use strict";var Pz=qr(),vz=Pn(),Tw=G(),Bz=Gr(),Oce=S_(),Hz=require("clone"),tp=require("alasql"),Fz=m_(),Rw=require("util"),qz=Rw.promisify(vz.getTableSchema),Gz=Rw.promisify(Pz.search),xz=b(),ep=$();Fz(tp);gw.exports={update:Vz};var kz="There was a problem performing this update. Please check the logs and try again.";async function Vz({statement:e,hdb_user:t}){let r=await qz(e.table.databaseid,e.table.tableid),s=$z(e.columns);ep.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=Hz(n),c=ep.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=tp.parse(u).statements[0],l=await Gz(_),d=Yz(s,l);return Kz(o,d,t)}a(Vz,"update");function $z(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=tp.compile(`SELECT ${r.expression.toString()} AS [${xz.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Tw.error(t),new Error(kz)}}a($z,"createUpdateRecord");function Yz(e,t){return ep.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(Yz,"buildUpdateRecords");async function Kz(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await Bz.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Tw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(Kz,"updateRecords")});var Nw=T((wce,Ow)=>{var Wz=require("alasql"),Qz=qr(),zz=G(),Jz=_s(),sp=require("util"),rp=$(),Xz=b(),jz=Pn(),yce=S_(),Ice=Gr(),Zz="record",eJ="successfully deleted",tJ=sp.callbackify(iJ),rJ=sp.promisify(Qz.search),sJ=sp.promisify(jz.getTableSchema);Ow.exports={convertDelete:tJ};function nJ(e){return`${e.deleted_hashes.length} ${Zz}${e.deleted_hashes.length===1?"":"s"} ${eJ}`}a(nJ,"generateReturnMessage");async function iJ({statement:e,hdb_user:t}){let r=await sJ(e.table.databaseid,e.table.tableid);rp.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=rp.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=Wz.parse(o).statements[0],u={operation:Xz.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await rJ(c);let _=await Jz.deleteRecords(u);return rp.isEmptyOrZeroLength(_.message)&&(_.message=nJ(_)),delete _.txn_time,_}catch(_){throw zz.error(_),_.hdb_code?_.message:_}}a(iJ,"convertDelete")});var Cw=T((Lce,ww)=>{"use strict";var oJ=pi(),{hdb_errors:bw}=j(),{getDatabases:yw}=(fe(),Z(Ce));ww.exports={checkSchemaExists:Iw,checkSchemaTableExists:aJ,schema_describe:oJ};async function Iw(e){if(!yw()[e])return bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Iw,"checkSchemaExists");async function aJ(e,t){let r=await Iw(e);if(r)return r;if(!yw()[e][t])return bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(aJ,"checkSchemaTableExists")});var Tc=T((Uce,cJ)=>{cJ.exports={name:"harperdb",version:"4.2.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 A_={};Qe(A_,{addAnalyticsListener:()=>Ac,recordAction:()=>Nr,recordActionBinary:()=>kr,setAnalyticsEnabled:()=>uJ});function uJ(e){qw=e}function Nr(e,t,r,s,n){if(!qw)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=g_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},g_.set(i,o)}T_||lJ()}function kr(e,t,r,s,n){Nr(!!e,t,r,s,n)}function Ac(e){kw.push(e)}function lJ(){T_=performance.now(),setTimeout(async()=>{let e=performance.now()-T_;T_=0;let t=[],r={time:Date.now(),period:e,threadId:wi.threadId,metrics:t};for(let[n,i]of g_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of Vw){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,count:c}))}else i.callback?t.push(Object.assign(i.description,i.callback(i))):t.push(Object.assign(i.description,{total:i.total,count:i.count}));await $w()}let s=process.memoryUsage();t.push({metric:"memory",threadId:wi.threadId,byThread:!0,...s});for(let n of kw)n(t);g_=new Map,wi.parentPort?wi.parentPort.postMessage({type:xw,report:r}):Ww({report:r})},Gw).unref()}async function _J(e,t=6e4){let r=op(),s=Yw(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=p;for(let I of S||[]){let{path:N,method:Y,type:Q,metric:q,count:w,total:K,distribution:B,threads:x,...te}=I;w||(w=1);let be=q+(N?"-"+N:"");Y!==void 0&&(be+="-"+Y),Q!==void 0&&(be+="-"+Q);let se=o.get(be);if(se){if(se.threads){let Pe=se.threads[A];if(Pe)se=Pe;else{se.threads[A]=Object.assign({},te);continue}}se.count||(se.count=1);let 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 $w()}for(let h of u){let{path:p,method:S,type:A,metric:I,count:N,total:Y,distribution:Q,threads:q,...w}=h;q=q.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let x of q){let te=x[K];typeof te=="number"&&(B+=te)}h[K]=B}h.count=q.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let S=o.get(h);p.sort((Pe,At)=>Pe.value>At.value?1:-1);let A=S.count-1,I=[],N=0,Y=0,Q;for(let Pe of Vw){let At=A*Pe;for(;N<At;)Q=p[Y++],N+=Q.count,Y===1&&N--;let es=p[Y>1?Y-2:0];Q||(Q=p[0]),I.push(Q.value-(Q.value-es.value)*(N-At)/Q.count)}let[q,w,K,B,x,te,be,se,Pt]=I;Object.assign(S,{p1:q,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,R_.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(S=>{S||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,R_.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-Lw,active:E-Dw,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(S=>{S||s.primaryStore.put(h,p)})}Lw=f,Dw=E}async function Uw(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function op(){return Mw||(Mw=et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function Yw(){return Pw||(Pw=et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function EJ(){Kw=!0;let e=(0,gc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await _J(Gw,e),await Uw(op(),dJ),await Uw(Yw(),fJ)},Math.min(e/2,2147483647)).unref()}function Ww(e,t){let r=e.report;r.threadId=t?.threadId||wi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(vw+=s.mean*s.count);r.totalBytesProcessed=vw,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(Bw.get(t))}),Bw.set(t,t.performance.eventLoopUtilization())),r.id=(0,R_.getNextMonotonicTime)(),op().primaryStore.put(r.id,r),Kw||EJ(),hJ&&(Qw=pJ(r))}async function pJ(e){if(await Qw,!Gn){let r=(0,Rc.dirname)((0,Fw.getLogFilePath)());try{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"r+")}catch{Gn=await(0,np.open)((0,Rc.join)(r,"analytics.log"),"w+")}}let t=(await Gn.stat()).size;if(t>mJ){let r=Buffer.alloc(t);await Gn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gn.write(r,{position:0}),await Gn.truncate(r.length),t=r.length}await Gn.write(JSON.stringify(e)+`
|
|
6
|
+
`,t)}var wi,Hw,Fw,Rc,np,R_,gc,ip,g_,qw,T_,Gw,xw,kw,Vw,Lw,Dw,$w,dJ,fJ,Mw,Pw,Kw,vw,Bw,hJ,Qw,Gn,mJ,xn=Te(()=>{wi=require("worker_threads"),Hw=D(Ze());fe();Fw=D(G()),Rc=require("path"),np=require("fs/promises"),R_=D(mr()),gc=D(X()),ip=D(b());Mr();(0,gc.initSync)();g_=new Map,qw=(0,gc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(uJ,"setAnalyticsEnabled");a(Nr,"recordAction");ut.recordAnalytics=Nr;a(kr,"recordActionBinary");T_=0,Gw=1e3,xw="analytics-report",kw=[];a(Ac,"addAnalyticsListener");Vw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(lJ,"sendAnalytics");a(_J,"aggregation");Lw=0,Dw=0,$w=a(()=>new Promise(setImmediate),"rest");a(Uw,"cleanup");dJ=36e5,fJ=31536e6;a(op,"getRawAnalyticsTable");a(Yw,"getAnalyticsTable");(0,Hw.setChildListenerByType)(xw,Ww);a(EJ,"startScheduledTasks");vw=0,Bw=new Map,hJ=!1;a(Ww,"recordAnalytics");mJ=1e6;a(pJ,"logAnalytics")});var dt=T((Kce,fC)=>{"use strict";var It=X();It.initSync();var SJ=require("fs-extra"),TJ=require("semver"),bc=require("path"),{monotonicFactory:RJ}=require("ulidx"),Jw=RJ(),gJ=require("util"),Xw=require("child_process"),AJ=gJ.promisify(Xw.exec),OJ=Xw.spawn,ge=ke(),Oe=b(),lp=$(),Vr=G(),O_=nn(),NJ=S_(),Oc=hr(),{onMessageByType:bJ}=Ze(),{isMainThread:yJ}=require("worker_threads"),{Encoder:IJ,decode:_p}=require("msgpackr"),jw=new IJ,{isEmpty:Ci}=lp,Zw=xr(),wJ=48*36e11,CJ=5e9;yJ&&bJ(Oe.ITC_EVENT_TYPES.RESTART,()=>{Ss=void 0,wo=void 0});var{connect:LJ,StorageType:eC,RetentionPolicy:tC,AckPolicy:N_,DeliverPolicy:b_,DiscardPolicy:DJ,NatsConnection:kce,JetStreamManager:Vce,JetStreamClient:$ce,StringCodec:Yce,JSONCodec:UJ,createInbox:dp,headers:MJ,ErrorCode:zw}=require("nats"),{PACKAGE_ROOT:PJ}=b(),vJ=Tc(),{recordAction:BJ}=(xn(),Z(A_)),rC=UJ(),HJ="clustering",FJ=vJ.engines[ge.NATS_SERVER_NAME],qJ=bc.join(PJ,"dependencies"),up=bc.join(qJ,`${process.platform}-${process.arch}`,ge.NATS_BINARY_NAME),ap,cp,Nc,yo,Io;fC.exports={runCommand:sC,checkNATSServerInstalled:GJ,createConnection:fp,getConnection:y_,getJetStreamManager:yc,getJetStream:nC,getNATSReferences:Xt,getServerList:kJ,createLocalStream:Ep,listStreams:iC,deleteLocalStream:VJ,getServerConfig:Ic,listRemoteStreams:$J,viewStream:YJ,viewStreamIterator:KJ,publishToStream:WJ,createWorkQueueStream:QJ,addSourceToWorkStream:aC,request:JJ,removeSourceFromWorkStream:uC,reloadNATS:hp,reloadNATSHub:XJ,reloadNATSLeaf:jJ,extractServerName:cC,requestErrorHandler:ZJ,updateWorkStream:e2,createLocalTableStream:_C,createTableStreams:t2,purgeTableStream:dC,purgeSchemaTableStreams:r2,getStreamInfo:s2,updateLocalStreams:i2,closeConnection:xJ,getJsmServerName:wc,addNatsMsgHeader:oC,updateIngestStreamConsumer:zJ};async function sC(e,t=void 0){let{stdout:r,stderr:s}=await AJ(e,{cwd:t});if(s)throw new Error(s.replace(`
|
|
7
7
|
`,""));return r.replace(`
|
|
8
|
-
`,"")}a(sC,"runCommand");async function qJ(){try{await pJ.access(up)}catch{return!1}let e=await sC(`${up} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return SJ.eq(t,HJ)}a(qJ,"checkNATSServerInstalled");async function fp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Zw.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}kr.trace("create nats connection called");let i=await CJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile: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(fp,"createConnection");async function GJ(){ps&&(await ps.drain(),ps=void 0,yo=void 0,Io=void 0,wo=void 0)}a(GJ,"closeConnection");var ps,wo;async function y_(){return wo||(wo=fp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ps=await wo),ps||wo}a(y_,"getConnection");async function yc(){if(yo)return yo;Ci(ps)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return yo=await ps.jetstreamManager({domain:e,timeout:6e4}),yo}a(yc,"getJetStreamManager");async function nC(){if(Io)return Io;Ci(ps)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=ps.jetstream({domain:e,timeout:6e4}),Io}a(nC,"getJetStream");async function Xt(){let e=ps||await y_(),t=yo||await yc(),r=Io||await nC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function xJ(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Zw.getClusterUser(),n=await fp(t,r,s),i=dp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=rC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await lp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(xJ,"getServerList");async function Ep(e,t){let{jsm:r}=await Xt(),s=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:eC.File,retention:tC.Limits,subjects:t,discard:LJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Ep,"createLocalStream");async function iC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(iC,"listStreams");async function kJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(kJ,"deleteLocalStream");async function VJ(e){let{connection:t}=await Xt(),r=[],s=dp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(rC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(VJ,"listRemoteStreams");async function $J(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=_p(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a($J,"viewStream");async function*YJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=_p(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(YJ,"viewStreamIterator");async function KJ(e,t,r,s){kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=oC(s,r);let{js:n}=await Xt(),i=await wc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:jw.encode(s);try{kr.trace(`publishToStream publishing to subject: ${o}`),vJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return lC(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 Ep(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(KJ,"publishToStream");function oC(e,t){t===void 0&&(t=UJ());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(oC,"addNatsMsgHeader");function Ic(e){e=e.toLowerCase();let t=bc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),BJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(cp)&&(cp={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),cp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(ap)&&(ap={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:bc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),ap;kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ic,"getServerConfig");async function WJ(e){let{jsm:t}=await Xt(),r=await wc();try{await t.streams.add({name:e.stream_name,storage:eC.File,retention:tC.Limits,max_age:IJ,max_bytes:wJ,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:N_.Explicit,durable_name:e.durable_name,deliver_policy:b_.All,max_ack_pending:1e4});else throw s}}a(WJ,"createWorkQueueStream");async function QJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(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:N_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:b_.All,max_ack_pending:1e4}))}a(QJ,"updateIngestStreamConsumer");async function aC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=cC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=O_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(aC,"addSourceToWorkStream");function cC(e){return e.split(".")[1]}a(cC,"extractServerName");async function uC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=O_.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(uC,"removeSourceFromWorkStream");async function zJ(e,t,r=6e4,s=dp()){if(!lp.isObject(t))throw new Error("data param must be an object");let n=jw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return _p(c.data)}a(zJ,"request");function hp(e){return new Promise(async(t,r)=>{let s=AJ(up,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(hp,"reloadNATS");async function JJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await hp(e)}a(JJ,"reloadNATSHub");async function XJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await hp(e)}a(XJ,"reloadNATSLeaf");function jJ(e,t,r){let s;switch(e.code){case zw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case zw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(jJ,"requestErrorHandler");async function ZJ(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await lC(async()=>{e.subscribe===!0?await aC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(ZJ,"updateWorkStream");function lC(e){return OJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lC,"exclusiveLock");async function _C(e,t){let r=O_.createNatsTableStreamName(e,t),s=await wc(),n=s2(e,t,s);await Ep(r,[n])}a(_C,"createLocalTableStream");async function e2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await _C(s,n)}}a(e2,"createTableStreams");async function dC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=O_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")kr.warn(r);else throw r}}a(dC,"purgeTableStream");async function t2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await dC(e,t[r])}a(t2,"purgeSchemaTableStreams");async function r2(e){return(await yc()).streams.info(e)}a(r2,"getStreamInfo");function s2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(s2,"createSubjectName");async function wc(){if(Nc)return Nc;if(Nc=(await yc())?.nc?.info?.server_name,Nc===void 0)throw new Error("Unable to get jetstream manager server name");return Nc}a(wc,"getJsmServerName");async function n2(){let e=await yc(),t=await wc(),r=await iC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=i2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;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(n2,"updateLocalStreams");function i2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=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(i2,"updateStreamLimits")});var L_=T((zce,pC)=>{"use strict";var Co=Hl(),Lo=Cw(),o2=G(),a2=require("uuid").v4,Qce=require("clone"),w_=on(),Do=b(),c2=require("util"),kn=ls(),{handleHDBError:jt,hdb_errors:u2}=j(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Zt}=u2,{SchemaEventMsg:C_}=_s(),EC=_t(),{getDatabases:l2}=(fe(),Z(Ce)),{transformReq:Uo}=$();pC.exports={createSchema:_2,createSchemaStructure:hC,createTable:d2,createTableStructure:mC,createAttribute:p2,dropSchema:f2,dropTable:E2,dropAttribute:h2,getBackup:S2};async function _2(e){let t=await hC(e);return w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),t}a(_2,"createSchema");async function hC(e){let t=Co.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo(e),!await Lo.checkSchemaExists(e.schema))throw jt(new Error,I_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(hC,"createSchemaStructure");async function d2(e){return Uo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mC(e)}a(d2,"createTable");async function mC(e){let t=Co.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Co.validateTableResidence(e.residence),!await Lo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,I_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:a2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(mC,"createTableStructure");async function f2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Co.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let n=await Lo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,n,!0);let i=await Lo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await kn.dropSchema(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),await EC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(f2,"dropSchema");async function E2(e){let t=Co.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);return await kn.dropTable(e),await EC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(E2,"dropTable");async function h2(e){let t=Co.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Do.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await kn.dropAttribute(e),m2(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw o2.error(`Got an error deleting attribute ${c2.inspect(e)}.`),s}}a(h2,"dropAttribute");function m2(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(m2,"dropAttributeFromGlobal");async function p2(e){Uo(e);let t=l2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await kn.createAttribute(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(p2,"createAttribute");function S2(e){return kn.getBackup(e)}a(S2,"getBackup")});var TC=T((Xce,SC)=>{"use strict";var{OPERATIONS_ENUM:T2}=b(),mp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=T2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};SC.exports=mp});var pp=T((eue,NC)=>{"use strict";var R2=ls(),Zce=TC(),D_=$(),U_=b(),g2=X(),{handleHDBError:RC,hdb_errors:A2}=j(),{HDB_ERROR_MSGS:gC,HTTP_STATUS_CODES:AC}=A2,O2=Object.values(U_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OC="To use this operation audit log must be enabled in harperdb-config.yaml";NC.exports=N2;async function N2(e){if(D_.isEmpty(e.schema))throw new Error(gC.SCHEMA_REQUIRED_ERR);if(D_.isEmpty(e.table))throw new Error(gC.TABLE_REQUIRED_ERR);if(!g2.get(U_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw RC(new Error,OC,AC.BAD_REQUEST,U_.LOG_LEVELS.ERROR,OC,!0);let t=D_.checkSchemaTableExist(e.schema,e.table);if(t)throw RC(new Error,t,AC.NOT_FOUND,U_.LOG_LEVELS.ERROR,t,!0);if(!D_.isEmpty(e.search_type)&&O2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await R2.readAuditLog(e)}a(N2,"readAuditLog")});var yC=T((rue,bC)=>{"use strict";var{OPERATIONS_ENUM:b2}=b(),Sp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=b2.GET_BACKUP,this.schema=t,this.table=r}};bC.exports=Sp});var CC=T((oue,wC)=>{"use strict";var y2=ls(),nue=yC(),Tp=$(),I2=b(),iue=X(),{handleHDBError:w2,hdb_errors:C2}=j(),{HDB_ERROR_MSGS:IC,HTTP_STATUS_CODES:L2}=C2;wC.exports=D2;async function D2(e){if(Tp.isEmpty(e.schema))throw new Error(IC.SCHEMA_REQUIRED_ERR);if(Tp.isEmpty(e.table))throw new Error(IC.TABLE_REQUIRED_ERR);let t=Tp.checkSchemaTableExist(e.schema,e.table);if(t)throw w2(new Error,t,L2.NOT_FOUND,I2.LOG_LEVELS.ERROR,t,!0);return await y2.getBackup(read_audit_log_object)}a(D2,"getBackup")});var vC=T((cue,PC)=>{var Vn=require("validate.js"),DC=qe(),Mo=b(),{handleHDBError:U2,hdb_errors:M2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:P2}=M2,Rp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),v2={STRUCTURE_USER:"structure_user"},LC=Object.values(Mo.ROLE_TYPES_ENUM),B2="attribute_permissions",H2="attribute_name",{PERMS_CRUD_ENUM:Po}=Mo,F2=[B2,...Object.values(Po)],UC=[Po.READ,Po.INSERT,Po.UPDATE],q2=[H2,...UC];function G2(e){let t=Rp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MC(e,t)}a(G2,"addRoleValidation");function x2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MC(e,t)}a(x2,"alterRoleValidation");function k2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DC.validateObject(e,t)}a(k2,"dropRoleValidation");var V2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function MC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)V2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=DC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=$2(e);o&&st(o,r),LC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LC.indexOf(o)<0){if(o===v2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{F2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Po).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!q2.includes(p)&&p!==Po.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}UC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return Y2(r)}a(MC,"customValidate");PC.exports={addRoleValidation:G2,alterRoleValidation:x2,dropRoleValidation:k2};function $2(e){let{operation:t,permission:r}=e;if(t===Mo.OPERATIONS_ENUM.ADD_ROLE||t===Mo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mo.ROLE_TYPES_ENUM.SUPER_USER:Mo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a($2,"validateNoSUPerms");function Y2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return U2(new Error,s,P2.BAD_REQUEST)}else return null}a(Y2,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var yp=T((lue,qC)=>{"use strict";var BC=qr(),HC=Fr(),K2=Ai(),Ap=vC(),Op=on(),W2=require("uuid").v4,Q2=require("util"),M_=b(),z2=$(),Np=HC.searchByValue,J2=HC.searchByHash,X2=Q2.promisify(K2.delete),j2=Ps(),Z2=Oo(),{hdb_errors:e4,handleHDBError:vo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:P_}=e4,{UserEventMsg:bp}=_s();qC.exports={addRole:t4,alterRole:r4,dropRole:s4,listRoles:n4};function gp(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(gp,"scrubRoleDetails");async function t4(e){let t=Ap.addRoleValidation(e);if(t)throw t;e=gp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Np(r)||[])}catch(i){throw vo(i)}if(s&&s.length>0)throw vo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),P_.CONFLICT,void 0,void 0,!0);e.id||(e.id=W2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BC.insert(n),Op.signalUserChange(new bp(process.pid)),e=gp(e),e}a(t4,"addRole");async function r4(e){let t=Ap.alterRoleValidation(e);if(t)throw t;e=gp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await BC.update(r)}catch(n){throw vo(n)}if(s&&s?.message==="updated 0 of 1 records")throw vo(new Error,"Invalid role id",P_.BAD_REQUEST,void 0,void 0,!0);return await Op.signalUserChange(new bp(process.pid)),e}a(r4,"alterRole");async function s4(e){let t=Ap.dropRoleValidation(e);if(t)throw vo(new Error,t,P_.BAD_REQUEST,void 0,void 0,!0);let r=new Z2(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await J2(r));if(s.length===0)throw vo(new Error,FC.ROLE_NOT_FOUND,P_.NOT_FOUND,void 0,void 0,!0);let n=new j2(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Np(n)),o=!1;if(z2.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await X2(c),Op.signalUserChange(new bp(process.pid)),`${s[0].role} successfully deleted`}a(s4,"dropRole");async function n4(){return Np({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(n4,"listRoles")});var VC=T((due,kC)=>{"use strict";var i4=X(),$n=require("joi"),o4=qe(),GC=require("moment"),a4=require("fs-extra"),Ip=require("path"),c4=require("lodash"),Cc=b(),{LOG_LEVELS:Li}=b(),u4="YYYY-MM-DD hh:mm:ss",l4=Ip.resolve(__dirname,"../logs");kC.exports=function(e){return o4.validateBySchema(e,_4)};var _4=$n.object({from:$n.custom(xC),until:$n.custom(xC),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(d4)});function xC(e,t){if(GC(e,GC.ISO_8601).format(u4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xC,"validateDatetime");function d4(e,t){if(c4.invert(Cc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=i4.get(Cc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Cc.LOG_NAMES.HDB:e,i=n===Cc.LOG_NAMES.INSTALL?Ip.join(l4,Cc.LOG_NAMES.INSTALL):Ip.join(s,n);return a4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(d4,"validateReadLogPath")});var Cp=T((Eue,YC)=>{"use strict";var v_=b(),f4=G(),E4=X(),h4=VC(),wp=require("path"),$C=require("fs-extra"),{once:m4}=require("events"),{handleHDBError:p4,hdb_errors:S4}=j(),{PACKAGE_ROOT:T4}=b(),R4=wp.join(T4,"logs"),g4=1e3,A4=200;YC.exports=O4;async function O4(e){let t=h4(e);if(t)throw p4(t,t.message,S4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=E4.get(v_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?v_.LOG_NAMES.HDB:e.log_name,n=s===v_.LOG_NAMES.INSTALL?wp.join(R4,v_.LOG_NAMES.INSTALL):wp.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?g4:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max($C.statSync(n).size-(h+5)*A4,0));let S=$C.createReadStream(n,{start:p});S.on("error",q=>{f4.error(q)});let A=0,I=[],N="",Y;S.on("data",q=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,B;for(;(B=w.exec(q))&&!S.destroyed;){Y&&(Y.message=q.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),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=q.slice(K)}),S.on("end",q=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(q){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),q.level===o&&w>=K&&w<=B&&A<E?A++:q.level===o&&w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(q.timestamp),K=new Date(u),q.level===o&&w>=K&&A<E?A++:q.level===o&&w>=K&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(q.timestamp),B=new Date(l),q.level===o&&w<=B&&A<E?A++:q.level===o&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(q.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(q.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Yn(q,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await m4(S,"close"),I}a(O4,"readLog");function Yn(e,t,r){t==="desc"?N4(e,r):t==="asc"?b4(e,r):r.push(e)}a(Yn,"pushLineToResult");function N4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(N4,"insertDescending");function b4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(b4,"insertAscending")});var H_=T((Tue,zC)=>{"use strict";var Lp=require("joi"),{string:B_,boolean:KC,date:y4}=Lp.types(),I4=qe(),{validateSchemaExists:mue,validateTableExists:pue,validateSchemaName:Sue}=Ls(),w4=b(),C4=ke(),WC=X();WC.initSync();var L4=B_.invalid(WC.get(w4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(C4.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),QC={operation:B_.valid("add_node","update_node"),node_name:L4,subscriptions:Lp.array().items({table:B_.optional(),schema:B_.required(),subscribe:KC.required(),publish:KC.required().custom(U4),start_time:y4.iso()}).min(1).required()};function D4(e){return I4.validateBySchema(e,Lp.object(QC))}a(D4,"addUpdateNodeValidator");function U4(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(U4,"checkForFalsy");zC.exports={addUpdateNodeValidator:D4,validation_schema:QC}});var XC=T((gue,JC)=>{var M4=qe(),P4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JC.exports=function(e){return M4.validateObject(e,P4)}});var Up=T((Aue,jC)=>{"use strict";var v4=b().OPERATIONS_ENUM,Dp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=v4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jC.exports=Dp});var eL=T((Nue,ZC)=>{"use strict";var B4={OPERATION:"operation",REFRESH:"refresh"},Mp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Pp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};ZC.exports={JWTTokens:Mp,TOKEN_TYPE_ENUM:B4,JWTRSAKeys:Pp}});var Uc=T((yue,nL)=>{"use strict";var Dc=require("jsonwebtoken"),vp=require("fs-extra"),Bp=$(),Vr=b(),{handleHDBError:er,hdb_errors:H4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=H4,Lc=G(),tL=Jl(),qp=Gr(),F4=qr().update,q4=Up(),G4=on(),{UserEventMsg:x4}=_s(),Kn=X();Kn.initSync();var Hp=require("path"),{JWTTokens:k4,JWTRSAKeys:V4,TOKEN_TYPE_ENUM:F_}=eL(),$4=Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",Y4=Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get(Vr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",q_="RS256",Fp;nL.exports={createTokens:K4,validateOperationToken:Q4,refreshOperationToken:W4,validateRefreshToken:sL};async function K4(e){if(Bp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Lc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await G_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await rL(i,r.private_key,r.passphrase),c=await Dc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:Y4,algorithm:q_,subject:F_.REFRESH}),u=tL.hash(c),_=new q4(Vr.SYSTEM_SCHEMA_NAME,Vr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await F4(_)}catch(f){Lc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return G4.signalUserChange(new x4(process.pid)),new k4(o,c)}a(K4,"createTokens");async function rL(e,t,r){return await Dc.sign(e,{key:t,passphrase:r},{expiresIn:$4,algorithm:q_,subject:F_.OPERATION})}a(rL,"signOperationToken");async function G_(){if(Fp===void 0)try{let e=Hp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Hp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Hp.join(Kn.getHdbBasePath(),Vr.LICENSE_KEY_DIR_NAME,Vr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await vp.readFile(e)).toString(),n=(await vp.readFile(t)).toString(),i=(await vp.readFile(r)).toString();Fp=new V4(i,n,s)}catch(e){throw Lc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Fp}a(G_,"getJWTRSAKeys");async function W4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await sL(e.refresh_token);let t=await G_(),r=await Dc.decode(e.refresh_token);return{operation_token:await rL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(W4,"refreshOperationToken");async function Q4(e){try{let t=await G_(),r=await Dc.verify(e,t.public_key,{algorithms:q_,subject:F_.OPERATION});return await qp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Lc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(Q4,"validateOperationToken");async function sL(e){let t;try{let r=await G_(),s=await Dc.verify(e,r.public_key,{algorithms:q_,subject:F_.REFRESH});t=await qp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Lc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!tL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(sL,"validateRefreshToken")});var Gp=T((Cue,aL)=>{"use strict";var z4=XC(),Bo=require("passport"),J4=require("passport-local").Strategy,X4=require("passport-http").BasicStrategy,j4=require("util"),Z4=Gr(),oL=j4.callbackify(Z4.findAndValidateUser),wue=dr(),e3=b(),iL=Uc();Bo.use(new J4(function(e,t,r){oL(e,t,r)}));Bo.use(new X4(function(e,t,r){oL(e,t,r)}));Bo.serializeUser(function(e,t){t(null,e)});Bo.deserializeUser(function(e,t){t(null,e)});function t3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Bo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===e3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(t3,"authorize");function r3(e,t){let r=z4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(r3,"checkPermissions");aL.exports={authorize:t3,checkPermissions:r3}});var Ho=T((Due,cL)=>{"use strict";var xp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},kp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};cL.exports={Node:xp,NodeSubscription:kp}});var lL=T((Mue,uL)=>{"use strict";var s3=b().OPERATIONS_ENUM,Vp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=s3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uL.exports=Vp});var Mc=T((vue,_L)=>{"use strict";var $p=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Yp=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};_L.exports={RemotePayloadObject:$p,RemotePayloadSubscription:Yp}});var fL=T((Hue,dL)=>{"use strict";var Kp=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};dL.exports=Kp});var mL=T((kue,hL)=>{"use strict";var n3=fL(),que=ze(),EL=Ue(),i3=G(),{getSchemaPath:Gue,getTransactionAuditStorePath:xue}=ve(),{getDatabases:o3}=(fe(),Z(Ce));hL.exports=a3;async function a3(e){let t=new n3;try{let r=o3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await EL.environmentDataSize(schema_path,e.name),o=await EL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){i3.warn(`unable to stat table dbi due to ${r}`)}return t}a(a3,"lmdbGetTableSize")});var SL=T(($ue,pL)=>{"use strict";var Wp=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};pL.exports=Wp});var Fo=T((Que,AL)=>{"use strict";var c3=require("fs-extra"),u3=require("path"),Gt=require("systeminformation"),Wn=G(),l3=_t(),Qp=ke(),k_=b(),_3=mL(),gL=pi(),{getThreadInfo:TL}=Ze(),nS=X();nS.initSync();var d3=SL(),{openEnvironment:Kue}=Ue(),{getSchemaPath:Wue}=ve(),{database:f3}=(fe(),Z(Ce)),x_;AL.exports={getHDBProcessInfo:jp,getNetworkInfo:eS,getDiskInfo:Zp,getMemoryInfo:Xp,getCPUInfo:Jp,getTimeInfo:zp,getSystemInformation:tS,systemInformation:E3,getTableSize:rS,getMetrics:sS};function zp(){return Gt.time()}a(zp,"getTimeInfo");async function Jp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await 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:q,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(Jp,"getCPUInfo");async function Xp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(Xp,"getMemoryInfo");async function jp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await c3.readFile(u3.join(nS.get(k_.CONFIG_PARAMS.ROOTPATH),k_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===k_.NODE_ERROR_CODES.ENOENT)Wn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(jp,"getHDBProcessInfo");async function Zp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await 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(Zp,"getDiskInfo");async function eS(){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(eS,"getNetworkInfo");async function tS(){if(x_!==void 0)return x_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,x_=e,x_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(tS,"getSystemInformation");async function rS(){let e=[],t=await gL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await _3(s));return e}a(rS,"getTableSize");async function sS(){let e=await gL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=f3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(sS,"getMetrics");async function RL(){if(nS.get(k_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await l3.getNATSReferences(),r=await t.streams.info(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qp.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(RL,"getNatsStreamInfo");async function E3(e){let t=new d3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tS(),t.time=zp(),t.cpu=await Jp(),t.memory=await Xp(),t.disk=await Zp(),t.network=await eS(),t.harperdb_processes=await jp(),t.table_size=await rS(),t.metrics=await sS(),t.threads=await TL(),t.replication=await RL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tS();break;case"time":t.time=zp();break;case"cpu":t.cpu=await Jp();break;case"memory":t.memory=await Xp();break;case"disk":t.disk=await Zp();break;case"network":t.network=await eS();break;case"harperdb_processes":t.harperdb_processes=await jp();break;case"table_size":t.table_size=await rS();break;case"database_metrics":case"metrics":t.metrics=await sS();break;case"threads":t.threads=await TL();break;case"replication":t.replication=await RL();break;default:break}return t}a(E3,"systemInformation")});var iS=T((Jue,OL)=>{"use strict";OL.exports={version:h3,printVersion:m3};var V_=Tc();function h3(){if(V_)return V_.version}a(h3,"version");function m3(){V_&&console.log(`HarperDB Version ${V_.version}`)}a(m3,"printVersion")});var un=T((ele,IL)=>{"use strict";var p3=qr(),oS=$(),S3=require("util"),Di=b(),NL=X();NL.initSync();var T3=Gp(),bL=Fr(),{Node:jue,NodeSubscription:Zue}=Ho(),R3=Oo(),g3=lL(),{RemotePayloadObject:A3,RemotePayloadSubscription:O3}=Mc(),{handleHDBError:N3,hdb_errors:b3}=j(),{HTTP_STATUS_CODES:y3,HDB_ERROR_MSGS:I3}=b3,w3=Ps(),C3=Fo(),L3=iS(),{getDatabases:D3}=(fe(),Z(Ce)),U3=S3.promisify(T3.authorize),M3=bL.searchByHash,P3=bL.searchByValue;IL.exports={authHeaderToUser:v3,isEmpty:B3,getNodeRecord:H3,upsertNodeRecord:F3,buildNodePayloads:q3,checkClusteringEnabled:G3,getAllNodeRecords:x3,getSystemInfo:k3,reverseSubscription:yL};async function v3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await U3(t,null),e}a(v3,"authHeaderToUser");function B3(e){return e==null}a(B3,"isEmpty");async function H3(e){let t=new R3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return M3(t)}a(H3,"getNodeRecord");async function F3(e){let t=new g3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return p3.upsert(t)}a(F3,"upsertNodeRecord");function yL(e){if(oS.isEmpty(e.subscribe)||oS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(yL,"reverseSubscription");function q3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=oS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yL(c),E=D3()[u]?.[_],h=new O3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new A3(r,t,n,s)}a(q3,"buildNodePayloads");function G3(){if(!NL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw N3(new Error,I3.CLUSTERING_NOT_ENABLED,y3.BAD_REQUEST,void 0,void 0,!0)}a(G3,"checkClusteringEnabled");async function x3(){let e=new w3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await P3(e))}a(x3,"getAllNodeRecords");async function k3(){let e=await C3.getSystemInformation();return{hdb_version:L3.version(),node_version:e.node_version,platform:e.platform}}a(k3,"getSystemInfo")});var aS=T((rle,vL)=>{"use strict";var $_=_t(),wL=$(),CL=ke(),LL=b(),Y_=G(),DL=L_(),V3=Im(),{RemotePayloadObject:$3}=Mc(),{handleHDBError:UL,hdb_errors:Y3}=j(),{HTTP_STATUS_CODES:ML}=Y3,{NodeSubscription:PL}=Ho();vL.exports=K3;async function K3(e,t){let r;try{r=await $_.request(`${t}.${CL.REQUEST_SUFFIX}`,new $3(LL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Y_.trace("Response from remote describe all request:",r)}catch(o){Y_.error(`addNode received error from describe all request to remote node: ${o}`);let c=$_.requestErrorHandler(o,"add_node",t);throw UL(new Error,c,ML.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===CL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw UL(new Error,o,ML.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===LL.SYSTEM_SCHEMA_NAME){await $_.createLocalTableStream(c,u);let h=new PL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=wL.doesSchemaExist(c),l=s[c]!==void 0,d=u?wL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Y_.trace(`addNode creating schema: ${c}`),await DL.createSchema({operation:"create_schema",schema:c})),!d&&f){Y_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new V3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await DL.createTable(h)}await $_.createLocalTableStream(c,u);let E=new PL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(K3,"reviewSubscriptions")});var Q_=T((nle,FL)=>{"use strict";var{handleHDBError:K_,hdb_errors:W3}=j(),{HTTP_STATUS_CODES:W_}=W3,{addUpdateNodeValidator:Q3}=H_(),Pc=G(),HL=b(),BL=ke(),z3=$(),cS=_t(),vc=un(),J3=X(),X3=aS(),{Node:j3,NodeSubscription:Z3}=Ho(),{broadcast:eX}=Ze(),tX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",rX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",sX=J3.get(HL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=nX;async function nX(e,t=!1){Pc.trace("addNode called with:",e),vc.checkClusteringEnabled();let r=Q3(e);if(r)throw K_(r,r.message,W_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await vc.getNodeRecord(s);if(!z3.isEmptyOrZeroLength(d))throw K_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,W_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await X3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=tX,o;let c=vc.buildNodePayloads(n,sX,HL.OPERATIONS_ENUM.ADD_NODE,await vc.getSystemInfo());Pc.trace("addNode sending remote payload:",c);let u;try{u=await cS.request(`${s}.${BL.REQUEST_SUFFIX}`,c)}catch(d){Pc.error(`addNode received error from request: ${d}`);let f=cS.requestErrorHandler(d,"add_node",s);throw K_(new Error,f,W_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw K_(new Error,d,W_.INTERNAL_SERVER_ERROR,"error",d)}Pc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Pc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await cS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new Z3(E.schema,E.table,E.publish,E.subscribe))}let l=new j3(s,_,u.system_info);return await vc.upsertNodeRecord(l),eX({type:"nats_update"}),i.length>0?o.message=rX:o.message=`Successfully added '${s}' to manifest`,o}a(nX,"addNode")});var lS=T((ole,xL)=>{"use strict";var{handleHDBError:z_,hdb_errors:iX}=j(),{HTTP_STATUS_CODES:J_}=iX,{addUpdateNodeValidator:oX}=H_(),Bc=G(),GL=b(),qL=ke(),aX=$(),uS=_t(),Hc=un(),cX=X(),{cloneDeep:uX}=require("lodash"),lX=aS(),{NodeSubscription:_X}=Ho(),{broadcast:dX}=Ze(),fX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",EX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=mX;async function mX(e){Bc.trace("updateNode called with:",e),Hc.checkClusteringEnabled();let t=oX(e);if(t)throw z_(t,t.message,J_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=uX(await Hc.getNodeRecord(r));if(aX.isEmptyOrZeroLength(s))throw z_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,J_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await lX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=fX,o;let c=Hc.buildNodePayloads(n,hX,GL.OPERATIONS_ENUM.UPDATE_NODE,await Hc.getSystemInfo());Bc.trace("updateNode sending remote payload:",c);let u;try{u=await uS.request(`${r}.${qL.REQUEST_SUFFIX}`,c)}catch(_){Bc.error(`updateNode received error from request: ${_}`);let l=uS.requestErrorHandler(_,"update_node",r);throw z_(new Error,l,J_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw z_(new Error,_,J_.INTERNAL_SERVER_ERROR,"error",_)}Bc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Bc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await uS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await pX(s[0],n,u.system_info),i.length>0?o.message=EX:o.message=`Successfully updated '${r}'`,o}a(mX,"updateNode");async function pX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new _X(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hc.upsertNodeRecord(s),dX({type:"nats_update"})}a(pX,"updateNodeTable")});var KL=T((cle,YL)=>{"use strict";var $L=require("joi"),{string:kL}=$L.types(),SX=qe(),VL=b(),TX=X(),RX=ke();YL.exports=gX;function gX(e){let t=kL.invalid(TX.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(RX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=$L.object({operation:kL.valid(VL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return SX.validateBySchema(e,r)}a(gX,"removeNodeValidator")});var j_=T((lle,jL)=>{"use strict";var{handleHDBError:WL,hdb_errors:AX}=j(),{HTTP_STATUS_CODES:QL}=AX,OX=KL(),Fc=G(),zL=un(),NX=$(),X_=b(),JL=ke(),XL=_t(),bX=X(),{RemotePayloadObject:yX}=Mc(),{NodeSubscription:IX}=Ho(),wX=_c(),CX=Ai(),{broadcast:LX}=Ze(),DX=bX.get(X_.CONFIG_PARAMS.CLUSTERING_NODENAME);jL.exports=UX;async function UX(e){Fc.trace("removeNode called with:",e),zL.checkClusteringEnabled();let t=OX(e);if(t)throw WL(t,t.message,QL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await zL.getNodeRecord(r);if(NX.isEmptyOrZeroLength(s))throw WL(new Error,`Node '${r}' was not found.`,QL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new yX(X_.OPERATIONS_ENUM.REMOVE_NODE,DX,[]),i,o=!1;try{i=await XL.request(`${r}.${JL.REQUEST_SUFFIX}`,n),Fc.trace("Remove node reply from remote node:",r,i)}catch(u){Fc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Fc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new IX(l.schema,l.table,!1,!1);await XL.updateWorkStream(d,r)}let c=new wX(X_.SYSTEM_SCHEMA_NAME,X_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await CX.deleteRecord(c),LX({type:"nats_update"}),i?.status===JL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(UX,"removeNode")});var tD=T((dle,eD)=>{"use strict";var ZL=require("joi"),{string:MX,array:PX}=ZL.types(),vX=qe(),BX=H_();eD.exports=HX;function HX(e){let t=ZL.object({operation:MX.valid("configure_cluster").required(),connections:PX.items(BX.validation_schema).required()});return vX.validateBySchema(e,t)}a(HX,"configureClusterValidator")});var _S=T((Ele,oD)=>{"use strict";var FX=b(),Z_=G(),qX=$(),GX=j_(),xX=Q_(),rD=un(),kX=tD(),{handleHDBError:sD,hdb_errors:VX}=j(),{HTTP_STATUS_CODES:nD}=VX,$X="Configure cluster complete.",YX="Failed to configure the cluster. Check the logs for more details.",KX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oD.exports=WX;async function WX(e){Z_.trace("configure cluster called with:",e),rD.checkClusteringEnabled();let t=kX(e);if(t)throw sD(t,t.message,nD.BAD_REQUEST,void 0,void 0,!0);let r=await rD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(iD(GX,{operation:FX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Z_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(iD(xX,E,E.node_name))}let c=await Promise.allSettled(i);Z_.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Z_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(qX.isEmptyOrZeroLength(u))return{message:$X,connections:_};if(l)return{message:KX,failed_nodes:u,connections:_};throw sD(new Error,YX,nD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(WX,"configureCluster");async function iD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(iD,"functionWrapper")});var cD=T((mle,aD)=>{"use strict";var ed=require("joi"),QX=qe(),{validateSchemaExists:zX,validateTableExists:JX,validateSchemaName:XX}=Ls(),jX=ed.object({operation:ed.string().valid("purge_stream"),schema:ed.string().custom(zX).custom(XX).required(),table:ed.string().custom(JX).required()});function ZX(e){return QX.validateBySchema(e,jX)}a(ZX,"purgeStreamValidator");aD.exports=ZX});var dS=T((Sle,uD)=>{"use strict";var{handleHDBError:ej,hdb_errors:tj}=j(),{HTTP_STATUS_CODES:rj}=tj,sj=cD(),nj=_t(),ij=un();uD.exports=oj;async function oj(e){let t=sj(e);if(t)throw ej(t,t.message,rj.BAD_REQUEST,void 0,void 0,!0);ij.checkClusteringEnabled();let{schema:r,table:s}=e;return await nj.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(oj,"purgeStream")});var hS=T((Rle,hD)=>{"use strict";var ES=un(),aj=_t(),dD=X(),td=b(),Ui=ke(),cj=$(),fS=G(),{RemotePayloadObject:uj}=Mc(),{ErrorCode:lD}=require("nats"),_D=dD.get(td.CONFIG_PARAMS.CLUSTERING_ENABLED),fD=dD.get(td.CONFIG_PARAMS.CLUSTERING_NODENAME);hD.exports={clusterStatus:lj,buildNodeStatus:ED};async function lj(){let e={node_name:fD,is_enabled:_D,connections:[]};if(!_D)return e;let t=await ES.getAllNodeRecords();if(cj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(ED(t[s],e.connections));return await Promise.allSettled(r),e}a(lj,"clusterStatus");async function ED(e,t){let r=e.name,s=new uj(td.OPERATIONS_ENUM.CLUSTER_STATUS,fD,void 0,await ES.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await aj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,fS.error(`Error getting node status from ${r} `,n))}catch(u){fS.warn(`Error getting node status from ${r}`,u),u.code===lD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new _j(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==td.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){fS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(ED,"buildNodeStatus");function _j(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(_j,"NodeStatusObject")});var pS=T((Ale,mD)=>{"use strict";var{handleHDBError:dj,hdb_errors:fj}=j(),{HTTP_STATUS_CODES:Ej}=fj,hj=_t(),mj=un(),mS=$(),rd=require("joi"),pj=qe(),Sj=2e3,Tj=rd.object({timeout:rd.number().min(1),connected_nodes:rd.boolean(),routes:rd.boolean()});mD.exports=Rj;async function Rj(e){mj.checkClusteringEnabled();let t=pj.validateBySchema(e,Tj);if(t)throw dj(t,t.message,Ej.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||mS.autoCastBoolean(s),o=n===void 0||mS.autoCastBoolean(n),c={nodes:[]},u=await hj.getServerList(r??Sj),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:mS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Rj,"clusterNetwork")});var RD=T((Nle,TD)=>{"use strict";var SS=require("joi"),pD=qe(),{route_constraints:SD}=EE();TD.exports={setRoutesValidator:gj,deleteRoutesValidator:Aj};function gj(e){let t=SS.object({server:SS.valid("hub","leaf").required(),routes:SD.required()});return pD.validateBySchema(e,t)}a(gj,"setRoutesValidator");function Aj(e){let t=SS.object({routes:SD.required()});return pD.validateBySchema(e,t)}a(Aj,"deleteRoutesValidator")});var RS=T((yle,ND)=>{"use strict";var Mi=Er(),TS=$(),sd=b(),gD=RD(),{handleHDBError:AD,hdb_errors:Oj}=j(),{HTTP_STATUS_CODES:OD}=Oj,Nj="cluster routes successfully set",bj="cluster routes successfully deleted";ND.exports={setRoutes:yj,getRoutes:Ij,deleteRoutes:wj};function yj(e){let t=gD.setRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=TS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:Nj,set:o,skipped:i}}a(yj,"setRoutes");function Ij(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Ij,"getRoutes");function wj(e){let t=gD.deleteRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=TS.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=TS.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:bj,deleted:i,skipped:o}}a(wj,"deleteRoutes")});var yD=T((wle,bD)=>{"use strict";var qc=require("alasql"),Pi=require("recursive-iterator"),Ss=G(),Cj=$(),Gc=b(),gS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Dj(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Gc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Gc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Gc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Lj(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Gc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Lj(e){return e.filter(t=>t[Gc.PERMS_CRUD_ENUM.READ])}a(Lj,"filterReadRestrictedAttrs");function Dj(e,t,r,s,n){Uj(e,t,r,s,n)}a(Dj,"interpretAST");function xc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(xc,"addSchemaTableToMap");function Uj(e,t,r,s,n){if(!e){Ss.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qc.yy.Insert?Bj(e,t,r):e instanceof qc.yy.Select?Mj(e,t,r,s,n):e instanceof qc.yy.Update?Pj(e,t,r):e instanceof qc.yy.Delete?vj(e,t,r):Ss.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Uj,"getRecordAttributesAST");function Mj(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(Cj.isEmptyOrZeroLength(i)){Ss.error("No schema specified");return}e.from.forEach(c=>{xc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xc(c.table,t,r,s,n)});let o=new Pi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{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(Mj,"getSelectAttributes");function Pj(e,t,r){if(!e){Ss.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(Pj,"getUpdateAttributes");function vj(e,t,r){if(!e){Ss.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(vj,"getDeleteAttributes");function Bj(e,t,r){if(!e){Ss.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;xc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.into.tableid,n,i.columnid,t,r)}a(Bj,"getInsertAttributes");function AS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(AS,"pushAttribute");bD.exports=gS});var bS=T((Lle,LD)=>{var nd=tc(),ID=require("chalk"),Nr=G(),wD=require("prompt"),{promisify:Hj}=require("util"),OS=b(),Fj=require("fs-extra"),qj=require("path"),Gj=$(),xj=iS(),CD=X();CD.initSync();var kj=require("moment"),Vj=Hj(wD.get),$j=qj.join(CD.getHdbBasePath(),OS.LICENSE_KEY_DIR_NAME,OS.LICENSE_FILE_NAME,OS.LICENSE_FILE_NAME);LD.exports={getFingerprint:Kj,setLicense:Yj,parseLicense:NS,register:Wj,getRegistrationInfo:zj};async function Yj(e){if(e&&e.key&&e.company){try{Nr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await NS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Nr.error(r),Nr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Yj,"setLicense");async function Kj(){let e={};try{e=await nd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Nr.error(r),Nr.error(t),new Error(r)}return e}a(Kj,"getFingerprint");async function NS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Nr.info("Validating license input...");let r=nd.validateLicense(e,t);if(Nr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Nr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Nr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Nr.info("writing license to disk"),await Fj.writeFile($j,JSON.stringify({license_key:e,company:t}))}catch(s){throw Nr.error("Failed to write License"),s}return"Registration successful."}a(NS,"parseLicense");async function Wj(){let e=await Qj();return NS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Wj,"register");async function Qj(){let e=await nd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ID.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ID.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{wD.start()}catch(s){Nr.error(s)}let r;try{r=await Vj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Qj,"promptForRegistration");async function zj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await nd.getLicense()}catch(r){throw Nr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Gj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=xj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=kj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(zj,"getRegistrationInfo")});var UD=T((Ule,DD)=>{"use strict";var Jj=ke(),yS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Jj.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};DD.exports=yS});var vD=T((Ple,PD)=>{"use strict";var MD=ke(),IS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+MD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+MD.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};PD.exports=IS});var HD=T((Ble,BD)=>{"use strict";var wS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BD.exports=wS});var qD=T((Fle,FD)=>{"use strict";var Xj=ke(),CS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Xj.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=CS});var US=T((Gle,kD)=>{"use strict";var qo=require("path"),ad=require("fs-extra"),jj=UD(),Zj=vD(),eZ=HD(),tZ=qD(),LS=Gr(),xo=$(),sr=Er(),od=b(),kc=ke(),{CONFIG_PARAMS:je}=od,Vc=G(),$c=X(),GD=nn(),DS=_t(),Go="clustering",rZ=1e4,xD=5;kD.exports={generateNatsConfig:nZ,removeNatsConfig:iZ,getHubConfigPath:sZ};function sZ(){let e=$c.get(je.ROOTPATH);return qo.join(e,Go,kc.NATS_CONFIG_FILES.HUB_SERVER)}a(sZ,"getHubConfigPath");async function nZ(e=!1,t=void 0){$c.initSync();let r=$c.get(je.ROOTPATH),s=qo.join(r,Go,kc.PID_FILES.HUB),n=qo.join(r,Go,kc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qo.join(r,Go,kc.NATS_CONFIG_FILES.HUB_SERVER),c=qo.join(r,Go,kc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await DS.checkNATSServerInstalled()||cd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await LS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await LS.getClusterUser();(xo.isEmpty(A)||A.active!==!0)&&cd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await id(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await id(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===od.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new tZ(te.username,GD.decrypt(te.hash))),N.push(new eZ(te.username,GD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let q=new jj(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===od.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ad.writeJson(o,q),Vc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Zj(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===od.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ad.writeJson(c,B),Vc.trace(`Leaf server config written to ${c}`))}a(nZ,"generateNatsConfig");async function id(e){let t=$c.get(e);return xo.isEmpty(t)&&cd(`port undefined for '${e}'`),await xo.isPortTaken(t)&&cd(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(id,"isPortAvailable");function cd(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(cd,"generateNatsConfigError");async function iZ(e){let{port:t,config_file:r}=DS.getServerConfig(e),{username:s,decrypt_hash:n}=await LS.getClusterUser(),i=0,o=2e3;for(;i<xD;){try{let _=await DS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=xD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await xo.async_set_timeout(o*(i*2))}let c="0".repeat(rZ),u=qo.join($c.get(je.ROOTPATH),Go,r);await ad.writeFile(u,c),await ad.remove(u),Vc.notify(e,"started.")}a(iZ,"removeNatsConfig")});var dd=T((kle,zD)=>{"use strict";var oZ=require("minimist"),{isMainThread:vS,parentPort:YD}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Yc}=Ve,Fs=G(),BS=$(),ud=US(),ko=_t(),MS=ke(),KD=Er(),qs=FS(),VD=Fo(),aZ=sE(),{restartWorkers:ld,onMessageByType:cZ}=Ze(),{handleHDBError:uZ,hdb_errors:lZ}=j(),{HTTP_STATUS_CODES:_Z}=lZ,_d=X();_d.initSync();var Kc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,dZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",$D="Clustering is not enabled so cannot be restarted",fZ="Invalid service",Vo,$r;zD.exports={restart:WD,restartService:HS};vS&&cZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?HS({service:e.workerType}):WD({operation:"restart"})});async function WD(e){$r=Object.keys(e).length===0,Vo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=oZ(process.argv);if(t.service){await HS(t);return}if($r&&!Vo){console.error(dZ);return}if($r&&console.log(Kc),Vo){qs.enterPM2Mode(),Fs.notify(Kc);let r=aZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return BS.isEmptyOrZeroLength(Object.keys(r))||KD.updateConfigValue(void 0,void 0,r,!0,!0),hZ(),Kc}return vS?(Fs.notify(Kc),setTimeout(()=>{ld()},50)):YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Kc}a(WD,"restart");async function HS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw uZ(new Error,fZ,_Z.BAD_REQUEST,void 0,void 0,!0);if(Vo=await qs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!vS)return YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yc.clustering:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}$r&&console.log("Restarting clustering"),Fs.notify("Restarting clustering"),await QD();break;case Yc.clustering_config:case Yc["clustering config"]:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}$r&&console.log("Restarting clustering_config"),Fs.notify("Restarting clustering_config"),await qs.reloadClustering();break;case"custom_functions":case"custom functions":case Yc.harperdb:case Yc.http_workers:if($r&&!Vo){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}$r&&console.log("Restarting http_workers"),Fs.notify("Restarting http_workers"),$r?await qs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ld("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(HS,"restartService");async function EZ(){await ko.publishToStream(`${MS.SUBJECT_PREFIXES.TXN}.${MS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,MS.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(EZ,"postDummyNatsMsg");async function hZ(){await QD(),await qs.restart(Ve.HDB_PROC_DESCRIPTOR),await BS.async_set_timeout(2e3),_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await PS(),$r&&(await ko.closeConnection(),process.exit(0))}a(hZ,"restartPM2Mode");async function QD(){if(!KD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await VD.getHDBProcessInfo()).clustering.length===0)Fs.trace("Clustering not running, restart will start clustering services"),await ud.generateNatsConfig(!0),await qs.startClusteringProcesses(),await qs.startClusteringThreads(),await PS(),$r&&await ko.closeConnection();else{await EZ(),await ud.generateNatsConfig(!0),Vo?(Fs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await qs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await VD.getHDBProcessInfo()).clustering.forEach(n=>{Fs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await BS.async_set_timeout(3e3),await PS(),await ko.updateLocalStreams(),$r&&await ko.closeConnection(),Fs.trace("Restart clustering restarting ingest and reply service threads");let t=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(QD,"restartClustering");async function PS(){await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(PS,"removeNatsConfig")});var oU=T((Yle,iU)=>{"use strict";var $le=require("lodash"),nr=b(),{handleHDBError:JD,hdb_errors:mZ}=j(),{HDB_ERROR_MSGS:pZ,HTTP_STATUS_CODES:SZ}=mZ,qS=G();iU.exports={getRolePermissions:RZ};var vi=Object.create(null),TZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),eU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tU=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),GS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...tU(t,r,s,n)}),"table_perms_template"),XD=a((e,t=tU())=>({attribute_name:e,describe:nU(t),[Wc]:t[Wc],[xS]:t[xS],[kS]:t[kS]}),"attr_perms_template"),jD=a((e,t=!1)=>({attribute_name:e,describe:t,[Wc]:t}),"timestamp_attr_perms_template"),{READ:Wc,INSERT:xS,UPDATE:kS}=nr.PERMS_CRUD_ENUM,rU=Object.values(nr.PERMS_CRUD_ENUM),sU=[Wc,xS,kS];function RZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=gZ(e,r);return vi[t]?vi[t].key=s:vi[t]=TZ(s),vi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw qS.error(s),qS.debug(r),JD(new Error,pZ.OUTDATED_PERMS_TRANSLATION_ERROR,SZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
-
${r.stack}`;throw qS.error(s),JD(new Error)}}}a(RZ,"getRolePermissions");function gZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=AZ(t[i]);return}r[i]=eU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=OZ(c,u);r[i].describe||rU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=GS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=GS()})}),r}a(gZ,"translateRolePermissions");function AZ(e){let t=eU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=GS(!0,!0,!0,!0,!0)}),t}a(AZ,"createStructureUserPermissions");function OZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return nr.TIME_STAMP_NAMES.includes(d)&&(f=jD(d,l[Wc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=XD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=nU(l),n.attribute_permissions.push(l),c||NZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=jD(_):l=XD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=ZD(n),n}else return e.describe=ZD(e),e}a(OZ,"getTableAttrPerms");function ZD(e){return rU.filter(t=>e[t]).length>0}a(ZD,"getSchemaTableDescribePerm");function nU(e){return sU.filter(t=>e[t]).length>0}a(nU,"getAttributeDescribePerm");function NZ(e,t){sU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(NZ,"checkForHashPerms")});var aU={};Qe(aU,{Resources:()=>fd,keyArrayToString:()=>$o,resetResources:()=>bZ,resources:()=>Qn});function bZ(){return Qn=new fd}function $o(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fd,Qn,Qc=Te(()=>{di();fd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(bZ,"resetResources");a($o,"keyArrayToString")});var Bi,VS=Te(()=>{Bi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var zc={};Qe(zc,{authentication:()=>hU,bypassAuth:()=>UZ,login:()=>PZ,logout:()=>vZ,start:()=>MZ});function UZ(){EU=!0}async function hU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?CZ?wZ:[]:IZ?yZ:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ed&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ed&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ed){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await uU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new md.AuthAuditLog(E,h,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?cU.notify(S):cU.error(S)},"authAuditLog"),d;if(s){if(d=Hi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,hd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,hd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return DZ&&(Hi.get(h)||(Hi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:zn({error:A.message},e)})}Hi.set(s,d),LZ&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):EU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,_U.getSuperUser)());Ed&&(e.session.update=function(E){if(!u){u=(0,dU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,uU.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Qn.loginPath?(f.status=302,f.headers.set("Location",Qn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Bi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function MZ({server:e,port:t}){e.request(hU,{port:t||"all"}),lU||(lU=!0,setInterval(()=>{Hi=new Map},Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),fU.user.addListener(()=>{Hi=new Map}))}async function PZ(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function vZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var _U,hd,dU,Yr,wt,md,fU,cU,yZ,IZ,wZ,CZ,uU,Ed,EU,LZ,DZ,Hi,lU,pd=Te(()=>{_U=D(Gr());Ur();Qc();hd=D(Uc());fe();dU=require("uuid"),Yr=D(X()),wt=D(b()),md=D(G()),fU=D(sc());VS();Yo();cU=(0,md.loggerWithTag)("auth-event");Yr.initSync();yZ=Yr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),IZ=Yr.get(wt.CONFIG_PARAMS.HTTP_CORS),wZ=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),CZ=Yr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),uU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ed=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,EU=Yr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,LZ=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,DZ=Yr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;ut.onInvalidatedUser(()=>{Hi=new Map});a(UZ,"bypassAuth");a(hU,"authentication");a(MZ,"start");a(PZ,"login");a(vZ,"logout")});var AU=T((s_e,gU)=>{"use strict";var pe=require("joi"),mU=require("fs-extra"),pU=require("path"),_n=qe(),SU=X(),TU=b(),RU=G(),{hdb_errors:BZ}=j(),{HDB_ERROR_MSGS:xt}=BZ,ln=/^[a-zA-Z0-9-_]+$/;gU.exports={getDropCustomFunctionValidator:FZ,setCustomFunctionValidator:qZ,addComponentValidator:VZ,dropCustomFunctionProjectValidator:$Z,packageComponentValidator:YZ,deployComponentValidator:KZ,setComponentFileValidator:GZ,getComponentFileValidator:kZ,dropComponentFileValidator:xZ};function Sd(e,t,r){try{let s=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),n=pU.join(s,t);return mU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return RU.error(s),r.message(xt.VALIDATION_ERR)}}a(Sd,"checkProjectExists");function Jc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Jc,"checkFilePath");function HZ(e,t,r,s){try{let n=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),i=pU.join(n,e,t,r+".js");return mU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return RU.error(n),s.message(xt.VALIDATION_ERR)}}a(HZ,"checkFileExists");function FZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(ln).custom(HZ.bind(null,e.project,e.type)).custom(Jc).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return _n.validateBySchema(e,t)}a(FZ,"getDropCustomFunctionValidator");function qZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Jc).required(),function_content:pe.string().required()});return _n.validateBySchema(e,t)}a(qZ,"setCustomFunctionValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(GZ,"setComponentFileValidator");function xZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).optional()});return _n.validateBySchema(e,t)}a(xZ,"dropComponentFileValidator");function kZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Jc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(kZ,"getComponentFileValidator");function VZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(VZ,"addComponentValidator");function $Z(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a($Z,"dropCustomFunctionProjectValidator");function YZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return _n.validateBySchema(e,t)}a(YZ,"packageComponentValidator");function KZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:pe.string().optional()});return _n.validateBySchema(e,t)}a(KZ,"deployComponentValidator")});var Ad=T((i_e,CU)=>{"use strict";var Td=require("joi"),Rd=require("path"),OU=require("fs-extra"),{exec:WZ}=require("child_process"),QZ=require("util"),NU=QZ.promisify(WZ),Xc=b(),{handleHDBError:Ko,hdb_errors:zZ}=j(),{HTTP_STATUS_CODES:Wo}=zZ,jc=X(),JZ=qe(),Qo=G();jc.initSync();var $S=jc.get(Xc.CONFIG_PARAMS.COMPONENTSROOT),bU="npm install --omit=dev --json",XZ=`${bU} --dry-run`;CU.exports={installModules:t5,auditModules:r5,installAllRootModules:jZ,uninstallRootModule:ZZ,linkHarperdb:e5};async function jZ(e=!1){await gd(),await Zc(e?"npm install --ignore-scripts":"npm install",jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(jZ,"installAllRootModules");async function ZZ(e){await Zc(`npm uninstall ${e}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(ZZ,"uninstallRootModule");async function e5(){await gd(),await Zc(`npm link ${Xc.PACKAGE_ROOT}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(e5,"linkHarperdb");async function Zc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await NU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
8
|
+
`,"")}a(sC,"runCommand");async function GJ(){try{await SJ.access(up)}catch{return!1}let e=await sC(`${up} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return TJ.eq(t,FJ)}a(GJ,"checkNATSServerInstalled");async function fp(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Zw.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Vr.trace("create nats connection called");let i=await LJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile: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(fp,"createConnection");async function xJ(){Ss&&(await Ss.drain(),Ss=void 0,yo=void 0,Io=void 0,wo=void 0)}a(xJ,"closeConnection");var Ss,wo;async function y_(){return wo||(wo=fp(It.get(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await wo),Ss||wo}a(y_,"getConnection");async function yc(){if(yo)return yo;Ci(Ss)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return yo=await Ss.jetstreamManager({domain:e,timeout:6e4}),yo}a(yc,"getJetStreamManager");async function nC(){if(Io)return Io;Ci(Ss)&&await y_();let{domain:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Io=Ss.jetstream({domain:e,timeout:6e4}),Io}a(nC,"getJetStream");async function Xt(){let e=Ss||await y_(),t=yo||await yc(),r=Io||await nC();return{connection:e,jsm:t,js:r}}a(Xt,"getNATSReferences");async function kJ(e){let t=It.get(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Zw.getClusterUser(),n=await fp(t,r,s),i=dp(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=rC.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await lp.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(kJ,"getServerList");async function Ep(e,t){let{jsm:r}=await Xt(),s=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:eC.File,retention:tC.Limits,subjects:t,discard:DJ.Old,max_msgs:n,max_bytes:i,max_age:s})}a(Ep,"createLocalStream");async function iC(){let{jsm:e}=await Xt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(iC,"listStreams");async function VJ(e){let{jsm:t}=await Xt();await t.streams.delete(e)}a(VJ,"deleteLocalStream");async function $J(e){let{connection:t}=await Xt(),r=[],s=dp(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(rC.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a($J,"listRemoteStreams");async function YJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=_p(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(ge.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(YJ,"viewStream");async function*KJ(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Xt(),i=Jw(),o={durable_name:i,ack_policy:N_.Explicit};t&&(o.deliver_policy=b_.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=_p(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(ge.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(KJ,"viewStreamIterator");async function WJ(e,t,r,s){Vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=oC(s,r);let{js:n}=await Xt(),i=await wc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:jw.encode(s);try{Vr.trace(`publishToStream publishing to subject: ${o}`),BJ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return lC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Vr.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await Ep(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(WJ,"publishToStream");function oC(e,t){t===void 0&&(t=MJ());let r=It.get(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(ge.MSG_HEADERS.ORIGIN)&&r&&t.append(ge.MSG_HEADERS.ORIGIN,r),t}a(oC,"addNatsMsgHeader");function Ic(e){e=e.toLowerCase();let t=bc.join(It.get(Oe.CONFIG_PARAMS.ROOTPATH),HJ);if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(cp)&&(cp={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.HUB,config_file:ge.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:bc.join(t,ge.PID_FILES.HUB),hdb_nats_path:t}),cp;if(e===Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(ap)&&(ap={port:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,config_file:ge.NATS_CONFIG_FILES.LEAF_SERVER,domain:Oc.getConfigFromFile(Oe.CONFIG_PARAMS.CLUSTERING_NODENAME)+ge.SERVER_SUFFIX.LEAF,pid_file_path:bc.join(t,ge.PID_FILES.LEAF),hdb_nats_path:t}),ap;Vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ic,"getServerConfig");async function QJ(e){let{jsm:t}=await Xt(),r=await wc();try{await t.streams.add({name:e.stream_name,storage:eC.File,retention:tC.Limits,max_age:wJ,max_bytes:CJ,subjects:[`${ge.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:N_.Explicit,durable_name:e.durable_name,deliver_policy:b_.All,max_ack_pending:1e4});else throw s}}a(QJ,"createWorkQueueStream");async function zJ(){let{jsm:e}=await Xt();(await e.consumers.info(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,ge.WORK_QUEUE_CONSUMER_NAMES.durable_name),Vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:N_.Explicit,durable_name:ge.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:b_.All,max_ack_pending:1e4}))}a(zJ,"updateIngestStreamConsumer");async function aC(e,t,r){let{jsm:s}=await Xt(),n=await s.streams.info(t),i=cC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=O_.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,S=n.config.sources.length;p<S;p++)if(d=n.config.sources[p],f=p,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${ge.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(aC,"addSourceToWorkStream");function cC(e){return e.split(".")[1]}a(cC,"extractServerName");async function uC(e,t,r){let{jsm:s}=await Xt(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=O_.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(uC,"removeSourceFromWorkStream");async function JJ(e,t,r=6e4,s=dp()){if(!lp.isObject(t))throw new Error("data param must be an object");let n=jw.encode(t),{connection:i}=await Xt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return _p(c.data)}a(JJ,"request");function hp(e){return new Promise(async(t,r)=>{let s=OJ(up,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(hp,"reloadNATS");async function XJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await hp(e)}a(XJ,"reloadNATSHub");async function jJ(){let{pid_file_path:e}=Ic(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await hp(e)}a(jJ,"reloadNATSLeaf");function ZJ(e,t,r){let s;switch(e.code){case zw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case zw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(ZJ,"requestErrorHandler");async function e2(e,t){let r=t+ge.SERVER_SUFFIX.LEAF;await lC(async()=>{e.subscribe===!0?await aC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uC(r,ge.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(e2,"updateWorkStream");function lC(e){return NJ.writeTransaction(Oe.SYSTEM_SCHEMA_NAME,Oe.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lC,"exclusiveLock");async function _C(e,t){let r=O_.createNatsTableStreamName(e,t),s=await wc(),n=n2(e,t,s);await Ep(r,[n])}a(_C,"createLocalTableStream");async function t2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await _C(s,n)}}a(t2,"createTableStreams");async function dC(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=O_.createNatsTableStreamName(e,t),{jsm:s}=await Xt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Vr.warn(r);else throw r}}a(dC,"purgeTableStream");async function r2(e,t){if(It.get(Oe.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await dC(e,t[r])}a(r2,"purgeSchemaTableStreams");async function s2(e){return(await yc()).streams.info(e)}a(s2,"getStreamInfo");function n2(e,t,r){return`${ge.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(n2,"createSubjectName");async function wc(){if(Nc)return Nc;if(Nc=(await yc())?.nc?.info?.server_name,Nc===void 0)throw new Error("Unable to get jetstream manager server name");return Nc}a(wc,"getJsmServerName");async function i2(){let e=await yc(),t=await wc(),r=await iC();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=o2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${ge.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");Vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(i2,"updateLocalStreams");function o2(e){let{config:t}=e,r=!1;if(t.name===ge.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===ge.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=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(o2,"updateStreamLimits")});var L_=T((zce,pC)=>{"use strict";var Co=Hl(),Lo=Cw(),a2=G(),c2=require("uuid").v4,Qce=require("clone"),w_=on(),Do=b(),u2=require("util"),kn=_s(),{handleHDBError:jt,hdb_errors:l2}=j(),{HDB_ERROR_MSGS:I_,HTTP_STATUS_CODES:Zt}=l2,{SchemaEventMsg:C_}=ds(),EC=dt(),{getDatabases:_2}=(fe(),Z(Ce)),{transformReq:Uo}=$();pC.exports={createSchema:d2,createSchemaStructure:hC,createTable:f2,createTableStructure:mC,createAttribute:S2,dropSchema:E2,dropTable:h2,dropAttribute:m2,getBackup:T2};async function d2(e){let t=await hC(e);return w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),t}a(d2,"createSchema");async function hC(e){let t=Co.schema_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Uo(e),!await Lo.checkSchemaExists(e.schema))throw jt(new Error,I_.SCHEMA_EXISTS_ERR(e.schema),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.SCHEMA_EXISTS_ERR(e.schema),!0);return await kn.createSchema(e),`database '${e.schema}' successfully created`}a(hC,"createSchemaStructure");async function f2(e){return Uo(e),e.hash_attribute=e.primary_key??e.hash_attribute,await mC(e)}a(f2,"createTable");async function mC(e){let t=Co.create_table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);if(Co.validateTableResidence(e.residence),!await Lo.checkSchemaTableExists(e.schema,e.table))throw jt(new Error,I_.TABLE_EXISTS_ERR(e.schema,e.table),Zt.BAD_REQUEST,Do.LOG_LEVELS.ERROR,I_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:c2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await kn.createTable(s,e);else throw jt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Zt.BAD_REQUEST);else await kn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(mC,"createTableStructure");async function E2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Co.schema_object(e),s=t??r;if(s)throw jt(s,s.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let n=await Lo.checkSchemaExists(e.schema);if(n)throw jt(new Error,n,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,n,!0);let i=await Lo.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await kn.dropSchema(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema)),await EC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(E2,"dropSchema");async function h2(e){let t=Co.table_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);return await kn.dropTable(e),await EC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(h2,"dropTable");async function m2(e){let t=Co.attribute_object(e);if(t)throw jt(t,t.message,Zt.BAD_REQUEST,void 0,void 0,!0);Uo(e);let r=await Lo.checkSchemaTableExists(e.schema,e.table);if(r)throw jt(new Error,r,Zt.NOT_FOUND,Do.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw jt(new Error,"You cannot drop a hash attribute",Zt.BAD_REQUEST,void 0,void 0,!0);if(Do.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw jt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Zt.BAD_REQUEST,void 0,void 0,!0);try{return await kn.dropAttribute(e),p2(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw a2.error(`Got an error deleting attribute ${u2.inspect(e)}.`),s}}a(m2,"dropAttribute");function p2(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(p2,"dropAttributeFromGlobal");async function S2(e){Uo(e);let t=_2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw jt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Zt.BAD_REQUEST,void 0,void 0,!0);return await kn.createAttribute(e),w_.signalSchemaChange(new C_(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(S2,"createAttribute");function T2(e){return kn.getBackup(e)}a(T2,"getBackup")});var TC=T((Xce,SC)=>{"use strict";var{OPERATIONS_ENUM:R2}=b(),mp=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=R2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};SC.exports=mp});var pp=T((eue,NC)=>{"use strict";var g2=_s(),Zce=TC(),D_=$(),U_=b(),A2=X(),{handleHDBError:RC,hdb_errors:O2}=j(),{HDB_ERROR_MSGS:gC,HTTP_STATUS_CODES:AC}=O2,N2=Object.values(U_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),OC="To use this operation audit log must be enabled in harperdb-config.yaml";NC.exports=b2;async function b2(e){if(D_.isEmpty(e.schema))throw new Error(gC.SCHEMA_REQUIRED_ERR);if(D_.isEmpty(e.table))throw new Error(gC.TABLE_REQUIRED_ERR);if(!A2.get(U_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw RC(new Error,OC,AC.BAD_REQUEST,U_.LOG_LEVELS.ERROR,OC,!0);let t=D_.checkSchemaTableExist(e.schema,e.table);if(t)throw RC(new Error,t,AC.NOT_FOUND,U_.LOG_LEVELS.ERROR,t,!0);if(!D_.isEmpty(e.search_type)&&N2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await g2.readAuditLog(e)}a(b2,"readAuditLog")});var yC=T((rue,bC)=>{"use strict";var{OPERATIONS_ENUM:y2}=b(),Sp=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=y2.GET_BACKUP,this.schema=t,this.table=r}};bC.exports=Sp});var CC=T((oue,wC)=>{"use strict";var I2=_s(),nue=yC(),Tp=$(),w2=b(),iue=X(),{handleHDBError:C2,hdb_errors:L2}=j(),{HDB_ERROR_MSGS:IC,HTTP_STATUS_CODES:D2}=L2;wC.exports=U2;async function U2(e){if(Tp.isEmpty(e.schema))throw new Error(IC.SCHEMA_REQUIRED_ERR);if(Tp.isEmpty(e.table))throw new Error(IC.TABLE_REQUIRED_ERR);let t=Tp.checkSchemaTableExist(e.schema,e.table);if(t)throw C2(new Error,t,D2.NOT_FOUND,w2.LOG_LEVELS.ERROR,t,!0);return await I2.getBackup(read_audit_log_object)}a(U2,"getBackup")});var vC=T((cue,PC)=>{var Vn=require("validate.js"),DC=qe(),Mo=b(),{handleHDBError:M2,hdb_errors:P2}=j(),{HDB_ERROR_MSGS:Xe,HTTP_STATUS_CODES:v2}=P2,Rp=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),B2={STRUCTURE_USER:"structure_user"},LC=Object.values(Mo.ROLE_TYPES_ENUM),H2="attribute_permissions",F2="attribute_name",{PERMS_CRUD_ENUM:Po}=Mo,q2=[H2,...Object.values(Po)],UC=[Po.READ,Po.INSERT,Po.UPDATE],G2=[F2,...UC];function x2(e){let t=Rp();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,MC(e,t)}a(x2,"addRoleValidation");function k2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,MC(e,t)}a(k2,"alterRoleValidation");function V2(e){let t=Rp();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,DC.validateObject(e,t)}a(V2,"dropRoleValidation");var $2=["operation","role","id","permission","hdb_user","hdb_auth_header"];function MC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)$2.includes(s[o])||n.push(s[o]);n.length>0&&st(Xe.INVALID_ROLE_JSON_KEYS(n),r);let i=DC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=Y2(e);o&&st(o,r),LC.forEach(c=>{e.permission[c]&&!Vn.isBoolean(e.permission[c])&&st(Xe.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(LC.indexOf(o)<0){if(o===B2.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||st(Xe.SCHEMA_NOT_FOUND(d),r)}continue}st(Xe.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(Xe.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){st(Xe.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{q2.includes(l)||st(Xe.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Po).forEach(l=>{Vn.isDefined(_[l])?Vn.isBoolean(_[l])||st(Xe.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):st(Xe.TABLE_PERM_MISSING(l),r,o,u)}),Vn.isDefined(_.attribute_permissions)){if(!Vn.isArray(_.attribute_permissions)){st(Xe.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(Xe.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(p=>{!G2.includes(p)&&p!==Po.DELETE&&st(Xe.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Vn.isDefined(E.attribute_name)){st(Xe.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){st(Xe.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}UC.forEach(p=>{Vn.isDefined(E[p])?Vn.isBoolean(E[p])||st(Xe.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(Xe.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;st(Xe.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return K2(r)}a(MC,"customValidate");PC.exports={addRoleValidation:x2,alterRoleValidation:k2,dropRoleValidation:V2};function Y2(e){let{operation:t,permission:r}=e;if(t===Mo.OPERATIONS_ENUM.ADD_ROLE||t===Mo.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Xe.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Mo.ROLE_TYPES_ENUM.SUPER_USER:Mo.ROLE_TYPES_ENUM.CLUSTER_USER;return Xe.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(Y2,"validateNoSUPerms");function K2(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Xe.ROLE_PERMS_ERROR,...e};return M2(new Error,s,v2.BAD_REQUEST)}else return null}a(K2,"generateRolePermResponse");function st(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(st,"addPermError")});var yp=T((lue,qC)=>{"use strict";var BC=Gr(),HC=qr(),W2=Ai(),Ap=vC(),Op=on(),Q2=require("uuid").v4,z2=require("util"),M_=b(),J2=$(),Np=HC.searchByValue,X2=HC.searchByHash,j2=z2.promisify(W2.delete),Z2=vs(),e4=Oo(),{hdb_errors:t4,handleHDBError:vo}=j(),{HDB_ERROR_MSGS:FC,HTTP_STATUS_CODES:P_}=t4,{UserEventMsg:bp}=ds();qC.exports={addRole:r4,alterRole:s4,dropRole:n4,listRoles:i4};function gp(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(gp,"scrubRoleDetails");async function r4(e){let t=Ap.addRoleValidation(e);if(t)throw t;e=gp(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Np(r)||[])}catch(i){throw vo(i)}if(s&&s.length>0)throw vo(new Error,FC.ROLE_ALREADY_EXISTS(e.role),P_.CONFLICT,void 0,void 0,!0);e.id||(e.id=Q2());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await BC.insert(n),Op.signalUserChange(new bp(process.pid)),e=gp(e),e}a(r4,"addRole");async function s4(e){let t=Ap.alterRoleValidation(e);if(t)throw t;e=gp(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await BC.update(r)}catch(n){throw vo(n)}if(s&&s?.message==="updated 0 of 1 records")throw vo(new Error,"Invalid role id",P_.BAD_REQUEST,void 0,void 0,!0);return await Op.signalUserChange(new bp(process.pid)),e}a(s4,"alterRole");async function n4(e){let t=Ap.dropRoleValidation(e);if(t)throw vo(new Error,t,P_.BAD_REQUEST,void 0,void 0,!0);let r=new e4(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await X2(r));if(s.length===0)throw vo(new Error,FC.ROLE_NOT_FOUND,P_.NOT_FOUND,void 0,void 0,!0);let n=new Z2(M_.SYSTEM_SCHEMA_NAME,M_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Np(n)),o=!1;if(J2.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await j2(c),Op.signalUserChange(new bp(process.pid)),`${s[0].role} successfully deleted`}a(n4,"dropRole");async function i4(){return Np({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(i4,"listRoles")});var VC=T((due,kC)=>{"use strict";var o4=X(),$n=require("joi"),a4=qe(),GC=require("moment"),c4=require("fs-extra"),Ip=require("path"),u4=require("lodash"),Cc=b(),{LOG_LEVELS:Li}=b(),l4="YYYY-MM-DD hh:mm:ss",_4=Ip.resolve(__dirname,"../logs");kC.exports=function(e){return a4.validateBySchema(e,d4)};var d4=$n.object({from:$n.custom(xC),until:$n.custom(xC),level:$n.valid(Li.NOTIFY,Li.FATAL,Li.ERROR,Li.WARN,Li.INFO,Li.DEBUG,Li.TRACE),order:$n.valid("asc","desc"),limit:$n.number().min(1),start:$n.number().min(0),log_name:$n.custom(f4)});function xC(e,t){if(GC(e,GC.ISO_8601).format(l4)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(xC,"validateDatetime");function f4(e,t){if(u4.invert(Cc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=o4.get(Cc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Cc.LOG_NAMES.HDB:e,i=n===Cc.LOG_NAMES.INSTALL?Ip.join(_4,Cc.LOG_NAMES.INSTALL):Ip.join(s,n);return c4.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(f4,"validateReadLogPath")});var Cp=T((Eue,YC)=>{"use strict";var v_=b(),E4=G(),h4=X(),m4=VC(),wp=require("path"),$C=require("fs-extra"),{once:p4}=require("events"),{handleHDBError:S4,hdb_errors:T4}=j(),{PACKAGE_ROOT:R4}=b(),g4=wp.join(R4,"logs"),A4=1e3,O4=200;YC.exports=N4;async function N4(e){let t=m4(e);if(t)throw S4(t,t.message,T4.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=h4.get(v_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?v_.LOG_NAMES.HDB:e.log_name,n=s===v_.LOG_NAMES.INSTALL?wp.join(g4,v_.LOG_NAMES.INSTALL):wp.join(r,s),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?A4:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max($C.statSync(n).size-(h+5)*O4,0));let S=$C.createReadStream(n,{start:p});S.on("error",q=>{E4.error(q)});let A=0,I=[],N="",Y;S.on("data",q=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;q=N+q;let K=0,B;for(;(B=w.exec(q))&&!S.destroyed;){Y&&(Y.message=q.slice(K,B.index),Q(Y));let[x,te,be]=B,se=be.split("] ["),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=q.slice(K)}),S.on("end",q=>{S.destroyed||Y&&(Y.message=N.trim(),Q(Y))}),S.resume();function Q(q){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),q.level===o&&w>=K&&w<=B&&A<E?A++:q.level===o&&w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(q.timestamp),K=new Date(u),q.level===o&&w>=K&&A<E?A++:q.level===o&&w>=K&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(q.timestamp),B=new Date(l),q.level===o&&w<=B&&A<E?A++:q.level===o&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(q.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case i:q.level===o&&A<E?A++:q.level===o&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case c:w=new Date(q.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;case _:w=new Date(q.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yn(q,f,I),A++,A===h&&S.destroy());break;default:A<E?A++:(Yn(q,f,I),A++,A===h&&S.destroy())}}return a(Q,"onLogMessage"),await p4(S,"close"),I}a(N4,"readLog");function Yn(e,t,r){t==="desc"?b4(e,r):t==="asc"?y4(e,r):r.push(e)}a(Yn,"pushLineToResult");function b4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(b4,"insertDescending");function y4(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(y4,"insertAscending")});var H_=T((Tue,zC)=>{"use strict";var Lp=require("joi"),{string:B_,boolean:KC,date:I4}=Lp.types(),w4=qe(),{validateSchemaExists:mue,validateTableExists:pue,validateSchemaName:Sue}=Ds(),C4=b(),L4=ke(),WC=X();WC.initSync();var D4=B_.invalid(WC.get(C4.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(L4.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),QC={operation:B_.valid("add_node","update_node"),node_name:D4,subscriptions:Lp.array().items({table:B_.optional(),schema:B_.required(),subscribe:KC.required(),publish:KC.required().custom(M4),start_time:I4.iso()}).min(1).required()};function U4(e){return w4.validateBySchema(e,Lp.object(QC))}a(U4,"addUpdateNodeValidator");function M4(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(M4,"checkForFalsy");zC.exports={addUpdateNodeValidator:U4,validation_schema:QC}});var XC=T((gue,JC)=>{var P4=qe(),v4={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};JC.exports=function(e){return P4.validateObject(e,v4)}});var Up=T((Aue,jC)=>{"use strict";var B4=b().OPERATIONS_ENUM,Dp=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=B4.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};jC.exports=Dp});var eL=T((Nue,ZC)=>{"use strict";var H4={OPERATION:"operation",REFRESH:"refresh"},Mp=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Pp=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};ZC.exports={JWTTokens:Mp,TOKEN_TYPE_ENUM:H4,JWTRSAKeys:Pp}});var Uc=T((yue,nL)=>{"use strict";var Dc=require("jsonwebtoken"),vp=require("fs-extra"),Bp=$(),$r=b(),{handleHDBError:er,hdb_errors:F4}=j(),{HTTP_STATUS_CODES:tr,AUTHENTICATION_ERROR_MSGS:rr}=F4,Lc=G(),tL=Jl(),qp=xr(),q4=Gr().update,G4=Up(),x4=on(),{UserEventMsg:k4}=ds(),Kn=X();Kn.initSync();var Hp=require("path"),{JWTTokens:V4,JWTRSAKeys:$4,TOKEN_TYPE_ENUM:F_}=eL(),Y4=Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",K4=Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Kn.get($r.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",q_="RS256",Fp;nL.exports={createTokens:W4,validateOperationToken:z4,refreshOperationToken:Q4,validateRefreshToken:sL};async function W4(e){if(Bp.isEmpty(e)||typeof e!="object")throw er(new Error,rr.INVALID_AUTH_OBJECT,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.username))throw er(new Error,rr.USERNAME_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);if(Bp.isEmpty(e.password))throw er(new Error,rr.PASSWORD_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qp.findAndValidateUser(e.username,e.password),!t)throw er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Lc.error(f),er(new Error,rr.INVALID_CREDENTIALS,tr.UNAUTHORIZED,void 0,void 0,!0)}let r=await G_(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await rL(i,r.private_key,r.passphrase),c=await Dc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:K4,algorithm:q_,subject:F_.REFRESH}),u=tL.hash(c),_=new G4($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await q4(_)}catch(f){Lc.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw er(new Error,rr.REFRESH_TOKEN_SAVE_FAILED,tr.INTERNAL_SERVER_ERROR);return x4.signalUserChange(new k4(process.pid)),new V4(o,c)}a(W4,"createTokens");async function rL(e,t,r){return await Dc.sign(e,{key:t,passphrase:r},{expiresIn:Y4,algorithm:q_,subject:F_.OPERATION})}a(rL,"signOperationToken");async function G_(){if(Fp===void 0)try{let e=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Hp.join(Kn.getHdbBasePath(),$r.LICENSE_KEY_DIR_NAME,$r.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await vp.readFile(e)).toString(),n=(await vp.readFile(t)).toString(),i=(await vp.readFile(r)).toString();Fp=new $4(i,n,s)}catch(e){throw Lc.error(e),er(new Error,rr.NO_ENCRYPTION_KEYS,tr.INTERNAL_SERVER_ERROR)}return Fp}a(G_,"getJWTRSAKeys");async function Q4(e){if(!e)throw er(new Error,rr.INVALID_BODY,tr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw er(new Error,rr.REFRESH_TOKEN_REQUIRED,tr.BAD_REQUEST,void 0,void 0,!0);await sL(e.refresh_token);let t=await G_(),r=await Dc.decode(e.refresh_token);return{operation_token:await rL({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(Q4,"refreshOperationToken");async function z4(e){try{let t=await G_(),r=await Dc.verify(e,t.public_key,{algorithms:q_,subject:F_.OPERATION});return await qp.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Lc.warn(t),t.name&&t.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}}a(z4,"validateOperationToken");async function sL(e){let t;try{let r=await G_(),s=await Dc.verify(e,r.public_key,{algorithms:q_,subject:F_.REFRESH});t=await qp.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Lc.warn(r),r.name&&r.name==="TokenExpiredError"?er(new Error,rr.TOKEN_EXPIRED,tr.FORBIDDEN):er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED)}if(!tL.validate(t.refresh_token,e))throw er(new Error,rr.INVALID_TOKEN,tr.UNAUTHORIZED);return t}a(sL,"validateRefreshToken")});var Gp=T((Cue,aL)=>{"use strict";var J4=XC(),Bo=require("passport"),X4=require("passport-local").Strategy,j4=require("passport-http").BasicStrategy,Z4=require("util"),e3=xr(),oL=Z4.callbackify(e3.findAndValidateUser),wue=dr(),t3=b(),iL=Uc();Bo.use(new X4(function(e,t,r){oL(e,t,r)}));Bo.use(new j4(function(e,t,r){oL(e,t,r)}));Bo.serializeUser(function(e,t){t(null,e)});Bo.deserializeUser(function(e,t){t(null,e)});function r3(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":Bo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===t3.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?iL.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):iL.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Bo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(r3,"authorize");function s3(e,t){let r=J4(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(s3,"checkPermissions");aL.exports={authorize:r3,checkPermissions:s3}});var Ho=T((Due,cL)=>{"use strict";var xp=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},kp=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};cL.exports={Node:xp,NodeSubscription:kp}});var lL=T((Mue,uL)=>{"use strict";var n3=b().OPERATIONS_ENUM,Vp=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=n3.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uL.exports=Vp});var Mc=T((vue,_L)=>{"use strict";var $p=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Yp=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};_L.exports={RemotePayloadObject:$p,RemotePayloadSubscription:Yp}});var fL=T((Hue,dL)=>{"use strict";var Kp=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};dL.exports=Kp});var mL=T((kue,hL)=>{"use strict";var i3=fL(),que=ze(),EL=Ue(),o3=G(),{getSchemaPath:Gue,getTransactionAuditStorePath:xue}=ve(),{getDatabases:a3}=(fe(),Z(Ce));hL.exports=c3;async function c3(e){let t=new i3;try{let r=a3()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await EL.environmentDataSize(schema_path,e.name),o=await EL.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){o3.warn(`unable to stat table dbi due to ${r}`)}return t}a(c3,"lmdbGetTableSize")});var SL=T(($ue,pL)=>{"use strict";var Wp=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};pL.exports=Wp});var Fo=T((Que,AL)=>{"use strict";var u3=require("fs-extra"),l3=require("path"),Gt=require("systeminformation"),Wn=G(),_3=dt(),Qp=ke(),k_=b(),d3=mL(),gL=pi(),{getThreadInfo:TL}=Ze(),nS=X();nS.initSync();var f3=SL(),{openEnvironment:Kue}=Ue(),{getSchemaPath:Wue}=ve(),{database:E3}=(fe(),Z(Ce)),x_;AL.exports={getHDBProcessInfo:jp,getNetworkInfo:eS,getDiskInfo:Zp,getMemoryInfo:Xp,getCPUInfo:Jp,getTimeInfo:zp,getSystemInformation:tS,systemInformation:h3,getTableSize:rS,getMetrics:sS};function zp(){return Gt.time()}a(zp,"getTimeInfo");async function Jp(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await 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:q,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...x}=N;I.cpus.push(x)}),l.current_load=I,l}catch(e){return Wn.error(`error in getCPUInfo: ${e}`),{}}}a(Jp,"getCPUInfo");async function Xp(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Gt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wn.error(`error in getMemoryInfo: ${e}`),{}}}a(Xp,"getMemoryInfo");async function jp(){let e={core:[],clustering:[]};try{let t=await Gt.processes(),r;try{r=Number.parseInt(await u3.readFile(l3.join(nS.get(k_.CONFIG_PARAMS.ROOTPATH),k_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===k_.NODE_ERROR_CODES.ENOENT)Wn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Wn.error(`error in getHDBProcessInfo: ${t}`),e}}a(jp,"getHDBProcessInfo");async function Zp(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await 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(Zp,"getDiskInfo");async function eS(){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(eS,"getNetworkInfo");async function tS(){if(x_!==void 0)return x_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Gt.osInfo();e=c;let u=await Gt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,x_=e,x_}catch(t){return Wn.error(`error in getSystemInformation: ${t}`),e}}a(tS,"getSystemInformation");async function rS(){let e=[],t=await gL.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await d3(s));return e}a(rS,"getTableSize");async function sS(){let e=await gL.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=E3({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Wn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(sS,"getMetrics");async function RL(){if(nS.get(k_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await _3.getNATSReferences(),r=await t.streams.info(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Qp.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qp.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(RL,"getNatsStreamInfo");async function h3(e){let t=new f3;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await tS(),t.time=zp(),t.cpu=await Jp(),t.memory=await Xp(),t.disk=await Zp(),t.network=await eS(),t.harperdb_processes=await jp(),t.table_size=await rS(),t.metrics=await sS(),t.threads=await TL(),t.replication=await RL(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await tS();break;case"time":t.time=zp();break;case"cpu":t.cpu=await Jp();break;case"memory":t.memory=await Xp();break;case"disk":t.disk=await Zp();break;case"network":t.network=await eS();break;case"harperdb_processes":t.harperdb_processes=await jp();break;case"table_size":t.table_size=await rS();break;case"database_metrics":case"metrics":t.metrics=await sS();break;case"threads":t.threads=await TL();break;case"replication":t.replication=await RL();break;default:break}return t}a(h3,"systemInformation")});var iS=T((Jue,OL)=>{"use strict";OL.exports={version:m3,printVersion:p3};var V_=Tc();function m3(){if(V_)return V_.version}a(m3,"version");function p3(){V_&&console.log(`HarperDB Version ${V_.version}`)}a(p3,"printVersion")});var un=T((ele,IL)=>{"use strict";var S3=Gr(),oS=$(),T3=require("util"),Di=b(),NL=X();NL.initSync();var R3=Gp(),bL=qr(),{Node:jue,NodeSubscription:Zue}=Ho(),g3=Oo(),A3=lL(),{RemotePayloadObject:O3,RemotePayloadSubscription:N3}=Mc(),{handleHDBError:b3,hdb_errors:y3}=j(),{HTTP_STATUS_CODES:I3,HDB_ERROR_MSGS:w3}=y3,C3=vs(),L3=Fo(),D3=iS(),{getDatabases:U3}=(fe(),Z(Ce)),M3=T3.promisify(R3.authorize),P3=bL.searchByHash,v3=bL.searchByValue;IL.exports={authHeaderToUser:B3,isEmpty:H3,getNodeRecord:F3,upsertNodeRecord:q3,buildNodePayloads:G3,checkClusteringEnabled:x3,getAllNodeRecords:k3,getSystemInfo:V3,reverseSubscription:yL};async function B3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await M3(t,null),e}a(B3,"authHeaderToUser");function H3(e){return e==null}a(H3,"isEmpty");async function F3(e){let t=new g3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return P3(t)}a(F3,"getNodeRecord");async function q3(e){let t=new A3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return S3.upsert(t)}a(q3,"upsertNodeRecord");function yL(e){if(oS.isEmpty(e.subscribe)||oS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(yL,"reverseSubscription");function G3(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=oS.getTableHashAttribute(u,_),{subscribe:d,publish:f}=yL(c),E=U3()[u]?.[_],h=new N3(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new O3(r,t,n,s)}a(G3,"buildNodePayloads");function x3(){if(!NL.get(Di.CONFIG_PARAMS.CLUSTERING_ENABLED))throw b3(new Error,w3.CLUSTERING_NOT_ENABLED,I3.BAD_REQUEST,void 0,void 0,!0)}a(x3,"checkClusteringEnabled");async function k3(){let e=new C3(Di.SYSTEM_SCHEMA_NAME,Di.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await v3(e))}a(k3,"getAllNodeRecords");async function V3(){let e=await L3.getSystemInformation();return{hdb_version:D3.version(),node_version:e.node_version,platform:e.platform}}a(V3,"getSystemInfo")});var aS=T((rle,vL)=>{"use strict";var $_=dt(),wL=$(),CL=ke(),LL=b(),Y_=G(),DL=L_(),$3=Im(),{RemotePayloadObject:Y3}=Mc(),{handleHDBError:UL,hdb_errors:K3}=j(),{HTTP_STATUS_CODES:ML}=K3,{NodeSubscription:PL}=Ho();vL.exports=W3;async function W3(e,t){let r;try{r=await $_.request(`${t}.${CL.REQUEST_SUFFIX}`,new Y3(LL.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Y_.trace("Response from remote describe all request:",r)}catch(o){Y_.error(`addNode received error from describe all request to remote node: ${o}`);let c=$_.requestErrorHandler(o,"add_node",t);throw UL(new Error,c,ML.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===CL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw UL(new Error,o,ML.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===LL.SYSTEM_SCHEMA_NAME){await $_.createLocalTableStream(c,u);let h=new PL(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=wL.doesSchemaExist(c),l=s[c]!==void 0,d=u?wL.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(Y_.trace(`addNode creating schema: ${c}`),await DL.createSchema({operation:"create_schema",schema:c})),!d&&f){Y_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new $3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await DL.createTable(h)}await $_.createLocalTableStream(c,u);let E=new PL(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(W3,"reviewSubscriptions")});var Q_=T((nle,FL)=>{"use strict";var{handleHDBError:K_,hdb_errors:Q3}=j(),{HTTP_STATUS_CODES:W_}=Q3,{addUpdateNodeValidator:z3}=H_(),Pc=G(),HL=b(),BL=ke(),J3=$(),cS=dt(),vc=un(),X3=X(),j3=aS(),{Node:Z3,NodeSubscription:eX}=Ho(),{broadcast:tX}=Ze(),rX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",sX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",nX=X3.get(HL.CONFIG_PARAMS.CLUSTERING_NODENAME);FL.exports=iX;async function iX(e,t=!1){Pc.trace("addNode called with:",e),vc.checkClusteringEnabled();let r=z3(e);if(r)throw K_(r,r.message,W_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await vc.getNodeRecord(s);if(!J3.isEmptyOrZeroLength(d))throw K_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,W_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await j3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=rX,o;let c=vc.buildNodePayloads(n,nX,HL.OPERATIONS_ENUM.ADD_NODE,await vc.getSystemInfo());Pc.trace("addNode sending remote payload:",c);let u;try{u=await cS.request(`${s}.${BL.REQUEST_SUFFIX}`,c)}catch(d){Pc.error(`addNode received error from request: ${d}`);let f=cS.requestErrorHandler(d,"add_node",s);throw K_(new Error,f,W_.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===BL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw K_(new Error,d,W_.INTERNAL_SERVER_ERROR,"error",d)}Pc.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Pc.trace("Add node updating work stream for node:",s,"subscriptions:",E),await cS.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new eX(E.schema,E.table,E.publish,E.subscribe))}let l=new Z3(s,_,u.system_info);return await vc.upsertNodeRecord(l),tX({type:"nats_update"}),i.length>0?o.message=sX:o.message=`Successfully added '${s}' to manifest`,o}a(iX,"addNode")});var lS=T((ole,xL)=>{"use strict";var{handleHDBError:z_,hdb_errors:oX}=j(),{HTTP_STATUS_CODES:J_}=oX,{addUpdateNodeValidator:aX}=H_(),Bc=G(),GL=b(),qL=ke(),cX=$(),uS=dt(),Hc=un(),uX=X(),{cloneDeep:lX}=require("lodash"),_X=aS(),{NodeSubscription:dX}=Ho(),{broadcast:fX}=Ze(),EX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",hX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mX=uX.get(GL.CONFIG_PARAMS.CLUSTERING_NODENAME);xL.exports=pX;async function pX(e){Bc.trace("updateNode called with:",e),Hc.checkClusteringEnabled();let t=aX(e);if(t)throw z_(t,t.message,J_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=lX(await Hc.getNodeRecord(r));if(cX.isEmptyOrZeroLength(s))throw z_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,J_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await _X(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=Hc.buildNodePayloads(n,mX,GL.OPERATIONS_ENUM.UPDATE_NODE,await Hc.getSystemInfo());Bc.trace("updateNode sending remote payload:",c);let u;try{u=await uS.request(`${r}.${qL.REQUEST_SUFFIX}`,c)}catch(_){Bc.error(`updateNode received error from request: ${_}`);let l=uS.requestErrorHandler(_,"update_node",r);throw z_(new Error,l,J_.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===qL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw z_(new Error,_,J_.INTERNAL_SERVER_ERROR,"error",_)}Bc.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Bc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await uS.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await SX(s[0],n,u.system_info),i.length>0?o.message=hX:o.message=`Successfully updated '${r}'`,o}a(pX,"updateNode");async function SX(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new dX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Hc.upsertNodeRecord(s),fX({type:"nats_update"})}a(SX,"updateNodeTable")});var KL=T((cle,YL)=>{"use strict";var $L=require("joi"),{string:kL}=$L.types(),TX=qe(),VL=b(),RX=X(),gX=ke();YL.exports=AX;function AX(e){let t=kL.invalid(RX.get(VL.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(gX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=$L.object({operation:kL.valid(VL.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return TX.validateBySchema(e,r)}a(AX,"removeNodeValidator")});var j_=T((lle,jL)=>{"use strict";var{handleHDBError:WL,hdb_errors:OX}=j(),{HTTP_STATUS_CODES:QL}=OX,NX=KL(),Fc=G(),zL=un(),bX=$(),X_=b(),JL=ke(),XL=dt(),yX=X(),{RemotePayloadObject:IX}=Mc(),{NodeSubscription:wX}=Ho(),CX=_c(),LX=Ai(),{broadcast:DX}=Ze(),UX=yX.get(X_.CONFIG_PARAMS.CLUSTERING_NODENAME);jL.exports=MX;async function MX(e){Fc.trace("removeNode called with:",e),zL.checkClusteringEnabled();let t=NX(e);if(t)throw WL(t,t.message,QL.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await zL.getNodeRecord(r);if(bX.isEmptyOrZeroLength(s))throw WL(new Error,`Node '${r}' was not found.`,QL.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new IX(X_.OPERATIONS_ENUM.REMOVE_NODE,UX,[]),i,o=!1;try{i=await XL.request(`${r}.${JL.REQUEST_SUFFIX}`,n),Fc.trace("Remove node reply from remote node:",r,i)}catch(u){Fc.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Fc.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new wX(l.schema,l.table,!1,!1);await XL.updateWorkStream(d,r)}let c=new CX(X_.SYSTEM_SCHEMA_NAME,X_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await LX.deleteRecord(c),DX({type:"nats_update"}),i?.status===JL.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Fc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(MX,"removeNode")});var tD=T((dle,eD)=>{"use strict";var ZL=require("joi"),{string:PX,array:vX}=ZL.types(),BX=qe(),HX=H_();eD.exports=FX;function FX(e){let t=ZL.object({operation:PX.valid("configure_cluster").required(),connections:vX.items(HX.validation_schema).required()});return BX.validateBySchema(e,t)}a(FX,"configureClusterValidator")});var _S=T((Ele,oD)=>{"use strict";var qX=b(),Z_=G(),GX=$(),xX=j_(),kX=Q_(),rD=un(),VX=tD(),{handleHDBError:sD,hdb_errors:$X}=j(),{HTTP_STATUS_CODES:nD}=$X,YX="Configure cluster complete.",KX="Failed to configure the cluster. Check the logs for more details.",WX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";oD.exports=QX;async function QX(e){Z_.trace("configure cluster called with:",e),rD.checkClusteringEnabled();let t=VX(e);if(t)throw sD(t,t.message,nD.BAD_REQUEST,void 0,void 0,!0);let r=await rD.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(iD(xX,{operation:qX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);Z_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(iD(kX,E,E.node_name))}let c=await Promise.allSettled(i);Z_.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(Z_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(GX.isEmptyOrZeroLength(u))return{message:YX,connections:_};if(l)return{message:WX,failed_nodes:u,connections:_};throw sD(new Error,KX,nD.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(QX,"configureCluster");async function iD(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(iD,"functionWrapper")});var cD=T((mle,aD)=>{"use strict";var ed=require("joi"),zX=qe(),{validateSchemaExists:JX,validateTableExists:XX,validateSchemaName:jX}=Ds(),ZX=ed.object({operation:ed.string().valid("purge_stream"),schema:ed.string().custom(JX).custom(jX).required(),table:ed.string().custom(XX).required()});function ej(e){return zX.validateBySchema(e,ZX)}a(ej,"purgeStreamValidator");aD.exports=ej});var dS=T((Sle,uD)=>{"use strict";var{handleHDBError:tj,hdb_errors:rj}=j(),{HTTP_STATUS_CODES:sj}=rj,nj=cD(),ij=dt(),oj=un();uD.exports=aj;async function aj(e){let t=nj(e);if(t)throw tj(t,t.message,sj.BAD_REQUEST,void 0,void 0,!0);oj.checkClusteringEnabled();let{schema:r,table:s}=e;return await ij.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(aj,"purgeStream")});var hS=T((Rle,hD)=>{"use strict";var ES=un(),cj=dt(),dD=X(),td=b(),Ui=ke(),uj=$(),fS=G(),{RemotePayloadObject:lj}=Mc(),{ErrorCode:lD}=require("nats"),_D=dD.get(td.CONFIG_PARAMS.CLUSTERING_ENABLED),fD=dD.get(td.CONFIG_PARAMS.CLUSTERING_NODENAME);hD.exports={clusterStatus:_j,buildNodeStatus:ED};async function _j(){let e={node_name:fD,is_enabled:_D,connections:[]};if(!_D)return e;let t=await ES.getAllNodeRecords();if(uj.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(ED(t[s],e.connections));return await Promise.allSettled(r),e}a(_j,"clusterStatus");async function ED(e,t){let r=e.name,s=new lj(td.OPERATIONS_ENUM.CLUSTER_STATUS,fD,void 0,await ES.getSystemInfo()),n,i,o=Ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await cj.request(Ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ui.CLUSTER_STATUS_STATUSES.CLOSED,fS.error(`Error getting node status from ${r} `,n))}catch(u){fS.warn(`Error getting node status from ${r}`,u),u.code===lD.NoResponders?o=Ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===lD.Timeout?o=Ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new dj(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==td.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){fS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(ED,"buildNodeStatus");function dj(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(dj,"NodeStatusObject")});var pS=T((Ale,mD)=>{"use strict";var{handleHDBError:fj,hdb_errors:Ej}=j(),{HTTP_STATUS_CODES:hj}=Ej,mj=dt(),pj=un(),mS=$(),rd=require("joi"),Sj=qe(),Tj=2e3,Rj=rd.object({timeout:rd.number().min(1),connected_nodes:rd.boolean(),routes:rd.boolean()});mD.exports=gj;async function gj(e){pj.checkClusteringEnabled();let t=Sj.validateBySchema(e,Rj);if(t)throw fj(t,t.message,hj.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||mS.autoCastBoolean(s),o=n===void 0||mS.autoCastBoolean(n),c={nodes:[]},u=await mj.getServerList(r??Tj),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:mS.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(gj,"clusterNetwork")});var RD=T((Nle,TD)=>{"use strict";var SS=require("joi"),pD=qe(),{route_constraints:SD}=EE();TD.exports={setRoutesValidator:Aj,deleteRoutesValidator:Oj};function Aj(e){let t=SS.object({server:SS.valid("hub","leaf").required(),routes:SD.required()});return pD.validateBySchema(e,t)}a(Aj,"setRoutesValidator");function Oj(e){let t=SS.object({routes:SD.required()});return pD.validateBySchema(e,t)}a(Oj,"deleteRoutesValidator")});var RS=T((yle,ND)=>{"use strict";var Mi=hr(),TS=$(),sd=b(),gD=RD(),{handleHDBError:AD,hdb_errors:Nj}=j(),{HTTP_STATUS_CODES:OD}=Nj,bj="cluster routes successfully set",yj="cluster routes successfully deleted";ND.exports={setRoutes:Ij,getRoutes:wj,deleteRoutes:Cj};function Ij(e){let t=gD.setRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=TS.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:bj,set:o,skipped:i}}a(Ij,"setRoutes");function wj(){let e=Mi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(wj,"getRoutes");function Cj(e){let t=gD.deleteRoutesValidator(e);if(t)throw AD(t,t.message,OD.BAD_REQUEST,void 0,void 0,!0);let r=Mi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=TS.isEmptyOrZeroLength(s)?null:s,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=TS.isEmptyOrZeroLength(n)?null:n,Mi.updateConfigValue(sd.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:yj,deleted:i,skipped:o}}a(Cj,"deleteRoutes")});var yD=T((wle,bD)=>{"use strict";var qc=require("alasql"),Pi=require("recursive-iterator"),Ts=G(),Lj=$(),Gc=b(),gS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,Uj(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>Gc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Gc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Gc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Dj(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!Gc.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new qc.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function Dj(e){return e.filter(t=>t[Gc.PERMS_CRUD_ENUM.READ])}a(Dj,"filterReadRestrictedAttrs");function Uj(e,t,r,s,n){Mj(e,t,r,s,n)}a(Uj,"interpretAST");function xc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(xc,"addSchemaTableToMap");function Mj(e,t,r,s,n){if(!e){Ts.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof qc.yy.Insert?Hj(e,t,r):e instanceof qc.yy.Select?Pj(e,t,r,s,n):e instanceof qc.yy.Update?vj(e,t,r):e instanceof qc.yy.Delete?Bj(e,t,r):Ts.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Mj,"getRecordAttributesAST");function Pj(e,t,r,s,n){if(!e){Ts.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Lj.isEmptyOrZeroLength(i)){Ts.error("No schema specified");return}e.from.forEach(c=>{xc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),xc(c.table,t,r,s,n)});let o=new Pi(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ts.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new Pi(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Pi(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ts.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new Pi(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ts.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Pj,"getSelectAttributes");function vj(e,t,r){if(!e){Ts.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(vj,"getUpdateAttributes");function Bj(e,t,r){if(!e){Ts.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Pi(e.where),n=e.table.databaseid;xc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.table.tableid,n,i.columnid,t,r)}a(Bj,"getDeleteAttributes");function Hj(e,t,r){if(!e){Ts.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Pi(e.columns),n=e.into.databaseid;xc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&AS(e.into.tableid,n,i.columnid,t,r)}a(Hj,"getInsertAttributes");function AS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(AS,"pushAttribute");bD.exports=gS});var bS=T((Lle,LD)=>{var nd=tc(),ID=require("chalk"),br=G(),wD=require("prompt"),{promisify:Fj}=require("util"),OS=b(),qj=require("fs-extra"),Gj=require("path"),xj=$(),kj=iS(),CD=X();CD.initSync();var Vj=require("moment"),$j=Fj(wD.get),Yj=Gj.join(CD.getHdbBasePath(),OS.LICENSE_KEY_DIR_NAME,OS.LICENSE_FILE_NAME,OS.LICENSE_FILE_NAME);LD.exports={getFingerprint:Wj,setLicense:Kj,parseLicense:NS,register:Qj,getRegistrationInfo:Jj};async function Kj(e){if(e&&e.key&&e.company){try{br.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await NS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw br.error(r),br.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Kj,"setLicense");async function Wj(){let e={};try{e=await nd.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw br.error(r),br.error(t),new Error(r)}return e}a(Wj,"getFingerprint");async function NS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");br.info("Validating license input...");let r=nd.validateLicense(e,t);if(br.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(br.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(br.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{br.info("writing license to disk"),await qj.writeFile(Yj,JSON.stringify({license_key:e,company:t}))}catch(s){throw br.error("Failed to write License"),s}return"Registration successful."}a(NS,"parseLicense");async function Qj(){let e=await zj();return NS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Qj,"register");async function zj(){let e=await nd.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:ID.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:ID.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{wD.start()}catch(s){br.error(s)}let r;try{r=await $j(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(zj,"promptForRegistration");async function Jj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await nd.getLicense()}catch(r){throw br.error(`There was an error when searching licenses due to: ${r.message}`),r}if(xj.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=kj.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Vj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Jj,"getRegistrationInfo")});var UD=T((Ule,DD)=>{"use strict";var Xj=ke(),yS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Xj.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};DD.exports=yS});var vD=T((Ple,PD)=>{"use strict";var MD=ke(),IS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+MD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+MD.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};PD.exports=IS});var HD=T((Ble,BD)=>{"use strict";var wS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};BD.exports=wS});var qD=T((Fle,FD)=>{"use strict";var jj=ke(),CS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+jj.SERVER_SUFFIX.ADMIN,this.password=r}};FD.exports=CS});var US=T((Gle,kD)=>{"use strict";var qo=require("path"),ad=require("fs-extra"),Zj=UD(),eZ=vD(),tZ=HD(),rZ=qD(),LS=xr(),xo=$(),sr=hr(),od=b(),kc=ke(),{CONFIG_PARAMS:je}=od,Vc=G(),$c=X(),GD=nn(),DS=dt(),Go="clustering",sZ=1e4,xD=5;kD.exports={generateNatsConfig:iZ,removeNatsConfig:oZ,getHubConfigPath:nZ};function nZ(){let e=$c.get(je.ROOTPATH);return qo.join(e,Go,kc.NATS_CONFIG_FILES.HUB_SERVER)}a(nZ,"getHubConfigPath");async function iZ(e=!1,t=void 0){$c.initSync();let r=$c.get(je.ROOTPATH),s=qo.join(r,Go,kc.PID_FILES.HUB),n=qo.join(r,Go,kc.PID_FILES.LEAF),i=sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=qo.join(r,Go,kc.NATS_CONFIG_FILES.HUB_SERVER),c=qo.join(r,Go,kc.NATS_CONFIG_FILES.LEAF_SERVER),u=sr.getConfigFromFile(je.CLUSTERING_TLS_CERTIFICATE),_=sr.getConfigFromFile(je.CLUSTERING_TLS_PRIVATEKEY),l=sr.getConfigFromFile(je.CLUSTERING_TLS_CERT_AUTH),d=sr.getConfigFromFile(je.CLUSTERING_TLS_INSECURE),f=sr.getConfigFromFile(je.CLUSTERING_TLS_VERIFY),E=sr.getConfigFromFile(je.CLUSTERING_NODENAME),h=sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await DS.checkNATSServerInstalled()||cd("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await LS.listUsers(),S=sr.getConfigFromFile(je.CLUSTERING_USER),A=await LS.getClusterUser();(xo.isEmpty(A)||A.active!==!0)&&cd(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await id(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await id(je.CLUSTERING_HUBSERVER_NETWORK_PORT),await id(je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let I=[],N=[];for(let[x,te]of p.entries())te.role.role===od.ROLE_TYPES_ENUM.CLUSTER_USER&&te.active&&(I.push(new rZ(te.username,GD.decrypt(te.hash))),N.push(new tZ(te.username,GD.decrypt(te.hash))));let Y=[],{hub_routes:Q}=sr.getClusteringRoutes();if(!xo.isEmptyOrZeroLength(Q))for(let x of Q)Y.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${x.host}:${x.port}`);let q=new Zj(sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NAME),sr.getConfigFromFile(je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,I,N);l==null&&(delete q.tls.ca_file,delete q.leafnodes.tls.ca_file),t=xo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===od.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await ad.writeJson(o,q),Vc.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new eZ(sr.getConfigFromFile(je.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],I,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===od.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await ad.writeJson(c,B),Vc.trace(`Leaf server config written to ${c}`))}a(iZ,"generateNatsConfig");async function id(e){let t=$c.get(e);return xo.isEmpty(t)&&cd(`port undefined for '${e}'`),await xo.isPortTaken(t)&&cd(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(id,"isPortAvailable");function cd(e){let t=`Error generating clustering config: ${e}`;Vc.error(t),console.error(t),process.exit(1)}a(cd,"generateNatsConfigError");async function oZ(e){let{port:t,config_file:r}=DS.getServerConfig(e),{username:s,decrypt_hash:n}=await LS.getClusterUser(),i=0,o=2e3;for(;i<xD;){try{let _=await DS.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Vc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=xD)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check hdb.log for further details.`);await xo.async_set_timeout(o*(i*2))}let c="0".repeat(sZ),u=qo.join($c.get(je.ROOTPATH),Go,r);await ad.writeFile(u,c),await ad.remove(u),Vc.notify(e,"started.")}a(oZ,"removeNatsConfig")});var dd=T((kle,zD)=>{"use strict";var aZ=require("minimist"),{isMainThread:vS,parentPort:YD}=require("worker_threads"),Ve=b(),{PROCESS_DESCRIPTORS_VALIDATE:Yc}=Ve,qs=G(),BS=$(),ud=US(),ko=dt(),MS=ke(),KD=hr(),Gs=FS(),VD=Fo(),cZ=sE(),{restartWorkers:ld,onMessageByType:uZ}=Ze(),{handleHDBError:lZ,hdb_errors:_Z}=j(),{HTTP_STATUS_CODES:dZ}=_Z,_d=X();_d.initSync();var Kc=`Restarting HarperDB. This may take up to ${Ve.RESTART_TIMEOUT_MS/1e3} seconds.`,fZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",$D="Clustering is not enabled so cannot be restarted",EZ="Invalid service",Vo,Yr;zD.exports={restart:WD,restartService:HS};vS&&uZ(Ve.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?HS({service:e.workerType}):WD({operation:"restart"})});async function WD(e){Yr=Object.keys(e).length===0,Vo=await Gs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR);let t=aZ(process.argv);if(t.service){await HS(t);return}if(Yr&&!Vo){console.error(fZ);return}if(Yr&&console.log(Kc),Vo){Gs.enterPM2Mode(),qs.notify(Kc);let r=cZ(Object.keys(Ve.CONFIG_PARAM_MAP),!0);return BS.isEmptyOrZeroLength(Object.keys(r))||KD.updateConfigValue(void 0,void 0,r,!0,!0),mZ(),Kc}return vS?(qs.notify(Kc),setTimeout(()=>{ld()},50)):YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART}),Kc}a(WD,"restart");async function HS(e){let{service:t}=e;if(Ve.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw lZ(new Error,EZ,dZ.BAD_REQUEST,void 0,void 0,!0);if(Vo=await Gs.isServiceRegistered(Ve.HDB_PROC_DESCRIPTOR),!vS)return YD.postMessage({type:Ve.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Yc.clustering:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}Yr&&console.log("Restarting clustering"),qs.notify("Restarting clustering"),await QD();break;case Yc.clustering_config:case Yc["clustering config"]:if(!_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=$D;break}Yr&&console.log("Restarting clustering_config"),qs.notify("Restarting clustering_config"),await Gs.reloadClustering();break;case"custom_functions":case"custom functions":case Yc.harperdb:case Yc.http_workers:if(Yr&&!Vo){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),qs.notify("Restarting http_workers"),Yr?await Gs.restart(Ve.HDB_PROC_DESCRIPTOR):setTimeout(()=>{ld("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(qs.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(HS,"restartService");async function hZ(){await ko.publishToStream(`${MS.SUBJECT_PREFIXES.TXN}.${MS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,MS.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(hZ,"postDummyNatsMsg");async function mZ(){await QD(),await Gs.restart(Ve.HDB_PROC_DESCRIPTOR),await BS.async_set_timeout(2e3),_d.get(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await PS(),Yr&&(await ko.closeConnection(),process.exit(0))}a(mZ,"restartPM2Mode");async function QD(){if(!KD.getConfigFromFile(Ve.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await VD.getHDBProcessInfo()).clustering.length===0)qs.trace("Clustering not running, restart will start clustering services"),await ud.generateNatsConfig(!0),await Gs.startClusteringProcesses(),await Gs.startClusteringThreads(),await PS(),Yr&&await ko.closeConnection();else{await hZ(),await ud.generateNatsConfig(!0),Vo?(qs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Gs.restart(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await VD.getHDBProcessInfo()).clustering.forEach(n=>{qs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await BS.async_set_timeout(3e3),await PS(),await ko.updateLocalStreams(),Yr&&await ko.closeConnection(),qs.trace("Restart clustering restarting ingest and reply service threads");let t=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=ld(Ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(QD,"restartClustering");async function PS(){await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ud.removeNatsConfig(Ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(PS,"removeNatsConfig")});var oU=T((Yle,iU)=>{"use strict";var $le=require("lodash"),nr=b(),{handleHDBError:JD,hdb_errors:pZ}=j(),{HDB_ERROR_MSGS:SZ,HTTP_STATUS_CODES:TZ}=pZ,qS=G();iU.exports={getRolePermissions:gZ};var vi=Object.create(null),RZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),eU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tU=a((e=!1,t=!1,r=!1,s=!1)=>({[nr.PERMS_CRUD_ENUM.READ]:e,[nr.PERMS_CRUD_ENUM.INSERT]:t,[nr.PERMS_CRUD_ENUM.UPDATE]:r,[nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),GS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...tU(t,r,s,n)}),"table_perms_template"),XD=a((e,t=tU())=>({attribute_name:e,describe:nU(t),[Wc]:t[Wc],[xS]:t[xS],[kS]:t[kS]}),"attr_perms_template"),jD=a((e,t=!1)=>({attribute_name:e,describe:t,[Wc]:t}),"timestamp_attr_perms_template"),{READ:Wc,INSERT:xS,UPDATE:kS}=nr.PERMS_CRUD_ENUM,rU=Object.values(nr.PERMS_CRUD_ENUM),sU=[Wc,xS,kS];function gZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(vi[t]&&vi[t].key===s)return vi[t].perms;let n=AZ(e,r);return vi[t]?vi[t].key=s:vi[t]=RZ(s),vi[t].perms=n,n}catch(r){if(!e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw qS.error(s),qS.debug(r),JD(new Error,SZ.OUTDATED_PERMS_TRANSLATION_ERROR,TZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
|
|
9
|
+
${r.stack}`;throw qS.error(s),JD(new Error)}}}a(gZ,"getRolePermissions");function AZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[nr.SYSTEM_SCHEMA_NAME]=s[nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=OZ(t[i]);return}r[i]=eU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=NZ(c,u);r[i].describe||rU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=GS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=GS()})}),r}a(AZ,"translateRolePermissions");function OZ(e){let t=eU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=GS(!0,!0,!0,!0,!0)}),t}a(OZ,"createStructureUserPermissions");function NZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return nr.TIME_STAMP_NAMES.includes(d)&&(f=jD(d,l[Wc])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=XD(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=nU(l),n.attribute_permissions.push(l),c||bZ(l,u)}else if(_!==o){let l;nr.TIME_STAMP_NAMES.includes(_)?l=jD(_):l=XD(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=ZD(n),n}else return e.describe=ZD(e),e}a(NZ,"getTableAttrPerms");function ZD(e){return rU.filter(t=>e[t]).length>0}a(ZD,"getSchemaTableDescribePerm");function nU(e){return sU.filter(t=>e[t]).length>0}a(nU,"getAttributeDescribePerm");function bZ(e,t){sU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(bZ,"checkForHashPerms")});var aU={};Qe(aU,{Resources:()=>fd,keyArrayToString:()=>$o,resetResources:()=>yZ,resources:()=>Qn});function yZ(){return Qn=new fd}function $o(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fd,Qn,Qc=Te(()=>{di();fd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ge(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(yZ,"resetResources");a($o,"keyArrayToString")});var Bi,VS=Te(()=>{Bi=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var zc={};Qe(zc,{authentication:()=>hU,bypassAuth:()=>MZ,login:()=>vZ,logout:()=>BZ,start:()=>PZ});function MZ(){EU=!0}async function hU(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?LZ?CZ:[]:wZ?IZ:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Bi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Ed&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Ed&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Ed){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,p===-1?n.length:p),_=await uU.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,p)=>{let S=new md.AuthAuditLog(E,h,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?cU.notify(S):cU.error(S)},"authAuditLog"),d;if(s){if(d=Hi.get(s),!d){let[E,h]=s.split(" "),p,S;try{switch(E){case"Basic":[p,S]=atob(h).split(":"),d=p||S?await ut.getUser(p,S):null;break;case"Bearer":try{d=await(0,hd.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,hd.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return UZ&&(Hi.get(h)||(Hi.set(h,h),l(p,wt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:zn({error:A.message},e)})}Hi.set(s,d),DZ&&l(d.username,wt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await ut.getUser(_.user,null,!1):EU&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,_U.getSuperUser)());Ed&&(e.session.update=function(E){if(!u){u=(0,dU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):f?.headers?.set&&f.headers.set("Set-Cookie",p)}return E.id=u,uU.put(E)},e.login=async function(E,h){e.user=await ut.getUser(E,h),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Qn.loginPath?(f.status=302,f.headers.set("Location",Qn.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Bi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function PZ({server:e,port:t}){e.request(hU,{port:t||"all"}),lU||(lU=!0,setInterval(()=>{Hi=new Map},Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),fU.user.addListener(()=>{Hi=new Map}))}async function vZ(e){if(!e.baseRequest?.login)throw new Error("No session for login");return e.baseResponse.headers.set=(t,r)=>{e.fastifyResponse.header(t,r)},await e.baseRequest.login(e.username,e.password),"Login successful"}async function BZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var _U,hd,dU,Kr,wt,md,fU,cU,IZ,wZ,CZ,LZ,uU,Ed,EU,DZ,UZ,Hi,lU,pd=Te(()=>{_U=D(xr());Mr();Qc();hd=D(Uc());fe();dU=require("uuid"),Kr=D(X()),wt=D(b()),md=D(G()),fU=D(sc());VS();Yo();cU=(0,md.loggerWithTag)("auth-event");Kr.initSync();IZ=Kr.get(wt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),wZ=Kr.get(wt.CONFIG_PARAMS.HTTP_CORS),CZ=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),LZ=Kr.get(wt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),uU=et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Ed=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,EU=Kr.get(wt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,DZ=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,UZ=Kr.get(wt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Hi=new Map;ut.onInvalidatedUser(()=>{Hi=new Map});a(MZ,"bypassAuth");a(hU,"authentication");a(PZ,"start");a(vZ,"login");a(BZ,"logout")});var AU=T((s_e,gU)=>{"use strict";var pe=require("joi"),mU=require("fs-extra"),pU=require("path"),_n=qe(),SU=X(),TU=b(),RU=G(),{hdb_errors:HZ}=j(),{HDB_ERROR_MSGS:xt}=HZ,ln=/^[a-zA-Z0-9-_]+$/;gU.exports={getDropCustomFunctionValidator:qZ,setCustomFunctionValidator:GZ,addComponentValidator:$Z,dropCustomFunctionProjectValidator:YZ,packageComponentValidator:KZ,deployComponentValidator:WZ,setComponentFileValidator:xZ,getComponentFileValidator:VZ,dropComponentFileValidator:kZ};function Sd(e,t,r){try{let s=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),n=pU.join(s,t);return mU.existsSync(n)?e?t:r.message(xt.PROJECT_EXISTS):e?r.message(xt.NO_PROJECT):t}catch(s){return RU.error(s),r.message(xt.VALIDATION_ERR)}}a(Sd,"checkProjectExists");function Jc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Jc,"checkFilePath");function FZ(e,t,r,s){try{let n=SU.get(TU.CONFIG_PARAMS.COMPONENTSROOT),i=pU.join(n,e,t,r+".js");return mU.existsSync(i)?r:s.message(xt.NO_FILE)}catch(n){return RU.error(n),s.message(xt.VALIDATION_ERR)}}a(FZ,"checkFileExists");function qZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(ln).custom(FZ.bind(null,e.project,e.type)).custom(Jc).required().messages({"string.pattern.base":xt.BAD_FILE_NAME})});return _n.validateBySchema(e,t)}a(qZ,"getDropCustomFunctionValidator");function GZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(Jc).required(),function_content:pe.string().required()});return _n.validateBySchema(e,t)}a(GZ,"setCustomFunctionValidator");function xZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(xZ,"setComponentFileValidator");function kZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),file:pe.string().custom(Jc).optional()});return _n.validateBySchema(e,t)}a(kZ,"dropComponentFileValidator");function VZ(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(Jc).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return _n.validateBySchema(e,t)}a(VZ,"getComponentFileValidator");function $Z(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!1)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a($Z,"addComponentValidator");function YZ(e){let t=pe.object({project:pe.string().pattern(ln).custom(Sd.bind(null,!0)).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME})});return _n.validateBySchema(e,t)}a(YZ,"dropCustomFunctionProjectValidator");function KZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return _n.validateBySchema(e,t)}a(KZ,"packageComponentValidator");function WZ(e){let t=pe.object({project:pe.string().pattern(ln).required().messages({"string.pattern.base":xt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":xt.BAD_PACKAGE}),package:pe.string().optional()});return _n.validateBySchema(e,t)}a(WZ,"deployComponentValidator")});var Ad=T((i_e,CU)=>{"use strict";var Td=require("joi"),Rd=require("path"),OU=require("fs-extra"),{exec:QZ}=require("child_process"),zZ=require("util"),NU=zZ.promisify(QZ),Xc=b(),{handleHDBError:Ko,hdb_errors:JZ}=j(),{HTTP_STATUS_CODES:Wo}=JZ,jc=X(),XZ=qe(),Qo=G();jc.initSync();var $S=jc.get(Xc.CONFIG_PARAMS.COMPONENTSROOT),bU="npm install --omit=dev --json",jZ=`${bU} --dry-run`;CU.exports={installModules:r5,auditModules:s5,installAllRootModules:ZZ,uninstallRootModule:e5,linkHarperdb:t5};async function ZZ(e=!1){await gd(),await Zc(e?"npm install --ignore-scripts":"npm install",jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(ZZ,"installAllRootModules");async function e5(e){await Zc(`npm uninstall ${e}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(e5,"uninstallRootModule");async function t5(){await gd(),await Zc(`npm link ${Xc.PACKAGE_ROOT}`,jc.get(Xc.CONFIG_PARAMS.ROOTPATH))}a(t5,"linkHarperdb");async function Zc(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await NU(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
|
|
10
10
|
`,""))}return s&&!s.includes("Debugger listening")&&Qo.error("Error running NPM command:",e,s),Qo.trace(r,s),r.replace(`
|
|
11
|
-
`,"")}a(Zc,"runCommand");async function
|
|
11
|
+
`,"")}a(Zc,"runCommand");async function r5(e){Qo.info(`starting installModules for request: ${e}`);let t=wU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?jZ:bU;await gd(),await IU(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 _=Rd.join($S,u),l,d=null;try{let{stdout:f,stderr:E}=await NU(n,{cwd:_});l=f?f.replace(`
|
|
12
12
|
`,""):null,d=E?E.replace(`
|
|
13
|
-
`,""):null}catch(f){f.stderr?i[u].npm_error=yU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Qo.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(yU,"parseNPMStdErr");async function r5(e){Qo.info(`starting auditModules for request: ${e}`);let t=wU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r}=e;await gd(),await IU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Rd.join($S,o);s[o]={npm_output:null,npm_error:null};try{let u=await Zc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=yU(u.stderr)}}return Qo.info(`finished auditModules with response ${s}`),s}a(r5,"auditModules");async function gd(){try{return await Zc("npm -v"),!0}catch{throw Ko(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wo.BAD_REQUEST,void 0,void 0,!0)}}a(gd,"checkNPMInstalled");async function IU(e){if(!Array.isArray(e)||e.length===0)throw Ko(new Error,"projects argument must be an array with at least 1 element",Wo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Rd.join($S,i.toString());if(!await OU.pathExists(o)){t.push(i);continue}let u=Rd.join(o,"package.json");await OU.pathExists(u)||r.push(i)}if(t.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wo.BAD_REQUEST,void 0,void 0,!0)}a(IU,"checkProjectPaths");function wU(e){let t=Td.object({projects:Td.array().min(1).items(Td.string()).required(),dry_run:Td.boolean().default(!1)});return JZ.validateBySchema(e,t)}a(wU,"modulesValidator")});var KS=T((a_e,PU)=>{"use strict";var zo=require("fs-extra"),YS=require("path"),Od=G(),LU=$(),Nd=b(),MU=X(),s5=Er();PU.exports=n5;async function n5(){let e=i5(),t=MU.get(Nd.CONFIG_PARAMS.ROOTPATH),r=YS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Nd.PACKAGE_ROOT}},n=YS.join(t,"node_modules");await zo.ensureDir(n);let i,o=!0,c=!1;try{i=await zo.readJson(r)}catch(u){if(LU.isEmptyOrZeroLength(e))return;if(u.code!==Nd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!LU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await DU(_);s.dependencies[u]=l+_}if(!o){Od.notify("Installing components"),await UU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await DU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Od.notify("Removing component",u),c=!0);c&&(Od.notify("Updating components."),await UU(r,s,i))}a(n5,"installComponents");function i5(){let e=s5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(i5,"getComponentsConfig");async function DU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":YS.extname(e)||await zo.pathExists(e)?"file:":"github:"}a(DU,"getPkgPrefix");async function UU(e,t,r){Od.trace("npm installing components package.json",t),await zo.writeFile(e,JSON.stringify(t,null," "));try{await Ad().installAllRootModules(MU.get(Nd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await zo.writeFile(e,JSON.stringify(r,null," ")):await zo.unlink(e),s}}a(UU,"installPackages")});var zS=T((l_e,FU)=>{"use strict";var Le=require("fs-extra"),WS=require("fast-glob"),le=require("path"),BU=require("tar-fs"),u_e=require("uuid").v4,QS=require("normalize-path"),Gs=AU(),pt=G(),Me=b(),nt=X(),eu=Er(),o5=$(),{PACKAGE_ROOT:a5}=b(),{handleHDBError:St,hdb_errors:c5}=j(),{basename:u5}=require("path"),l5=KS(),HU=X(),_5=b(),{Readable:d5}=require("stream"),{isMainThread:f5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Tt}=c5,E5=le.join(a5,"application-template"),vU=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function h5(){pt.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw St(new Error,Fi.FUNCTION_STATUS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,t)}return e}a(h5,"customFunctionsStatus");function m5(){pt.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw St(new Error,Fi.GET_FUNCTIONS,Tt.INTERNAL_SERVER_ERROR,pt.ERR,r)}return e}a(m5,"getCustomFunctions");function p5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw St(new Error,Fi.GET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(p5,"getCustomFunction");function S5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.setCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw St(new Error,Fi.SET_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,c)}}a(S5,"setCustomFunction");function T5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=Gs.getDropCustomFunctionValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw St(new Error,Fi.DROP_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,o)}}a(T5,"dropCustomFunction");function R5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.addComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(E5,n),`Successfully added project: ${s}`}catch(n){throw St(new Error,Fi.ADD_FUNCTION,Tt.INTERNAL_SERVER_ERROR,pt.ERR,n)}}a(R5,"addComponent");function g5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.dropCustomFunctionProjectValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);pt.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!o5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return eu.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw St(new Error,Fi.DROP_FUNCTION_PROJECT,Tt.INTERNAL_SERVER_ERROR,pt.ERR,i)}}a(g5,"dropCustomFunctionProject");async function A5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.packageComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;pt.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(vU);let i=le.join(vU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),BU.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(A5,"packageComponent");async function O5(e){e.project&&(e.project=le.parse(e.project).name);let t=Gs.deployComponentValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(pt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=d5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(BU.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await eu.addConfig(s,{package:i}),!n){await l5();let f=HU.get(_5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(f5)return;let c=new Map;c.isWorker=!0;let u=(yd(),Z(bd)),_;u.setErrorReporter(f=>_=f);let l=u5(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return pt.info("Installed component"),`Successfully deployed: ${s}`}a(O5,"deployComponent");async function N5(){let e=eu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(yd(),Z(bd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(N5,"getComponents");async function b5(e){let t=Gs.getComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let s=eu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(HU.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(b5,"getComponentFile");async function y5(e){let t=Gs.setComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(y5,"setComponentFile");async function I5(e){let t=Gs.dropComponentFileValidator(e);if(t)throw St(t,t.message,Tt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),eu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(I5,"dropComponent");FU.exports={customFunctionsStatus:h5,getCustomFunctions:m5,getCustomFunction:p5,setCustomFunction:S5,dropCustomFunction:T5,addComponent:R5,dropCustomFunctionProject:g5,packageComponent:A5,deployComponent:O5,getComponents:N5,getComponentFile:b5,setComponentFile:y5,dropComponent:I5}});var JS=T((d_e,GU)=>{"use strict";var xs=require("joi"),qU=qe();GU.exports={readTransactionLogValidator:w5,deleteTransactionLogsBeforeValidator:C5};function w5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),from:xs.date().timestamp(),to:xs.date().timestamp(),limit:xs.number().min(1)});return qU.validateBySchema(e,t)}a(w5,"readTransactionLogValidator");function C5(e){let t=xs.object({schema:xs.string().required(),table:xs.string().required(),timestamp:xs.date().timestamp().required()});return qU.validateBySchema(e,t)}a(C5,"deleteTransactionLogsBeforeValidator")});var wd=T((E_e,YU)=>{"use strict";var XS=b(),Id=_t(),xU=$(),kU=X(),VU=nn(),{handleHDBError:Jo,hdb_errors:L5}=j(),{HTTP_STATUS_CODES:Xo}=L5,{readTransactionLogValidator:D5,deleteTransactionLogsBeforeValidator:U5}=JS(),$U="This operation relies on clustering and cannot run with it disable.",M5="Logs successfully deleted from transaction log.",P5="All logs successfully deleted from transaction log.";YU.exports={readTransactionLog:v5,deleteTransactionLogsBefore:B5};async function*v5(e){let t=D5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xU.checkSchemaTableExist(r,s);if(n)throw Jo(new Error,n,Xo.NOT_FOUND,void 0,void 0,!0);let i=VU.createNatsTableStreamName(r,s),o=await Id.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===XS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(v5,"readTransactionLog");async function B5(e){let t=U5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xU.checkSchemaTableExist(r,s);if(i)throw Jo(new Error,i,Xo.NOT_FOUND,void 0,void 0,!0);let o=VU.createNatsTableStreamName(r,s),{jsm:c}=await Id.getNATSReferences(),u=await Id.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=M5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=P5):d=(await Id.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(B5,"deleteTransactionLogsBefore")});var WU=T((m_e,KU)=>{"use strict";var jS=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};KU.exports=jS});var zU=T((S_e,QU)=>{"use strict";var ZS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};QU.exports=ZS});var tT=T((R_e,XU)=>{"use strict";var JU=WU(),H5=zU(),{HDB_ERROR_MSGS:F5}=dr(),eT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=F5.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new JU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new H5(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new JU(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};XU.exports=eT});var Ud=T((A_e,fM)=>{"use strict";var rT=qr(),Cd=Fr(),Wr=L_(),su=pi(),sT=Ai(),q5=pp(),G5=CC(),nu=Gr(),Ld=yp(),dt=G(),x5=Cp(),k5=Q_(),V5=lS(),$5=j_(),Y5=_S(),K5=dS(),W5=hS(),Q5=pS(),nT=RS(),dn=$(),z5=yD(),iT=bS(),eM=dd(),Kr=b(),tM=oU(),J5=Fo(),rM=Uc(),sM=(pd(),Z(zc)),nM=Er(),br=zS(),X5=require("alasql"),iM=wd(),oM=Ad(),aM=tT(),{handleHDBError:ir,hdb_errors:cM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:tu}=cM,v=new Map,uM="delete",Jn="insert",fn="read",qi="update",ru="describe",jU=su.describeSchema.name,ZU=su.describeTable.name,lM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},j5="catchup",Z5="handleGetJob",e8="handleGetJobsByStartDate",Dd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},t8=[Wr.createTable.name,Wr.createAttribute.name,Wr.dropTable.name,Wr.dropAttribute.name],_M={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(rT.insert.name,new F(!1,[Jn]));v.set(rT.update.name,new F(!1,[qi]));v.set(rT.upsert.name,new F(!1,[Jn,qi]));v.set(Cd.searchByConditions.name,new F(!1,[fn]));v.set(Cd.searchByHash.name,new F(!1,[fn]));v.set(Cd.searchByValue.name,new F(!1,[fn]));v.set(Cd.search.name,new F(!1,[fn]));v.set(Wr.createSchema.name,new F(!0,[]));v.set(Wr.createTable.name,new F(!0,[]));v.set(Wr.createAttribute.name,new F(!1,[Jn]));v.set(Wr.dropSchema.name,new F(!0,[]));v.set(Wr.dropTable.name,new F(!0,[]));v.set(Wr.dropAttribute.name,new F(!0,[]));v.set(su.describeSchema.name,new F(!1,[fn]));v.set(su.describeTable.name,new F(!1,[fn]));v.set(sT.deleteRecord.name,new F(!1,[uM]));v.set(nu.addUser.name,new F(!0,[]));v.set(nu.alterUser.name,new F(!0,[]));v.set(nu.dropUser.name,new F(!0,[]));v.set(nu.listUsersExternal.name,new F(!0,[]));v.set(Ld.listRoles.name,new F(!0,[]));v.set(Ld.addRole.name,new F(!0,[]));v.set(Ld.alterRole.name,new F(!0,[]));v.set(Ld.dropRole.name,new F(!0,[]));v.set(x5.name,new F(!0,[]));v.set(k5.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set($5.name,new F(!0,[]));v.set(Y5.name,new F(!0,[]));v.set(K5.name,new F(!0,[]));v.set(nT.setRoutes.name,new F(!0,[]));v.set(nT.getRoutes.name,new F(!0,[]));v.set(nT.deleteRoutes.name,new F(!0,[]));v.set(nM.setConfiguration.name,new F(!0,[]));v.set(W5.clusterStatus.name,new F(!0,[]));v.set(Q5.name,new F(!0,[]));v.set(iT.getFingerprint.name,new F(!0,[]));v.set(iT.setLicense.name,new F(!0,[]));v.set(sT.deleteFilesBefore.name,new F(!0,[]));v.set(sT.deleteAuditLogsBefore.name,new F(!0,[]));v.set(eM.restart.name,new F(!0,[]));v.set(eM.restartService.name,new F(!0,[]));v.set(q5.name,new F(!0,[]));v.set(G5.name,new F(!0,[fn]));v.set(J5.systemInformation.name,new F(!0,[]));v.set(nM.getConfiguration.name,new F(!0,[]));v.set(iM.readTransactionLog.name,new F(!0,[]));v.set(iM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(oM.installModules.name,new F(!0,[]));v.set(oM.auditModules.name,new F(!0,[]));v.set(rM.createTokens.name,new F(!1,[]));v.set(rM.refreshOperationToken.name,new F(!1,[]));v.set(sM.login.name,new F(!1,[]));v.set(sM.logout.name,new F(!1,[]));v.set(br.customFunctionsStatus.name,new F(!0,[]));v.set(br.getCustomFunctions.name,new F(!0,[]));v.set(br.getComponents.name,new F(!0,[]));v.set(br.getComponentFile.name,new F(!0,[]));v.set(br.setComponentFile.name,new F(!0,[]));v.set(br.dropComponent.name,new F(!0,[]));v.set(br.getCustomFunction.name,new F(!0,[]));v.set(br.setCustomFunction.name,new F(!0,[]));v.set(br.dropCustomFunction.name,new F(!0,[]));v.set(br.addComponent.name,new F(!0,[]));v.set(br.dropCustomFunctionProject.name,new F(!0,[]));v.set(br.packageComponent.name,new F(!0,[]));v.set(br.deployComponent.name,new F(!0,[]));v.set(iT.getRegistrationInfo.name,new F(!1,[]));v.set(nu.userInfo.name,new F(!1,[]));v.set(su.describeAll.name,new F(!1,[]));v.set(Z5,new F(!1,[]));v.set(e8,new F(!0,[]));v.set(j5,new F(!0,[]));v.set(Dd.CSV_DATA_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_URL_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_FILE_LOAD,new F(!1,[Jn,qi]));v.set(Dd.IMPORT_FROM_S3,new F(!1,[Jn,qi]));v.set(_M.EXPORT_TO_S3,new F(!0,[]));v.set(_M.EXPORT_LOCAL,new F(!0,[]));v.set(Kr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[uM]));v.set(Kr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[fn]));v.set(Kr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Jn]));v.set(Kr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));fM.exports={verifyPerms:s8,verifyPermsAst:r8,verifyBulkLoadAttributePerms:i8};function r8(e,t,r){if(dn.isEmptyOrZeroLength(e))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(t))throw dt.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(r))throw dt.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new aM,n=new z5(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."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&lM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(c&&!u)return null;let _=tM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof X5.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=dM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=aT(t.role.permission,f,d[E]);oT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(r8,"verifyPermsAst");function s8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw dt.info("null required parameter in verifyPerms"),ir(new Error,Ct.DEFAULT_INVALID_REQUEST,tu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new aM;if(dn.isEmptyOrZeroLength(e.hdb_user.role)||dn.isEmptyOrZeroLength(e.hdb_user.role.permission))return dt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Kr.SYSTEM_SCHEMA_NAME)||n===Kr.SYSTEM_SCHEMA_NAME;if(l&&lM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(u&&!l||_===!0&&(r===Wr.createSchema.name||r===Wr.dropSchema.name))return null;if(t8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=tM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===jU||r===ZU){if(n===Kr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===jU&&(!d[n]||!d[n][ru]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===ZU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ru]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=dM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&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=n8(e),h=aT(e.hdb_user.role.permission,n,i);return oT(E,h,r,i,n,c,s),c.getPermsResponse()}a(s8,"verifyPerms");function dM(e,t,r,s,n){if(dn.arrayHasEmptyValues([e,t,r]))throw dt.info("hasPermissions has an invalid parameter"),ir(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw dt.info(`operation ${t} not found.`),ir(new Error,Ct.OP_NOT_FOUND(t),tu.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][ru]===!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[ru]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!dn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(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),ir(cM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(dM,"hasPermissions");function oT(e,t,r,s,n,i,o){if(!e||!t)throw dt.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw dt.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(dn.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[ru]===!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!==fn)throw ir(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,tu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(oT,"checkAttributePerms");function n8(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(n8,"getRecordAttributes");function aT(e,t,r){let s=new Map;if(dn.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(aT,"getAttributePermissions");function i8(e,t,r,s,n,i,o){let c=new Set(i),u=aT(e,s,n);oT(c,u,t,n,s,o,r)}a(i8,"verifyBulkLoadAttributePerms")});var Pd=T((N_e,SM)=>{"use strict";SM.exports={evaluateSQL:S8,processAST:pM,convertSQLToAST:mM,checkASTPermissions:hM};var o8=qr(),EM=require("util"),a8=EM.callbackify(o8.insert),c8=Fr().search,u8=Aw().update,l8=EM.callbackify(u8),_8=Nw().convertDelete,Xn=require("alasql"),d8=Ud(),Md=G(),f8=m_(),E8=$(),iu=b(),{hdb_errors:h8,handleHDBError:cT}=j(),{HTTP_STATUS_CODES:uT}=h8;f8(Xn);var m8=403,p8="There was a problem performing this insert. Please check the logs and try again.",lT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function S8(e,t){let r=e.parsed_sql_object;if(!r){r=mM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xn.yy.Insert?s=n.into.databaseid:n instanceof Xn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xn.yy.Update||n instanceof Xn.yy.Delete?s=n.table.databaseid:Md.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xn.yy.Select)&&E8.isEmptyOrZeroLength(s))return t("No schema specified",null)}pM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(S8,"evaluateSQL");function hM(e,t){let r;try{r=d8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(hM,"checkASTPermissions");function mM(e){let t=new lT;if(!e)throw cT(new Error,"The 'sql' parameter is missing from the request body",uT.BAD_REQUEST);try{let r=e.trim(),s=Xn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
-
`);throw s[1]?cT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,uT.BAD_REQUEST):cT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",uT.BAD_REQUEST)}return t}a(mM,"convertSQLToAST");function pM(e,t,r){try{let s=T8;if(!e.bypass_auth&&!t.permissions_checked){let i=hM(e,t);if(i&&i.length>0)return r(m8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case iu.VALID_SQL_OPS_ENUM.SELECT:s=c8,n=t.ast.statements[0];break;case iu.VALID_SQL_OPS_ENUM.INSERT:s=R8;break;case iu.VALID_SQL_OPS_ENUM.UPDATE:s=l8;break;case iu.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(pM,"processAST");function T8(e,t){Md.info(e),t("unknown sql statement")}a(T8,"nullFunction");function R8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=g8(i,e.values)}catch(o){return r(o)}a8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Md.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(R8,"convertInsert");function g8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Xn.compile(`SELECT ${n.toString()} AS [${iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Md.error(r),new Error(p8)}}a(g8,"createDataObjects")});var _T=T((y_e,RM)=>{"use strict";var{S3:A8,GetObjectCommand:O8}=require("@aws-sdk/client-s3");RM.exports={getFileStreamFromS3:N8,getS3AuthObj:TM};async function N8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await TM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new O8(r))).Body}a(N8,"getFileStreamFromS3");function TM(e,t,r){return new A8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(TM,"getS3AuthObj")});var vd=T((w_e,LM)=>{"use strict";var OM=Fr(),b8=Pd(),y8=_T(),{AsyncParser:I8,Transform:w8}=require("json2csv"),au=require("stream"),yr=$(),dT=require("fs-extra"),C8=require("path"),Qr=G(),{promisify:NM}=require("util"),ou=$(),{handleHDBError:it,hdb_errors:L8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=L8,{streamAsJSON:D8}=FE(),{Upload:U8}=require("@aws-sdk/lib-storage"),gM=["search_by_value","search_by_hash","sql"],AM=["json","csv"],bM="json",yM="csv",M8="Successfully exported JSON locally.",P8="Successfully exported CSV locally.",v8=1e3,B8=OM.searchByHash,H8=OM.searchByValue,F8=NM(b8.evaluateSQL),q8=NM(au.finished);LM.exports={export_to_s3:V8,export_local:G8,toCsvStream:IM};async function G8(e){Qr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=wM(e);if(!yr.isEmpty(t))throw Qr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(yr.isEmpty(e.path))throw Qr.error(or.MISSING_VALUE("path")),it(new Error,or.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(yr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(C8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=yr.buildFolderPath(e.path,r);await x8(e.path);let n=await CM(e);return await k8(s,e.format,n)}a(G8,"export_local");async function x8(e){if(Qr.trace("in confirmPath"),yr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await dT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Qr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Qr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(x8,"confirmPath");async function k8(e,t,r){if(Qr.trace("in saveToLocal"),ou.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===bM){let s=dT.createWriteStream(e);return D8(r).pipe(s),await q8(s),{message:M8,path:e}}else if(t===yM){let s=dT.createWriteStream(e),n=au.Readable.from(r),i={},o={objectMode:!0};return await new I8(i,o).fromInput(n).toOutput(s).promise(!1),{message:P8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(k8,"saveToLocal");async function V8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(yr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=wM(e);if(!yr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);Qr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await CM(e)}catch(u){throw Qr.error(u),u}let s,n=await y8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new au.PassThrough;if(e.format===yM){i=e.s3.key+".csv";let u=IM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===bM){i=e.s3.key+".json";let u=new au.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%v8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new U8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(V8,"export_to_s3");function IM(e){let t=au.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new w8(r,s);return t.pipe(n)}a(IM,"toCsvStream");function wM(e){if(Qr.trace("in exportCoreValidation"),yr.isEmpty(e.format))return"format missing";if(AM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${AM.join(", ")}`;let t=e.search_operation.operation;if(yr.isEmpty(t))return"search_operation.operation missing";if(gM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${gM.join(", ")}`}a(wM,"exportCoreValidation");async function CM(e){Qr.trace("in getRecords");let t,r;if(ou.isEmpty(e.search_operation)||ou.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=H8;break;case"search_by_hash":t=B8;break;case"sql":t=F8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Qr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(CM,"getRecords")});var FM={};Qe(FM,{contentTypes:()=>ET,findBestSerializer:()=>Fd,getDeserializer:()=>jo,registerContentHandlers:()=>hT,serialize:()=>qd,serializeMessage:()=>zn});function $8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function hT(e){e.register(K8,{serializers:[{regex:/^application\/json$/,serializer:Bd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(cu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Hd.Readable.from((0,ks.encodeIter)(t,cu)):(0,ks.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ks.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Fd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=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 qd(e,t,r){let s=UM&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Fd(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,En.createBrotliCompress)({params:{[En.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?En.constants.BROTLI_MODE_TEXT:En.constants.BROTLI_MODE_GENERIC,[En.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>UM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,En.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zn(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Fd(t);return r=t.serialize=s.serializer.serialize,r(e)}function W8(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function jo(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||MM(e,s);return o=>W8(o).then(i)}return e&&Lt.get(e)?.deserialize||MM(e,s)}function MM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function Q8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Bd,fT,ks,Gi,En,Hd,PM,vM,BM,cu,Lt,ET,DM,HM,Y8,K8,UM,Yo=Te(()=>{Bd=D(FE()),fT=D(vd()),ks=require("msgpackr"),Gi=require("cbor-x"),En=require("zlib"),Hd=require("stream");Ur();PM=require("../../index"),vM=D(X()),BM=D(b()),cu={useRecords:!1,useToJSON:!0},Lt=new Map,ET=Lt;ut.contentTypes=ET;(0,PM._assignPackageExport)("contentTypes",ET);Lt.set("application/json",{serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});DM=new Gi.Encoder(cu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(cu).end(e)},serialize:DM.encode,deserialize:DM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Hd.Readable.from((0,ks.encodeIter)(e,cu)):(0,ks.pack)(e)},serialize:ks.pack,deserialize:ks.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.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 Hd.Readable.from(Q8(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
13
|
+
`,""):null}catch(f){f.stderr?i[u].npm_error=yU(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Qo.info(`finished installModules with response ${i}`),i}a(r5,"installModules");function yU(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(yU,"parseNPMStdErr");async function s5(e){Qo.info(`starting auditModules for request: ${e}`);let t=wU(e);if(t)throw Ko(t,t.message,Wo.BAD_REQUEST);let{projects:r}=e;await gd(),await IU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=Rd.join($S,o);s[o]={npm_output:null,npm_error:null};try{let u=await Zc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=yU(u.stderr)}}return Qo.info(`finished auditModules with response ${s}`),s}a(s5,"auditModules");async function gd(){try{return await Zc("npm -v"),!0}catch{throw Ko(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Wo.BAD_REQUEST,void 0,void 0,!0)}}a(gd,"checkNPMInstalled");async function IU(e){if(!Array.isArray(e)||e.length===0)throw Ko(new Error,"projects argument must be an array with at least 1 element",Wo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=Rd.join($S,i.toString());if(!await OU.pathExists(o)){t.push(i);continue}let u=Rd.join(o,"package.json");await OU.pathExists(u)||r.push(i)}if(t.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Wo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ko(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Wo.BAD_REQUEST,void 0,void 0,!0)}a(IU,"checkProjectPaths");function wU(e){let t=Td.object({projects:Td.array().min(1).items(Td.string()).required(),dry_run:Td.boolean().default(!1)});return XZ.validateBySchema(e,t)}a(wU,"modulesValidator")});var KS=T((a_e,PU)=>{"use strict";var zo=require("fs-extra"),YS=require("path"),Od=G(),LU=$(),Nd=b(),MU=X(),n5=hr();PU.exports=i5;async function i5(){let e=o5(),t=MU.get(Nd.CONFIG_PARAMS.ROOTPATH),r=YS.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Nd.PACKAGE_ROOT}},n=YS.join(t,"node_modules");await zo.ensureDir(n);let i,o=!0,c=!1;try{i=await zo.readJson(r)}catch(u){if(LU.isEmptyOrZeroLength(e))return;if(u.code!==Nd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!LU.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await DU(_);s.dependencies[u]=l+_}if(!o){Od.notify("Installing components"),await UU(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await DU(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Od.notify("Removing component",u),c=!0);c&&(Od.notify("Updating components."),await UU(r,s,i))}a(i5,"installComponents");function o5(){let e=n5.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(o5,"getComponentsConfig");async function DU(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":YS.extname(e)||await zo.pathExists(e)?"file:":"github:"}a(DU,"getPkgPrefix");async function UU(e,t,r){Od.trace("npm installing components package.json",t),await zo.writeFile(e,JSON.stringify(t,null," "));try{await Ad().installAllRootModules(MU.get(Nd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await zo.writeFile(e,JSON.stringify(r,null," ")):await zo.unlink(e),s}}a(UU,"installPackages")});var zS=T((l_e,FU)=>{"use strict";var Le=require("fs-extra"),WS=require("fast-glob"),le=require("path"),BU=require("tar-fs"),u_e=require("uuid").v4,QS=require("normalize-path"),xs=AU(),St=G(),Me=b(),nt=X(),eu=hr(),a5=$(),{PACKAGE_ROOT:c5}=b(),{handleHDBError:Tt,hdb_errors:u5}=j(),{basename:l5}=require("path"),_5=KS(),HU=X(),d5=b(),{Readable:f5}=require("stream"),{isMainThread:E5}=require("worker_threads"),{HDB_ERROR_MSGS:Fi,HTTP_STATUS_CODES:Rt}=u5,h5=le.join(c5,"application-template"),vU=le.join(nt.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function m5(){St.trace("getting custom api status");let e={};try{e={port:nt.get(Me.CONFIG_PARAMS.HTTP_PORT),directory:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Tt(new Error,Fi.FUNCTION_STATUS,Rt.INTERNAL_SERVER_ERROR,St.ERR,t)}return e}a(m5,"customFunctionsStatus");function p5(){St.trace("getting custom api endpoints");let e={},t=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Tt(new Error,Fi.GET_FUNCTIONS,Rt.INTERNAL_SERVER_ERROR,St.ERR,r)}return e}a(p5,"getCustomFunctions");function S5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("getting custom api endpoint file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=le.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw Tt(new Error,Fi.GET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(S5,"getCustomFunction");function T5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.setCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("setting custom function file content");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(le.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Tt(new Error,Fi.SET_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,c)}}a(T5,"setCustomFunction");function R5(e){e.project&&(e.project=le.parse(e.project).name),e.file&&(e.file=le.parse(e.file).name);let t=xs.getDropCustomFunctionValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function file");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(le.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Tt(new Error,Fi.DROP_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,o)}}a(R5,"dropCustomFunction");function g5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.addComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("adding component");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=le.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(h5,n),`Successfully added project: ${s}`}catch(n){throw Tt(new Error,Fi.ADD_FUNCTION,Rt.INTERNAL_SERVER_ERROR,St.ERR,n)}}a(g5,"addComponent");function A5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.dropCustomFunctionProjectValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);St.trace("dropping custom function project");let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=nt.get(Me.CONFIG_PARAMS.APPS);if(!a5.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return eu.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=le.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Tt(new Error,Fi.DROP_FUNCTION_PROJECT,Rt.INTERNAL_SERVER_ERROR,St.ERR,i)}}a(A5,"dropCustomFunctionProject");async function O5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.packageComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;St.trace("packaging component",s);let n;try{n=await Le.realpath(le.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(vU);let i=le.join(vU,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(le.join(n,"node_modules"))}),BU.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(O5,"packageComponent");async function N5(e){e.project&&(e.project=le.parse(e.project).name);let t=xs.deployComponentValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(St.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=le.join(r,s),i="file:"+o,await Le.ensureDir(o);let f=f5.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(BU.extract(o,{finish:h})).on("error",p)});let E=await Le.readdir(o);E.length===1&&E[0]==="package"&&(await Le.copy(le.join(o,"package"),o),await Le.remove(le.join(o,"package")))}if(await eu.addConfig(s,{package:i}),!n){await _5();let f=HU.get(d5.CONFIG_PARAMS.ROOTPATH);o=le.join(f,"node_modules",s)}if(E5)return;let c=new Map;c.isWorker=!0;let u=(yd(),Z(bd)),_;u.setErrorReporter(f=>_=f);let l=l5(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return St.info("Installed component"),`Successfully deployed: ${s}`}a(N5,"deployComponent");async function b5(){let e=eu.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Le.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=le.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Le.stat(d),E={name:le.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),{name:nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT).split(le.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(le.join(nt.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(yd(),Z(bd)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(b5,"getComponents");async function y5(e){let t=xs.getComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let s=eu.getConfigObj()[e.project]||e.project==="harperdb"?le.join(HU.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules"):nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Le.stat(le.join(s,e.project,e.file));return{message:await Le.readFile(le.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${le.join(e.project,e.file)}'`):i}}a(y5,"getComponentFile");async function I5(e){let t=xs.setComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(I5,"setComponentFile");async function w5(e){let t=xs.dropComponentFileValidator(e);if(t)throw Tt(t,t.message,Rt.BAD_REQUEST);let r=e.file?le.join(e.project,e.file):e.project,s=le.join(nt.get(Me.CONFIG_PARAMS.COMPONENTSROOT),r);return await Le.pathExists(s)&&await Le.remove(s),eu.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(w5,"dropComponent");FU.exports={customFunctionsStatus:m5,getCustomFunctions:p5,getCustomFunction:S5,setCustomFunction:T5,dropCustomFunction:R5,addComponent:g5,dropCustomFunctionProject:A5,packageComponent:O5,deployComponent:N5,getComponents:b5,getComponentFile:y5,setComponentFile:I5,dropComponent:w5}});var JS=T((d_e,GU)=>{"use strict";var ks=require("joi"),qU=qe();GU.exports={readTransactionLogValidator:C5,deleteTransactionLogsBeforeValidator:L5};function C5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),from:ks.date().timestamp(),to:ks.date().timestamp(),limit:ks.number().min(1)});return qU.validateBySchema(e,t)}a(C5,"readTransactionLogValidator");function L5(e){let t=ks.object({schema:ks.string().required(),table:ks.string().required(),timestamp:ks.date().timestamp().required()});return qU.validateBySchema(e,t)}a(L5,"deleteTransactionLogsBeforeValidator")});var wd=T((E_e,YU)=>{"use strict";var XS=b(),Id=dt(),xU=$(),kU=X(),VU=nn(),{handleHDBError:Jo,hdb_errors:D5}=j(),{HTTP_STATUS_CODES:Xo}=D5,{readTransactionLogValidator:U5,deleteTransactionLogsBeforeValidator:M5}=JS(),$U="This operation relies on clustering and cannot run with it disable.",P5="Logs successfully deleted from transaction log.",v5="All logs successfully deleted from transaction log.";YU.exports={readTransactionLog:B5,deleteTransactionLogsBefore:H5};async function*B5(e){let t=U5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=xU.checkSchemaTableExist(r,s);if(n)throw Jo(new Error,n,Xo.NOT_FOUND,void 0,void 0,!0);let i=VU.createNatsTableStreamName(r,s),o=await Id.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===XS.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(B5,"readTransactionLog");async function H5(e){let t=M5(e);if(t)throw Jo(t,t.message,Xo.BAD_REQUEST,void 0,void 0,!0);if(!kU.get(XS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Jo(new Error,$U,Xo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=xU.checkSchemaTableExist(r,s);if(i)throw Jo(new Error,i,Xo.NOT_FOUND,void 0,void 0,!0);let o=VU.createNatsTableStreamName(r,s),{jsm:c}=await Id.getNATSReferences(),u=await Id.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=P5,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=v5):d=(await Id.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(H5,"deleteTransactionLogsBefore")});var WU=T((m_e,KU)=>{"use strict";var jS=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};KU.exports=jS});var zU=T((S_e,QU)=>{"use strict";var ZS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};QU.exports=ZS});var tT=T((R_e,XU)=>{"use strict";var JU=WU(),F5=zU(),{HDB_ERROR_MSGS:q5}=dr(),eT=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=q5.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new JU(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new F5(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new JU(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};XU.exports=eT});var Ud=T((A_e,fM)=>{"use strict";var rT=Gr(),Cd=qr(),Qr=L_(),su=pi(),sT=Ai(),G5=pp(),x5=CC(),nu=xr(),Ld=yp(),ft=G(),k5=Cp(),V5=Q_(),$5=lS(),Y5=j_(),K5=_S(),W5=dS(),Q5=hS(),z5=pS(),nT=RS(),dn=$(),J5=yD(),iT=bS(),eM=dd(),Wr=b(),tM=oU(),X5=Fo(),rM=Uc(),sM=(pd(),Z(zc)),nM=hr(),yr=zS(),j5=require("alasql"),iM=wd(),oM=Ad(),aM=tT(),{handleHDBError:ir,hdb_errors:cM}=j(),{HDB_ERROR_MSGS:Ct,HTTP_STATUS_CODES:tu}=cM,v=new Map,uM="delete",Jn="insert",fn="read",qi="update",ru="describe",jU=su.describeSchema.name,ZU=su.describeTable.name,lM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Z5="catchup",e8="handleGetJob",t8="handleGetJobsByStartDate",Dd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},r8=[Qr.createTable.name,Qr.createAttribute.name,Qr.dropTable.name,Qr.dropAttribute.name],_M={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(rT.insert.name,new F(!1,[Jn]));v.set(rT.update.name,new F(!1,[qi]));v.set(rT.upsert.name,new F(!1,[Jn,qi]));v.set(Cd.searchByConditions.name,new F(!1,[fn]));v.set(Cd.searchByHash.name,new F(!1,[fn]));v.set(Cd.searchByValue.name,new F(!1,[fn]));v.set(Cd.search.name,new F(!1,[fn]));v.set(Qr.createSchema.name,new F(!0,[]));v.set(Qr.createTable.name,new F(!0,[]));v.set(Qr.createAttribute.name,new F(!1,[Jn]));v.set(Qr.dropSchema.name,new F(!0,[]));v.set(Qr.dropTable.name,new F(!0,[]));v.set(Qr.dropAttribute.name,new F(!0,[]));v.set(su.describeSchema.name,new F(!1,[fn]));v.set(su.describeTable.name,new F(!1,[fn]));v.set(sT.deleteRecord.name,new F(!1,[uM]));v.set(nu.addUser.name,new F(!0,[]));v.set(nu.alterUser.name,new F(!0,[]));v.set(nu.dropUser.name,new F(!0,[]));v.set(nu.listUsersExternal.name,new F(!0,[]));v.set(Ld.listRoles.name,new F(!0,[]));v.set(Ld.addRole.name,new F(!0,[]));v.set(Ld.alterRole.name,new F(!0,[]));v.set(Ld.dropRole.name,new F(!0,[]));v.set(k5.name,new F(!0,[]));v.set(V5.name,new F(!0,[]));v.set($5.name,new F(!0,[]));v.set(Y5.name,new F(!0,[]));v.set(K5.name,new F(!0,[]));v.set(W5.name,new F(!0,[]));v.set(nT.setRoutes.name,new F(!0,[]));v.set(nT.getRoutes.name,new F(!0,[]));v.set(nT.deleteRoutes.name,new F(!0,[]));v.set(nM.setConfiguration.name,new F(!0,[]));v.set(Q5.clusterStatus.name,new F(!0,[]));v.set(z5.name,new F(!0,[]));v.set(iT.getFingerprint.name,new F(!0,[]));v.set(iT.setLicense.name,new F(!0,[]));v.set(sT.deleteFilesBefore.name,new F(!0,[]));v.set(sT.deleteAuditLogsBefore.name,new F(!0,[]));v.set(eM.restart.name,new F(!0,[]));v.set(eM.restartService.name,new F(!0,[]));v.set(G5.name,new F(!0,[]));v.set(x5.name,new F(!0,[fn]));v.set(X5.systemInformation.name,new F(!0,[]));v.set(nM.getConfiguration.name,new F(!0,[]));v.set(iM.readTransactionLog.name,new F(!0,[]));v.set(iM.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(oM.installModules.name,new F(!0,[]));v.set(oM.auditModules.name,new F(!0,[]));v.set(rM.createTokens.name,new F(!1,[]));v.set(rM.refreshOperationToken.name,new F(!1,[]));v.set(sM.login.name,new F(!1,[]));v.set(sM.logout.name,new F(!1,[]));v.set(yr.customFunctionsStatus.name,new F(!0,[]));v.set(yr.getCustomFunctions.name,new F(!0,[]));v.set(yr.getComponents.name,new F(!0,[]));v.set(yr.getComponentFile.name,new F(!0,[]));v.set(yr.setComponentFile.name,new F(!0,[]));v.set(yr.dropComponent.name,new F(!0,[]));v.set(yr.getCustomFunction.name,new F(!0,[]));v.set(yr.setCustomFunction.name,new F(!0,[]));v.set(yr.dropCustomFunction.name,new F(!0,[]));v.set(yr.addComponent.name,new F(!0,[]));v.set(yr.dropCustomFunctionProject.name,new F(!0,[]));v.set(yr.packageComponent.name,new F(!0,[]));v.set(yr.deployComponent.name,new F(!0,[]));v.set(iT.getRegistrationInfo.name,new F(!1,[]));v.set(nu.userInfo.name,new F(!1,[]));v.set(su.describeAll.name,new F(!1,[]));v.set(e8,new F(!1,[]));v.set(t8,new F(!0,[]));v.set(Z5,new F(!0,[]));v.set(Dd.CSV_DATA_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_URL_LOAD,new F(!1,[Jn,qi]));v.set(Dd.CSV_FILE_LOAD,new F(!1,[Jn,qi]));v.set(Dd.IMPORT_FROM_S3,new F(!1,[Jn,qi]));v.set(_M.EXPORT_TO_S3,new F(!0,[]));v.set(_M.EXPORT_LOCAL,new F(!0,[]));v.set(Wr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[uM]));v.set(Wr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[fn]));v.set(Wr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[Jn]));v.set(Wr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[qi]));fM.exports={verifyPerms:n8,verifyPermsAst:s8,verifyBulkLoadAttributePerms:o8};function s8(e,t,r){if(dn.isEmptyOrZeroLength(e))throw ft.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(t))throw ft.info("verify_perms_ast has an empty user parameter"),ir(new Error);if(dn.isEmptyOrZeroLength(r))throw ft.info("verify_perms_ast has a null operation parameter"),ir(new Error);try{let s=new aM,n=new J5(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ft.info("No schemas defined in verifyPermsAst(), will not continue."),ir(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&lM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(c&&!u)return null;let _=tM.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof j5.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=dM(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),p=aT(t.role.permission,f,d[E]);oT(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw ir(s)}}a(s8,"verifyPermsAst");function n8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ft.info("null required parameter in verifyPerms"),ir(new Error,Ct.DEFAULT_INVALID_REQUEST,tu.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new aM;if(dn.isEmptyOrZeroLength(e.hdb_user.role)||dn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ft.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ct.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(Wr.SYSTEM_SCHEMA_NAME)||n===Wr.SYSTEM_SCHEMA_NAME;if(l&&lM[r])throw ir(new Error,Ct.DROP_SYSTEM,tu.FORBIDDEN);if(u&&!l||_===!0&&(r===Qr.createSchema.name||r===Qr.dropSchema.name))return null;if(r8.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=tM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===jU||r===ZU){if(n===Wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ct.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===jU&&(!d[n]||!d[n][ru]))return c.handleInvalidItem(Ct.SCHEMA_NOT_FOUND(n));if(r===ZU&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][ru]))return c.handleInvalidItem(Ct.TABLE_NOT_FOUND(n,i))}}let f=dM(e.hdb_user,r,o,c,s);if(f)return f;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],S=d[n].tables[i];S[Wr.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(I=>I[Wr.PERMS_CRUD_ENUM.READ]).forEach(I=>{p.push(I.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let E=i8(e),h=aT(e.hdb_user.role.permission,n,i);return oT(E,h,r,i,n,c,s),c.getPermsResponse()}a(n8,"verifyPerms");function dM(e,t,r,s,n){if(dn.arrayHasEmptyValues([e,t,r]))throw ft.info("hasPermissions has an invalid parameter"),ir(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw ft.info(`operation ${t} not found.`),ir(new Error,Ct.OP_NOT_FOUND(t),tu.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ft.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ct.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][ru]===!1){s.addInvalidItem(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[ru]===!1)s.addInvalidItem(Ct.TABLE_NOT_FOUND(u,l));else try{let f=[],E=v.get(t).perms;!dn.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let p=E[h],S=d[p];(S==null||S===!1)&&(ft.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ct.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw ft.error(E),ft.error(f),ir(cM.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(dM,"hasPermissions");function oT(e,t,r,s,n,i,o){if(!e||!t)throw ft.info("no attributes specified in checkAttributePerms."),ir(new Error);let c=v.get(r).perms;if(!c||c==="")throw ft.info(`no permissions found for ${r} in checkAttributePerms().`),ir(new Error);if(dn.isEmptyOrZeroLength(t))return ft.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[ru]===!1){i.addInvalidItem(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!==fn)throw ir(new Error,Ct.SYSTEM_TIMESTAMP_PERMS_ERR,tu.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ct.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(oT,"checkAttributePerms");function i8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Wr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){ft.info(r)}return t}a(i8,"getRecordAttributes");function aT(e,t,r){let s=new Map;if(dn.isEmpty(e))return ft.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{ft.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(aT,"getAttributePermissions");function o8(e,t,r,s,n,i,o){let c=new Set(i),u=aT(e,s,n);oT(c,u,t,n,s,o,r)}a(o8,"verifyBulkLoadAttributePerms")});var Pd=T((N_e,SM)=>{"use strict";SM.exports={evaluateSQL:T8,processAST:pM,convertSQLToAST:mM,checkASTPermissions:hM};var a8=Gr(),EM=require("util"),c8=EM.callbackify(a8.insert),u8=qr().search,l8=Aw().update,_8=EM.callbackify(l8),d8=Nw().convertDelete,Xn=require("alasql"),f8=Ud(),Md=G(),E8=m_(),h8=$(),iu=b(),{hdb_errors:m8,handleHDBError:cT}=j(),{HTTP_STATUS_CODES:uT}=m8;E8(Xn);var p8=403,S8="There was a problem performing this insert. Please check the logs and try again.",lT=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function T8(e,t){let r=e.parsed_sql_object;if(!r){r=mM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xn.yy.Insert?s=n.into.databaseid:n instanceof Xn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xn.yy.Update||n instanceof Xn.yy.Delete?s=n.table.databaseid:Md.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xn.yy.Select)&&h8.isEmptyOrZeroLength(s))return t("No schema specified",null)}pM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(T8,"evaluateSQL");function hM(e,t){let r;try{r=f8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(hM,"checkASTPermissions");function mM(e){let t=new lT;if(!e)throw cT(new Error,"The 'sql' parameter is missing from the request body",uT.BAD_REQUEST);try{let r=e.trim(),s=Xn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
|
|
15
|
+
`);throw s[1]?cT(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,uT.BAD_REQUEST):cT(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",uT.BAD_REQUEST)}return t}a(mM,"convertSQLToAST");function pM(e,t,r){try{let s=R8;if(!e.bypass_auth&&!t.permissions_checked){let i=hM(e,t);if(i&&i.length>0)return r(p8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case iu.VALID_SQL_OPS_ENUM.SELECT:s=u8,n=t.ast.statements[0];break;case iu.VALID_SQL_OPS_ENUM.INSERT:s=g8;break;case iu.VALID_SQL_OPS_ENUM.UPDATE:s=_8;break;case iu.VALID_SQL_OPS_ENUM.DELETE:s=d8;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(pM,"processAST");function R8(e,t){Md.info(e),t("unknown sql statement")}a(R8,"nullFunction");function g8({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=A8(i,e.values)}catch(o){return r(o)}c8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Md.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(g8,"convertInsert");function A8(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Xn.compile(`SELECT ${n.toString()} AS [${iu.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Md.error(r),new Error(S8)}}a(A8,"createDataObjects")});var _T=T((y_e,RM)=>{"use strict";var{S3:O8,GetObjectCommand:N8}=require("@aws-sdk/client-s3");RM.exports={getFileStreamFromS3:b8,getS3AuthObj:TM};async function b8(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await TM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new N8(r))).Body}a(b8,"getFileStreamFromS3");function TM(e,t,r){return new O8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(TM,"getS3AuthObj")});var vd=T((w_e,LM)=>{"use strict";var OM=qr(),y8=Pd(),I8=_T(),{AsyncParser:w8,Transform:C8}=require("json2csv"),au=require("stream"),Ir=$(),dT=require("fs-extra"),L8=require("path"),zr=G(),{promisify:NM}=require("util"),ou=$(),{handleHDBError:it,hdb_errors:D8}=j(),{HDB_ERROR_MSGS:or,HTTP_STATUS_CODES:ot}=D8,{streamAsJSON:U8}=FE(),{Upload:M8}=require("@aws-sdk/lib-storage"),gM=["search_by_value","search_by_hash","sql"],AM=["json","csv"],bM="json",yM="csv",P8="Successfully exported JSON locally.",v8="Successfully exported CSV locally.",B8=1e3,H8=OM.searchByHash,F8=OM.searchByValue,q8=NM(y8.evaluateSQL),G8=NM(au.finished);LM.exports={export_to_s3:$8,export_local:x8,toCsvStream:IM};async function x8(e){zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=wM(e);if(!Ir.isEmpty(t))throw zr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Ir.isEmpty(e.path))throw zr.error(or.MISSING_VALUE("path")),it(new Error,or.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Ir.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(L8.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Ir.buildFolderPath(e.path,r);await k8(e.path);let n=await CM(e);return await V8(s,e.format,n)}a(x8,"export_local");async function k8(e){if(zr.trace("in confirmPath"),Ir.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await dT.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,zr.error(s),it(new Error,s,ot.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw zr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(k8,"confirmPath");async function V8(e,t,r){if(zr.trace("in saveToLocal"),ou.isEmptyOrZeroLength(e))throw it(new Error,or.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmptyOrZeroLength(t))throw it(new Error,or.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(ou.isEmpty(r))throw it(new Error,or.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===bM){let s=dT.createWriteStream(e);return U8(r).pipe(s),await G8(s),{message:P8,path:e}}else if(t===yM){let s=dT.createWriteStream(e),n=au.Readable.from(r),i={},o={objectMode:!0};return await new w8(i,o).fromInput(n).toOutput(s).promise(!1),{message:v8,path:e}}throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(V8,"saveToLocal");async function $8(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,or.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,or.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,or.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,or.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.key))throw it(new Error,or.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Ir.isEmptyOrZeroLength(e.s3.region))throw it(new Error,or.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=wM(e);if(!Ir.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await CM(e)}catch(u){throw zr.error(u),u}let s,n=await I8.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new au.PassThrough;if(e.format===yM){i=e.s3.key+".csv";let u=IM(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===bM){i=e.s3.key+".json";let u=new au.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%B8===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw it(new Error,or.INVALID_VALUE("format"),ot.BAD_REQUEST);return new M8({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a($8,"export_to_s3");function IM(e){let t=au.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new C8(r,s);return t.pipe(n)}a(IM,"toCsvStream");function wM(e){if(zr.trace("in exportCoreValidation"),Ir.isEmpty(e.format))return"format missing";if(AM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${AM.join(", ")}`;let t=e.search_operation.operation;if(Ir.isEmpty(t))return"search_operation.operation missing";if(gM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${gM.join(", ")}`}a(wM,"exportCoreValidation");async function CM(e){zr.trace("in getRecords");let t,r;if(ou.isEmpty(e.search_operation)||ou.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,or.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=F8;break;case"search_by_hash":t=H8;break;case"sql":t=q8;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,zr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(CM,"getRecords")});var FM={};Qe(FM,{contentTypes:()=>ET,findBestSerializer:()=>Fd,getDeserializer:()=>jo,registerContentHandlers:()=>hT,serialize:()=>qd,serializeMessage:()=>zn});function Y8(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function hT(e){e.register(W8,{serializers:[{regex:/^application\/json$/,serializer:Bd.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Gi.EncoderStream(cu).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Hd.Readable.from((0,Vs.encodeIter)(t,cu)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Vs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Gi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Fd(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=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 qd(e,t,r){let s=UM&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=Fd(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,En.createBrotliCompress)({params:{[En.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?En.constants.BROTLI_MODE_TEXT:En.constants.BROTLI_MODE_GENERIC,[En.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>UM?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,En.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zn(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=Fd(t);return r=t.serialize=s.serializer.serialize,r(e)}function Q8(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function jo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Lt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Lt.get(e)?.deserialize||MM(e,s);return o=>Q8(o).then(i)}return e&&Lt.get(e)?.deserialize||MM(e,s)}function MM(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function z8(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Bd,fT,Vs,Gi,En,Hd,PM,vM,BM,cu,Lt,ET,DM,HM,K8,W8,UM,Yo=Te(()=>{Bd=D(FE()),fT=D(vd()),Vs=require("msgpackr"),Gi=require("cbor-x"),En=require("zlib"),Hd=require("stream");Mr();PM=require("../../index"),vM=D(X()),BM=D(b()),cu={useRecords:!1,useToJSON:!0},Lt=new Map,ET=Lt;ut.contentTypes=ET;(0,PM._assignPackageExport)("contentTypes",ET);Lt.set("application/json",{serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});DM=new Gi.Encoder(cu);Lt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Gi.EncoderStream(cu).end(e)},serialize:DM.encode,deserialize:DM.decode,q:1});Lt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Hd.Readable.from((0,Vs.encodeIter)(e,cu)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Lt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,fT.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 Hd.Readable.from(z8(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
|
|
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()}});HM={type:"application/json",serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:$8,q:.8};Lt.set("*/*",HM);Lt.set("",HM);a($8,"tryJSONParse");a(hT,"registerContentHandlers");Y8=require("fastify-plugin"),K8=Y8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Fd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Fd,"findBestSerializer");UM=vM.default.get(BM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qd,"serialize");a(zn,"serializeMessage");a(W8,"streamToBuffer");a(jo,"getDeserializer");a(MM,"deserializerUnknownType");a(Q8,"transformIterable")});var Gd={};Qe(Gd,{start:()=>X8});async function J8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hl(e);let n=new Bi;try{e.responseHeaders=n;let i=e.url.slice(1),o=pT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=jo(r["content-type"],!0)(e.body)}catch(p){throw new lu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new lu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new lu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,mT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){z8[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),mT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=qd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=qd(i.contentType?i:i.toString(),e,o),o}}function X8(e){mT=e,!qM&&(qM=!0,pT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return J8(t,r)}),e.server.ws(async(t,r,s)=>{uu++;let n=new ns;GM||(GM=!0,Ac(l=>{uu>0&&l.push({metric:"ws-connections",connections:uu,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=jo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{uu--,xr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=pT.getMatch(u);if(xr(!!_,"connection","ws","connect"),!_)t.send(zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Or(h=>({count:h.count,total:uu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=zn(E.value,r);t.send(h),Or(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,lu,Dt,z8,mT,qM,pT,GM,uu,xM=Te(()=>{Yo();xn();xi=D(G()),lu=D(j());ml();Pa();di();VS();Dt=new Uint8Array(8),z8=new Float64Array(Dt.buffer,0,1),mT={};a(J8,"http");uu=0;a(X8,"start")});var ST=T((q_e,kM)=>{var{recordAction:xd,recordActionBinary:j8}=(xn(),Z(A_)),Z8=require("fastify-plugin"),e6=200;kM.exports=Z8(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),xd(o,"duration",_,d,l),j8(n.raw.statusCode<400,"success",_,d,l);let f=e6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{xd(performance.now()-c,"transfer",_,d,l),xd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,xd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var AT=T((G_e,WM)=>{var Kd=require("clone"),Wd=qe(),t6=$(),$d=b(),r6=G(),kd=require("fs"),TT=require("joi"),{string:Yd}=TT.types(),{hdb_errors:s6,handleHDBError:_u}=j(),{HDB_ERROR_MSGS:n6,HTTP_STATUS_CODES:Vd}=s6,{common_validators:Zo}=Ls(),VM=1e9,$M=" is required",i6=["insert","update","upsert"],RT={database:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},schema:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},table:{presence:!0,format:Zo.schema_format,length:Zo.schema_length},action:{inclusion:{within:i6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},o6={schema:Yd.required(),table:Yd.required(),action:Yd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:a6,AWS_SECRET:c6,AWS_BUCKET:u6,AWS_FILE_KEY:l6,REGION:_6}=$d.S3_BUCKET_AUTH_KEYS,d6={s3:{presence:!0},[`s3.${a6}`]:{presence:!0,type:"String"},[`s3.${c6}`]:{presence:!0,type:"String"},[`s3.${u6}`]:{presence:!0,type:"String"},[`s3.${l6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${_6}`]:{presence:!0,type:"String"}},YM=Kd(RT);YM.data.presence={message:$M};var KM=Kd(RT);KM.file_path.presence={message:$M};var f6=Object.assign(Kd(RT),d6),gT=Kd(o6);gT.csv_url=Yd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();gT.passthrough_headers=TT.object();function E6(e){let t=Wd.validateObject(e,YM);return Qd(e,t)}a(E6,"dataObject");function h6(e){let t=Wd.validateBySchema(e,TT.object(gT));return Qd(e,t)}a(h6,"urlObject");function m6(e){let t=Wd.validateObject(e,KM);return Qd(e,t)}a(m6,"fileObject");function p6(e){let t=Wd.validateObject(e,f6);return Qd(e,t)}a(p6,"s3FileObject");function Qd(e,t){if(!t){let r=t6.checkGlobalSchemaTable(e.schema,e.table);if(r)return _u(new Error,r,Vd.BAD_REQUEST);if(e.operation===$d.OPERATIONS_ENUM.CSV_FILE_LOAD){try{kd.accessSync(e.file_path,kd.constants.R_OK|kd.constants.F_OK)}catch(s){return s.code===$d.NODE_ERROR_CODES.ENOENT?_u(s,`No such file or directory ${s.path}`,Vd.BAD_REQUEST):s.code===$d.NODE_ERROR_CODES.EACCES?_u(s,`Permission denied ${s.path}`,Vd.BAD_REQUEST):_u(s)}try{let s=kd.statSync(e.file_path).size;if(s>VM)return _u(new Error,n6.MAX_FILE_SIZE_ERR(s,VM),Vd.BAD_REQUEST)}catch(s){r6.error(s),console.error(s)}}}return t}a(Qd,"postValidateChecks");WM.exports={dataObject:E6,urlObject:h6,fileObject:m6,s3FileObject:p6}});var OT=T((k_e,QM)=>{"use strict";var du=G(),zd=b();async function S6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===zd.OPERATIONS_ENUM.INSERT||t.operation===zd.OPERATIONS_ENUM.UPDATE||t.operation===zd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===zd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(du.info(i.message),i):i.http_resp_msg?(du.error(`Error calling operation: ${e.name}`),du.error(i.http_resp_msg),i):(du.error(`Error calling operation: ${e.name}`),du.error(i),i)}}a(S6,"callOperationFunctionAsAwait");QM.exports={callOperationFunctionAsAwait:S6}});var JM=T(($_e,zM)=>{"use strict";var NT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},bT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};zM.exports={BulkLoadFileObject:NT,BulkLoadDataObject:bT}});var jM=T((K_e,XM)=>{"use strict";var yT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};XM.exports=yT});var UT=T((j_e,hP)=>{"use strict";var Jd=qr(),jd=AT(),T6=require("needle"),Ts=b(),Q_e=ke(),ea=$(),{handleHDBError:$e,hdb_errors:aP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:ft,CHECK_LOGS_WRAPPER:Vi}=aP,ta=G(),IT=require("papaparse");ea.promisifyPapaParse();var Rs=require("fs-extra"),R6=require("path"),{chain:ZM}=require("stream-chain"),eP=require("stream-json/streamers/StreamArray"),tP=require("stream-json/utils/Batch"),rP=require("stream-chain/utils/comp"),{finished:sP}=require("stream"),g6=X(),cP=OT(),A6=_T(),{BulkLoadFileObject:CT,BulkLoadDataObject:O6}=JM(),LT=tT(),{verifyBulkLoadAttributePerms:uP}=Ud(),z_e=jM(),J_e=_t(),X_e=nn(),{databases:N6}=(fe(),Z(Ce)),{coerceType:b6}=(Zd(),Z(MT)),nP="No records parsed from csv file.",ki=`${g6.get("HDB_ROOT")}/tmp`,{schema_regex:y6}=Ls(),iP=1024*1024*2,oP=5e3,I6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hP.exports={csvDataLoad:w6,csvURLLoad:C6,csvFileLoad:L6,importFromS3:D6};async function w6(e,t){let r=jd.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=dP(e.schema,e.table),i=IT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:wT.bind(null,n),dynamicTyping:!1}),o=new LT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new O6(e.action,e.schema,e.table,i.data);return s=await cP.callOperationFunctionAsAwait(fP,u,null),s.message===nP?nP:EP(s.records,s.number_written)}catch(n){throw $i(n)}}a(w6,"csvDataLoad");async function C6(e){let t=jd.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 U6(e,r)}catch(n){throw ta.error(ft.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(ft.DOWNLOAD_FILE_ERR(r)))}try{let n=new CT(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 DT(n);return await Xd(s),i}catch(n){throw await Xd(s),$i(n)}}a(C6,"csvURLLoad");async function L6(e){let t=jd.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new CT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ts.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await DT(r)}catch(s){throw $i(s)}}a(L6,"csvFileLoad");async function D6(e){let t=jd.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=R6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new CT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await M6(n,e);let o=await DT(i);return await Xd(r),o}catch(s){throw await Xd(r),$i(s)}}a(D6,"importFromS3");async function U6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await T6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Ts.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}v6(r,e.csv_url),await P6(t,r.raw)}a(U6,"downloadCSVFile");async function M6(e,t){try{let r=`${ki}/${e}`;await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await Rs.createWriteStream(r),n=await A6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){ta.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ta.error(ft.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(ft.S3_DOWNLOAD_ERR))}}a(M6,"downloadFileFromS3");async function P6(e,t){try{await Rs.mkdirp(ki),await Rs.writeFile(`${ki}/${e}`,t)}catch(r){throw ta.error(ft.WRITE_TEMP_FILE_ERR),$e(r,Vi(ft.DEFAULT_BULK_LOAD_ERR))}}a(P6,"writeFileToTempFolder");async function Xd(e){if(e)try{await Rs.access(e),await Rs.unlink(e)}catch{ta.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Xd,"deleteTempFile");function v6(e,t){if(e.statusCode!==aP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!I6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,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(v6,"validateURLResponse");async function DT(e){try{let t;switch(e.file_type){case Ts.VALID_S3_FILE_TYPES.CSV:t=await B6(e);break;case Ts.VALID_S3_FILE_TYPES.JSON:t=await H6(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 EP(t.records,t.number_written)}catch(t){throw $i(t)}}a(DT,"fileLoad");async function lP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Jd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(lP,"validateChunk");async function _P(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ea.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ea.isEmpty(c)&&!ea.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await cP.callOperationFunctionAsAwait(fP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(ft.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_CSV_ERR+" - "+c);r(u)}}a(_P,"insertChunk");async function B6(e){let t={records:0,number_written:0},r=dP(e.schema,e.table);try{let s=new LT,n=Rs.createReadStream(e.file_path,{highWaterMark:iP});n.setEncoding("utf8"),await IT.parsePromise(n,lP.bind(null,e,s),wT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=Rs.createReadStream(e.file_path,{highWaterMark:iP}),n.setEncoding("utf8"),await IT.parsePromise(n,_P.bind(null,e,t),wT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(ft.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.PAPA_PARSE_ERR+s)}}a(B6,"callPapaParse");function dP(e,t){let r=N6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>b6(i,n));return s}a(dP,"createTransformMap");function wT(e,t,r){let s=e.get(r);return s?s(t):ea.autoCast(t)}a(wT,"typeFunction");async function H6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new LT,n=ZM([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await lP(e,s,r,c)})]);await new Promise((c,u)=>{sP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=ZM([Rs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await _P(e,t,r,c)})]);return await new Promise((c,u)=>{sP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(ft.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Ts.LOG_LEVELS.ERROR,ft.INSERT_JSON_ERR+s)}}a(H6,"insertJson");async function fP(e){let t={};try{e.data&&e.data.length>0&&F6(e.data[0])?t=await q6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ta.info(t.message))}catch(r){throw $i(r)}return t}a(fP,"callBulkFileLoad");function F6(e){let t=Object.keys(e);for(let r of t)if(!y6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(F6,"validateColumnNames");async function q6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Jd.insert;break;case"update":i=Jd.update;break;case"upsert":i=Jd.upsert;break;default:throw $e(new Error,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=ea.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(q6,"bulkFileLoad");function EP(e,t){return`successfully loaded ${t} of ${e} records`}a(EP,"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 pP=T((ede,mP)=>{"use strict";var PT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mP.exports=PT});var RP=T((rde,TP)=>{"use strict";var G6=b(),SP=require("moment"),x6=require("uuid").v4,vT=class{static{a(this,"JobObject")}constructor(){this.id=x6(),this.type=void 0,this.start_datetime=SP().valueOf(),this.created_datetime=SP().valueOf(),this.end_datetime=void 0,this.status=G6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};TP.exports=vT});var BT=T((nde,yP)=>{"use strict";var k6=require("uuid").v4,OP=qr(),NP=Fr(),V6=Ps(),$6=Oo(),Y6=pP(),Ye=b(),K6=RP(),W6=Up(),zr=G(),Q6=za(),ra=$(),{promisify:z6}=require("util"),Yi=require("moment"),J6=Pd(),ef=AT(),gP=Bh(),{deleteTransactionLogsBeforeValidator:X6}=JS(),{handleHDBError:j6,hdb_errors:Z6}=j(),{HTTP_STATUS_CODES:e9}=Z6,AP=NP.searchByValue,t9=NP.searchByHash,r9=OP.insert,s9=z6(J6.evaluateSQL),n9=OP.update;yP.exports={addJob:a9,updateJob:u9,handleGetJob:i9,handleGetJobsByStartDate:o9,getJobById:bP};async function i9(e){try{let t=await bP(e.id);return ra.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw zr.error("There was an error getting job",t),new Error(r)}}a(i9,"handleGetJob");async function o9(e){try{let t=await c9(e);if(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(o9,"handleGetJobsByStartDate");async function a9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ra.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return 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=ef.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=ef.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ef.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ef.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=gP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=gP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=X6(e);break;default:break}if(s)throw j6(s,s.message,e9.BAD_REQUEST,void 0,void 0,!0);let n=new K6;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new V6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await AP(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=k6();try{o=await AP(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 Q6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await r9(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(a9,"addJob");async function c9(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 Y6(s,e.hdb_user);try{return await s9(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(c9,"getJobsInDateRange");async function bP(e){if(ra.isEmptyOrZeroLength(e))return ra.errorizeMessage("Invalid job ID specified.");let t=new $6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await t9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return zr.error(s),ra.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(bP,"getJobById");async function u9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ra.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yi().valueOf());let t=new W6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await n9(t),r}a(u9,"updateJob")});var UP=T((ode,DP)=>{"use strict";var IP=$(),ar=b(),l9=require("moment"),tf=UT(),rf=G(),wP=BT(),CP=vd(),LP=Ai(),_9=Ze(),d9=wd(),HT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function f9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(IP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(IP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await hn(e,tf.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await hn(e,tf.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await hn(e,tf.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await hn(e,tf.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await hn(e,CP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await hn(e,CP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await hn(e,LP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await hn(e,LP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await hn(e,d9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(f9,"parseMessage");async function hn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=l9().valueOf(),await wP.updateJob(e.job),await E9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):rf.error(`There was an error running ${t.name} job with id ${e.job.id}`),rf.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await wP.updateJob(e.job)}catch(n){throw rf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(hn,"runJob");async function E9(e){rf.trace("launching job thread:",e),_9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(E9,"launchJobThread");DP.exports={parseMessage:f9,RunnerMessage:HT}});var PP=T((cde,MP)=>{"use strict";var FT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};MP.exports=FT});var JP=T((lde,$T)=>{"use strict";var af=Fr(),xT=Pd(),sf=UT(),mn=L_(),nf=pi(),Eu=Ai(),h9=pp(),fu=Gr(),of=yp(),Mt=zS(),Et=G(),m9=Cp(),p9=Q_(),S9=lS(),T9=j_(),R9=_S(),g9=dS(),A9=hS(),O9=pS(),qT=RS(),vP=vd(),N9=Ud(),kT=BT(),P=b(),{hdb_errors:mu,handleHDBError:hu}=j(),{HTTP_STATUS_CODES:BP}=mu,GT=bS(),HP=dd(),KP=require("util"),sa=qr(),b9=Pn(),y9=Fo(),FP=UP(),qP=Uc(),GP=(pd(),Z(zc)),xP=Er(),kP=wd(),VP=Ad(),{setServerUtilities:I9}=(Zd(),Z(MT)),{CONTEXT:w9}=(os(),Z(CE)),{_assignPackageExport:C9}=require("../../index"),{transformReq:L9}=$(),{server:D9}=(Ur(),Z(eo)),U9=OT(),$P=af.searchByHash,M9=af.searchByValue,P9=KP.promisify(af.search),v9=KP.promisify(xT.evaluateSQL),B9={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=PP();async function WP(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 U9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return B9[e.body.operation]&&b9.setSchemaDataToGlobal(s=>{s&&Et.error(s)}),r}a(WP,"processLocalTransaction");var YP=F9();$T.exports={chooseOperation:QP,getOperationFunction:zP,operation:VT,processLocalTransaction:WP};I9($T.exports);D9.operation=VT;function QP(e){let t;try{t=zP(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=xT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xT.checkASTPermissions(e,i);if(o)throw Et.error(`${BP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=N9.verifyPerms(i,n);if(o)throw Et.error(`${BP.FORBIDDEN} from operation ${e.operation}`),Et.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw hu(n,"There was an error when trying to choose an operation path")}return r}a(QP,"chooseOperation");function zP(e){if(Et.trace(`getOperationFunction with operation: ${e.operation}`),YP.has(e.operation))return YP.get(e.operation);throw hu(new Error,mu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),mu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(zP,"getOperationFunction");C9("operation",VT);function VT(e,t){e.hdb_user=this[w9]?.user,e.bypass_auth=!t;let r=QP(e);return WP({body:e},r)}a(VT,"operation");async function H9(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 sa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await sa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await sa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Eu.deleteRecord(i);break;default: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(H9,"catchup");async function Vs(e){L9(e);let t,r;try{r=await kT.addJob(e),t=r.createdJob,Et.info("addJob result",r);let s=new FP.RunnerMessage(t,e);return await FP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Et.error(n),hu(s,n)}}a(Vs,"executeJob");function F9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(sa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(sa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(sa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(af.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(M9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(P9)),e.set(P.OPERATIONS_ENUM.SQL,new H(v9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H(Vs,sf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H(Vs,sf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H(Vs,sf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H(Vs,sf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(mn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(mn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(mn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(mn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(nf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(nf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Eu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(fu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(fu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(fu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(fu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(of.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(of.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(of.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(of.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(fu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(m9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(p9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(S9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(T9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(R9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(g9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(xP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(A9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(O9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(qT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(qT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(qT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H(Vs,vP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H(Vs,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H(Vs,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H(Vs,vP.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(kT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(kT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(GT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(GT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(GT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(HP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(HP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(H9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(y9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H(Vs,Eu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(h9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(qP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(qP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(GP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(GP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(xP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(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(kP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H(Vs,kP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(VP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(VP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(mn.getBackup)),e}a(F9,"initializeOperationFunctionMap")});var uf=T((dde,ZP)=>{"use strict";var YT=b(),q9=$(),pu=G(),{handleHDBError:KT,hdb_errors:cf}=j(),{isMainThread:G9}=require("worker_threads"),{Readable:x9}=require("stream"),XP=require("os"),k9=require("util"),V9=Gp(),$9=k9.promisify(V9.authorize),jP=JP(),{createGzip:Y9,constants:K9}=require("zlib");function W9(e){let t=`Found an uncaught exception with message: ${e.message}. ${XP.EOL}Stack: ${e.stack} ${XP.EOL}Terminating ${G9?"HDB":"thread"}.`;console.error(t),pu.fatal(t),process.exit(1)}a(W9,"handleServerUncaughtException");function Q9(e,t,r){if(pu[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:cf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(Q9,"serverErrorHandler");function z9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=KT(new Error,"Invalid JSON.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(q9.isEmpty(e.body.operation)){let s=KT(new Error,"Request body must include an 'operation' property.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(z9,"reqBodyValidationHandler");function J9(e,t,r){let s;e.body.operation!==YT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==YT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==YT.OPERATIONS_ENUM.LOGOUT?$9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{pu.warn(n),pu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(KT(n,i,cf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(J9,"authHandler");async function X9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=jP.chooseOperation(e.body);let n=await jP.processLocalTransaction(e,s);if(n instanceof x9&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(Y9({level:K9.Z_BEST_SPEED})))}return n}catch(n){throw pu.error(n),n}}a(X9,"handlePostRequest");ZP.exports={authHandler:J9,handlePostRequest:X9,handleServerUncaughtException:W9,serverErrorHandler:Q9,reqBodyValidationHandler:z9}});var sv=T((Ede,rv)=>{"use strict";var j9=require("fastify-plugin"),{handlePostRequest:ev,authHandler:Z9,reqBodyValidationHandler:e7}=uf();async function t7(e){e.decorate("hdbCore",{preValidation:[e7,Z9],request:t=>tv(ev(t,response)),requestWithoutAuthentication:(t,r)=>tv(ev(t,r,!0))})}a(t7,"hdbCore");async function tv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(tv,"convertAsyncIterators");rv.exports=j9(t7)});var iv=T((mde,nv)=>{"use strict";var WT=require("fs"),na=X();na.initSync();var{CONFIG_PARAMS:Su}=b(),r7=1024*1024*1024;function s7(e){let t=na.get(Su.HTTP_TIMEOUT),r=na.get(Su.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:r7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=na.get(Su.TLS_PRIVATEKEY),i=na.get(Su.TLS_CERTIFICATE),o=na.get(Su.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:WT.readFileSync(`${n}`),cert:WT.readFileSync(i)+(o?`
|
|
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()}});HM={type:"application/json",serializeStream:Bd.streamAsJSON,serialize:JSON.stringify,deserialize:Y8,q:.8};Lt.set("*/*",HM);Lt.set("",HM);a(Y8,"tryJSONParse");a(hT,"registerContentHandlers");K8=require("fastify-plugin"),W8=K8(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Fd(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Fd,"findBestSerializer");UM=vM.default.get(BM.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(qd,"serialize");a(zn,"serializeMessage");a(Q8,"streamToBuffer");a(jo,"getDeserializer");a(MM,"deserializerUnknownType");a(z8,"transformIterable")});var Gd={};Qe(Gd,{start:()=>j8});async function X8(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hl(e);let n=new Bi;try{e.responseHeaders=n;let i=e.url.slice(1),o=pT.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await Ge(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=jo(r["content-type"],!0)(e.body)}catch(p){throw new lu.ClientError(p,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new lu.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new lu.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,mT.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){J8[0]=f;let p=String.fromCharCode(34,(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),mT.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=qd(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?xi.warn(i):xi.info(i):xi.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=qd(i.contentType?i:i.toString(),e,o),o}}function j8(e){mT=e,!qM&&(qM=!0,pT=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return X8(t,r)}),e.server.ws(async(t,r,s)=>{uu++;let n=new is;GM||(GM=!0,Ac(l=>{uu>0&&l.push({metric:"ws-connections",connections:uu,byThread:!0})}));let i;t.on("error",l=>{i=!0,xi.warn(l)});let o;t.on("message",a(function(d){o||(o=jo(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{uu--,kr(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=pT.getMatch(u);if(kr(!!_,"connection","ws","connect"),!_)t.send(zn(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,Nr(h=>({count:h.count,total:uu}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Ge(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=zn(E.value,r);t.send(h),Nr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var xi,lu,Dt,J8,mT,qM,pT,GM,uu,xM=Te(()=>{Yo();xn();xi=D(G()),lu=D(j());ml();Pa();di();VS();Dt=new Uint8Array(8),J8=new Float64Array(Dt.buffer,0,1),mT={};a(X8,"http");uu=0;a(j8,"start")});var ST=T((q_e,kM)=>{var{recordAction:xd,recordActionBinary:Z8}=(xn(),Z(A_)),e6=require("fastify-plugin"),t6=200;kM.exports=e6(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),xd(o,"duration",_,d,l),Z8(n.raw.statusCode<400,"success",_,d,l);let f=t6;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{xd(performance.now()-c,"transfer",_,d,l),xd(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,xd(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var AT=T((G_e,WM)=>{var Kd=require("clone"),Wd=qe(),r6=$(),$d=b(),s6=G(),kd=require("fs"),TT=require("joi"),{string:Yd}=TT.types(),{hdb_errors:n6,handleHDBError:_u}=j(),{HDB_ERROR_MSGS:i6,HTTP_STATUS_CODES:Vd}=n6,{common_validators:Zo}=Ds(),VM=1e9,$M=" is required",o6=["insert","update","upsert"],RT={database:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},schema:{presence:!1,format:Zo.schema_format,length:Zo.schema_length},table:{presence:!0,format:Zo.schema_format,length:Zo.schema_length},action:{inclusion:{within:o6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},a6={schema:Yd.required(),table:Yd.required(),action:Yd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:c6,AWS_SECRET:u6,AWS_BUCKET:l6,AWS_FILE_KEY:_6,REGION:d6}=$d.S3_BUCKET_AUTH_KEYS,f6={s3:{presence:!0},[`s3.${c6}`]:{presence:!0,type:"String"},[`s3.${u6}`]:{presence:!0,type:"String"},[`s3.${l6}`]:{presence:!0,type:"String"},[`s3.${_6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${d6}`]:{presence:!0,type:"String"}},YM=Kd(RT);YM.data.presence={message:$M};var KM=Kd(RT);KM.file_path.presence={message:$M};var E6=Object.assign(Kd(RT),f6),gT=Kd(a6);gT.csv_url=Yd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();gT.passthrough_headers=TT.object();function h6(e){let t=Wd.validateObject(e,YM);return Qd(e,t)}a(h6,"dataObject");function m6(e){let t=Wd.validateBySchema(e,TT.object(gT));return Qd(e,t)}a(m6,"urlObject");function p6(e){let t=Wd.validateObject(e,KM);return Qd(e,t)}a(p6,"fileObject");function S6(e){let t=Wd.validateObject(e,E6);return Qd(e,t)}a(S6,"s3FileObject");function Qd(e,t){if(!t){let r=r6.checkGlobalSchemaTable(e.schema,e.table);if(r)return _u(new Error,r,Vd.BAD_REQUEST);if(e.operation===$d.OPERATIONS_ENUM.CSV_FILE_LOAD){try{kd.accessSync(e.file_path,kd.constants.R_OK|kd.constants.F_OK)}catch(s){return s.code===$d.NODE_ERROR_CODES.ENOENT?_u(s,`No such file or directory ${s.path}`,Vd.BAD_REQUEST):s.code===$d.NODE_ERROR_CODES.EACCES?_u(s,`Permission denied ${s.path}`,Vd.BAD_REQUEST):_u(s)}try{let s=kd.statSync(e.file_path).size;if(s>VM)return _u(new Error,i6.MAX_FILE_SIZE_ERR(s,VM),Vd.BAD_REQUEST)}catch(s){s6.error(s),console.error(s)}}}return t}a(Qd,"postValidateChecks");WM.exports={dataObject:h6,urlObject:m6,fileObject:p6,s3FileObject:S6}});var OT=T((k_e,QM)=>{"use strict";var du=G(),zd=b();async function T6(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===zd.OPERATIONS_ENUM.INSERT||t.operation===zd.OPERATIONS_ENUM.UPDATE||t.operation===zd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===zd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(du.info(i.message),i):i.http_resp_msg?(du.error(`Error calling operation: ${e.name}`),du.error(i.http_resp_msg),i):(du.error(`Error calling operation: ${e.name}`),du.error(i),i)}}a(T6,"callOperationFunctionAsAwait");QM.exports={callOperationFunctionAsAwait:T6}});var JM=T(($_e,zM)=>{"use strict";var NT=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},bT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};zM.exports={BulkLoadFileObject:NT,BulkLoadDataObject:bT}});var jM=T((K_e,XM)=>{"use strict";var yT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};XM.exports=yT});var UT=T((j_e,hP)=>{"use strict";var Jd=Gr(),jd=AT(),R6=require("needle"),Rs=b(),Q_e=ke(),ea=$(),{handleHDBError:$e,hdb_errors:aP}=j(),{HTTP_STATUS_CODES:Ut,HDB_ERROR_MSGS:Et,CHECK_LOGS_WRAPPER:Vi}=aP,ta=G(),IT=require("papaparse");ea.promisifyPapaParse();var gs=require("fs-extra"),g6=require("path"),{chain:ZM}=require("stream-chain"),eP=require("stream-json/streamers/StreamArray"),tP=require("stream-json/utils/Batch"),rP=require("stream-chain/utils/comp"),{finished:sP}=require("stream"),A6=X(),cP=OT(),O6=_T(),{BulkLoadFileObject:CT,BulkLoadDataObject:N6}=JM(),LT=tT(),{verifyBulkLoadAttributePerms:uP}=Ud(),z_e=jM(),J_e=dt(),X_e=nn(),{databases:b6}=(fe(),Z(Ce)),{coerceType:y6}=(Zd(),Z(MT)),nP="No records parsed from csv file.",ki=`${A6.get("HDB_ROOT")}/tmp`,{schema_regex:I6}=Ds(),iP=1024*1024*2,oP=5e3,w6={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};hP.exports={csvDataLoad:C6,csvURLLoad:L6,csvFileLoad:D6,importFromS3:U6};async function C6(e,t){let r=jd.dataObject(e);if(r)throw $e(r,r.message,Ut.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=dP(e.schema,e.table),i=IT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:wT.bind(null,n),dynamicTyping:!1}),o=new LT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&uP(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw $e(new Error,c,Ut.BAD_REQUEST,void 0,void 0,!0);let u=new N6(e.action,e.schema,e.table,i.data);return s=await cP.callOperationFunctionAsAwait(fP,u,null),s.message===nP?nP:EP(s.records,s.number_written)}catch(n){throw $i(n)}}a(C6,"csvDataLoad");async function L6(e){let t=jd.urlObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ki}/${r}`;try{await M6(e,r)}catch(n){throw ta.error(Et.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Vi(Et.DOWNLOAD_FILE_ERR(r)))}try{let n=new CT(this.job_operation_function.name,e.action,e.schema,e.table,s,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await DT(n);return await Xd(s),i}catch(n){throw await Xd(s),$i(n)}}a(L6,"csvURLLoad");async function D6(e){let t=jd.fileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r=new CT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Rs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await DT(r)}catch(s){throw $i(s)}}a(D6,"csvFileLoad");async function U6(e){let t=jd.s3FileObject(e);if(t)throw $e(t,t.message,Ut.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=g6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ki}/${n}`;let i=new CT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await P6(n,e);let o=await DT(i);return await Xd(r),o}catch(s){throw await Xd(r),$i(s)}}a(U6,"importFromS3");async function M6(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await R6("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw $e(s,n,s.statusCode,Rs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}B6(r,e.csv_url),await v6(t,r.raw)}a(M6,"downloadCSVFile");async function P6(e,t){try{let r=`${ki}/${e}`;await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,"",{flag:"a+"});let s=await gs.createWriteStream(r),n=await O6.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){ta.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw ta.error(Et.S3_DOWNLOAD_ERR+" - "+r),$e(r,Vi(Et.S3_DOWNLOAD_ERR))}}a(P6,"downloadFileFromS3");async function v6(e,t){try{await gs.mkdirp(ki),await gs.writeFile(`${ki}/${e}`,t)}catch(r){throw ta.error(Et.WRITE_TEMP_FILE_ERR),$e(r,Vi(Et.DEFAULT_BULK_LOAD_ERR))}}a(v6,"writeFileToTempFolder");async function Xd(e){if(e)try{await gs.access(e),await gs.unlink(e)}catch{ta.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Xd,"deleteTempFile");function B6(e,t){if(e.statusCode!==aP.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ut.BAD_REQUEST);if(!w6[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,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(B6,"validateURLResponse");async function DT(e){try{let t;switch(e.file_type){case Rs.VALID_S3_FILE_TYPES.CSV:t=await H6(e);break;case Rs.VALID_S3_FILE_TYPES.JSON:t=await F6(e);break;default:throw $e(new Error,Et.DEFAULT_BULK_LOAD_ERR,Ut.BAD_REQUEST,Rs.LOG_LEVELS.ERROR,Et.INVALID_FILE_EXT_ERR(e))}return EP(t.records,t.number_written)}catch(t){throw $i(t)}}a(DT,"fileLoad");async function lP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Jd.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&uP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(lP,"validateChunk");async function _P(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;ea.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!ea.isEmpty(c)&&!ea.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await cP.callOperationFunctionAsAwait(fP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Vi(Et.INSERT_CSV_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_CSV_ERR+" - "+c);r(u)}}a(_P,"insertChunk");async function H6(e){let t={records:0,number_written:0},r=dP(e.schema,e.table);try{let s=new LT,n=gs.createReadStream(e.file_path,{highWaterMark:iP});n.setEncoding("utf8"),await IT.parsePromise(n,lP.bind(null,e,s),wT.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);return n=gs.createReadStream(e.file_path,{highWaterMark:iP}),n.setEncoding("utf8"),await IT.parsePromise(n,_P.bind(null,e,t),wT.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Vi(Et.PAPA_PARSE_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.PAPA_PARSE_ERR+s)}}a(H6,"callPapaParse");function dP(e,t){let r=b6[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>y6(i,n));return s}a(dP,"createTransformMap");function wT(e,t,r){let s=e.get(r);return s?s(t):ea.autoCast(t)}a(wT,"typeFunction");async function F6(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new LT,n=ZM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await lP(e,s,r,c)})]);await new Promise((c,u)=>{sP(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Ut.BAD_REQUEST);let o=ZM([gs.createReadStream(e.file_path,{encoding:"utf-8"}),eP.withParser(),c=>c.value,new tP({batchSize:oP}),rP(async c=>{await _P(e,t,r,c)})]);return await new Promise((c,u)=>{sP(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw $e(s,Vi(Et.INSERT_JSON_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.INSERT_JSON_ERR+s)}}a(F6,"insertJson");async function fP(e){let t={};try{e.data&&e.data.length>0&&q6(e.data[0])?t=await G6(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",ta.info(t.message))}catch(r){throw $i(r)}return t}a(fP,"callBulkFileLoad");function q6(e){let t=Object.keys(e);for(let r of t)if(!I6.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(q6,"validateColumnNames");async function G6(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Jd.insert;break;case"update":i=Jd.update;break;case"upsert":i=Jd.upsert;break;default:throw $e(new Error,Et.INVALID_ACTION_PARAM_ERR(s),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=ea.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw $i(o)}}a(G6,"bulkFileLoad");function EP(e,t){return`successfully loaded ${t} of ${e} records`}a(EP,"buildResponseMsg");function $i(e){return $e(e,Vi(Et.DEFAULT_BULK_LOAD_ERR),Ut.INTERNAL_SERVER_ERROR,Rs.LOG_LEVELS.ERROR,Et.DEFAULT_BULK_LOAD_ERR+" - "+e)}a($i,"buildTopLevelErrMsg")});var pP=T((ede,mP)=>{"use strict";var PT=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};mP.exports=PT});var RP=T((rde,TP)=>{"use strict";var x6=b(),SP=require("moment"),k6=require("uuid").v4,vT=class{static{a(this,"JobObject")}constructor(){this.id=k6(),this.type=void 0,this.start_datetime=SP().valueOf(),this.created_datetime=SP().valueOf(),this.end_datetime=void 0,this.status=x6.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};TP.exports=vT});var BT=T((nde,yP)=>{"use strict";var V6=require("uuid").v4,OP=Gr(),NP=qr(),$6=vs(),Y6=Oo(),K6=pP(),Ye=b(),W6=RP(),Q6=Up(),Jr=G(),z6=za(),ra=$(),{promisify:J6}=require("util"),Yi=require("moment"),X6=Pd(),ef=AT(),gP=Bh(),{deleteTransactionLogsBeforeValidator:j6}=JS(),{handleHDBError:Z6,hdb_errors:e9}=j(),{HTTP_STATUS_CODES:t9}=e9,AP=NP.searchByValue,r9=NP.searchByHash,s9=OP.insert,n9=J6(X6.evaluateSQL),i9=OP.update;yP.exports={addJob:c9,updateJob:l9,handleGetJob:o9,handleGetJobsByStartDate:a9,getJobById:bP};async function o9(e){try{let t=await bP(e.id);return ra.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Jr.error("There was an error getting job",t),new Error(r)}}a(o9,"handleGetJob");async function a9(e){try{let t=await u9(e);if(Jr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Yi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Yi(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Jr.error(r),new Error(r)}}a(a9,"handleGetJobsByStartDate");async function c9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ra.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Jr.info(l),t.error=l,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return Jr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ef.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=ef.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ef.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ef.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=gP(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=gP(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=j6(e);break;default:break}if(s)throw Z6(s,s.message,t9.BAD_REQUEST,void 0,void 0,!0);let n=new W6;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new $6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await AP(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=V6();try{o=await AP(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Jr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Jr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new z6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await s9(u)}catch(l){return Jr.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Jr.trace(l)}return t}a(c9,"addJob");async function u9(e){let t=Yi(e.from_date,Yi.ISO_8601),r=Yi(e.to_date,Yi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new K6(s,e.hdb_user);try{return await n9(n)}catch(i){throw Jr.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(u9,"getJobsInDateRange");async function bP(e){if(ra.isEmptyOrZeroLength(e))return ra.errorizeMessage("Invalid job ID specified.");let t=new Y6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await r9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Jr.error(s),ra.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(bP,"getJobById");async function l9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ra.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Yi().valueOf());let t=new Q6(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await i9(t),r}a(l9,"updateJob")});var UP=T((ode,DP)=>{"use strict";var IP=$(),ar=b(),_9=require("moment"),tf=UT(),rf=G(),wP=BT(),CP=vd(),LP=Ai(),d9=Ze(),f9=wd(),HT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function E9(e){if(!e||Object.keys(e).length===0)throw new Error("Empty runner passed to parseMessage");if(!e.json||Object.keys(e.json).length===0)throw new Error("Empty JSON passed to parseMessage");if(!e.job||Object.keys(e.job).length===0)throw new Error("Empty job passed to parseMessage");if(IP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(IP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case ar.JOB_TYPE_ENUM.csv_file_load:await hn(e,tf.csvFileLoad);break;case ar.JOB_TYPE_ENUM.csv_url_load:await hn(e,tf.csvURLLoad);break;case ar.JOB_TYPE_ENUM.csv_data_load:await hn(e,tf.csvDataLoad);break;case ar.JOB_TYPE_ENUM.import_from_s3:await hn(e,tf.importFromS3);break;case ar.JOB_TYPE_ENUM.empty_trash:break;case ar.JOB_TYPE_ENUM.export_local:await hn(e,CP.export_local);break;case ar.JOB_TYPE_ENUM.export_to_s3:await hn(e,CP.export_to_s3);break;case ar.JOB_TYPE_ENUM.delete_files_before:case ar.JOB_TYPE_ENUM.delete_records_before:await hn(e,LP.deleteFilesBefore);break;case ar.JOB_TYPE_ENUM.delete_audit_logs_before:await hn(e,LP.deleteAuditLogsBefore);break;case ar.JOB_TYPE_ENUM.delete_transaction_logs_before:await hn(e,f9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(E9,"parseMessage");async function hn(e,t){try{e.job.status=ar.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=_9().valueOf(),await wP.updateJob(e.job),await h9(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):rf.error(`There was an error running ${t.name} job with id ${e.job.id}`),rf.error(s),e.job.message=s,e.job.status=ar.JOB_STATUS_ENUM.ERROR;try{await wP.updateJob(e.job)}catch(n){throw rf.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(hn,"runJob");async function h9(e){rf.trace("launching job thread:",e),d9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[ar.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(h9,"launchJobThread");DP.exports={parseMessage:E9,RunnerMessage:HT}});var PP=T((cde,MP)=>{"use strict";var FT=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};MP.exports=FT});var JP=T((lde,$T)=>{"use strict";var af=qr(),xT=Pd(),sf=UT(),mn=L_(),nf=pi(),Eu=Ai(),m9=pp(),fu=xr(),of=yp(),Mt=zS(),ht=G(),p9=Cp(),S9=Q_(),T9=lS(),R9=j_(),g9=_S(),A9=dS(),O9=hS(),N9=pS(),qT=RS(),vP=vd(),b9=Ud(),kT=BT(),P=b(),{hdb_errors:mu,handleHDBError:hu}=j(),{HTTP_STATUS_CODES:BP}=mu,GT=bS(),HP=dd(),KP=require("util"),sa=Gr(),y9=Pn(),I9=Fo(),FP=UP(),qP=Uc(),GP=(pd(),Z(zc)),xP=hr(),kP=wd(),VP=Ad(),{setServerUtilities:w9}=(Zd(),Z(MT)),{CONTEXT:C9}=(as(),Z(CE)),{_assignPackageExport:L9}=require("../../index"),{transformReq:D9}=$(),{server:U9}=(Mr(),Z(eo)),M9=OT(),$P=af.searchByHash,P9=af.searchByValue,v9=KP.promisify(af.search),B9=KP.promisify(xT.evaluateSQL),H9={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},H=PP();async function WP(e,t){try{if(e.body.operation!=="read_log"&&(ht.log_level===P.LOG_LEVELS.INFO||ht.log_level===P.LOG_LEVELS.DEBUG||ht.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ht.info(o)}}catch(s){ht.error(s)}let r=await M9.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return H9[e.body.operation]&&y9.setSchemaDataToGlobal(s=>{s&&ht.error(s)}),r}a(WP,"processLocalTransaction");var YP=q9();$T.exports={chooseOperation:QP,getOperationFunction:zP,operation:VT,processLocalTransaction:WP};w9($T.exports);U9.operation=VT;function QP(e){let t;try{t=zP(e)}catch(n){throw ht.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=xT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xT.checkASTPermissions(e,i);if(o)throw ht.error(`${BP.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=b9.verifyPerms(i,n);if(o)throw ht.error(`${BP.FORBIDDEN} from operation ${e.operation}`),ht.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),hu(new Error,o,mu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw hu(n,"There was an error when trying to choose an operation path")}return r}a(QP,"chooseOperation");function zP(e){if(ht.trace(`getOperationFunction with operation: ${e.operation}`),YP.has(e.operation))return YP.get(e.operation);throw hu(new Error,mu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),mu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(zP,"getOperationFunction");L9("operation",VT);function VT(e,t){e.hdb_user=this[C9]?.user,e.bypass_auth=!t;let r=QP(e);return WP({body:e},r)}a(VT,"operation");async function F9(e){ht.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await sa.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await sa.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await sa.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await Eu.deleteRecord(i);break;default:ht.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ht.info("Invalid operation in transaction"),ht.error(o)}}a(F9,"catchup");async function $s(e){D9(e);let t,r;try{r=await kT.addJob(e),t=r.createdJob,ht.info("addJob result",r);let s=new FP.RunnerMessage(t,e);return await FP.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ht.error(n),hu(s,n)}}a($s,"executeJob");function q9(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new H(sa.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new H(sa.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new H(sa.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new H(af.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new H($P)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new H(P9)),e.set(P.OPERATIONS_ENUM.SEARCH,new H(v9)),e.set(P.OPERATIONS_ENUM.SQL,new H(B9)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new H($s,sf.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new H($s,sf.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new H($s,sf.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new H($s,sf.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new H(mn.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new H(mn.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new H(mn.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new H(mn.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new H(mn.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new H(mn.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new H(nf.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new H(nf.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new H(nf.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new H(Eu.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new H(fu.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new H(fu.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new H(fu.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new H(fu.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new H(of.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new H(of.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new H(of.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new H(of.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new H(fu.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new H(p9)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new H(S9)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new H(T9)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new H(R9)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new H(g9)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new H(A9)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new H(xP.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new H(O9.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new H(N9)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new H(qT.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new H(qT.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new H(qT.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new H($s,vP.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new H($s,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new H($s,Eu.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new H($s,vP.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new H(kT.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new H(kT.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new H(GT.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new H(GT.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new H(GT.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new H(HP.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new H(HP.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new H(F9)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new H(I9.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new H($s,Eu.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new H(m9)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new H(qP.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new H(qP.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new H(GP.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new H(GP.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new H(xP.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new H(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(kP.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new H($s,kP.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new H(VP.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new H(VP.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new H(mn.getBackup)),e}a(q9,"initializeOperationFunctionMap")});var uf=T((dde,ZP)=>{"use strict";var YT=b(),G9=$(),pu=G(),{handleHDBError:KT,hdb_errors:cf}=j(),{isMainThread:x9}=require("worker_threads"),{Readable:k9}=require("stream"),XP=require("os"),V9=require("util"),$9=Gp(),Y9=V9.promisify($9.authorize),jP=JP(),{createGzip:K9,constants:W9}=require("zlib");function Q9(e){let t=`Found an uncaught exception with message: ${e.message}. ${XP.EOL}Stack: ${e.stack} ${XP.EOL}Terminating ${x9?"HDB":"thread"}.`;console.error(t),pu.fatal(t),process.exit(1)}a(Q9,"handleServerUncaughtException");function z9(e,t,r){if(pu[e.logLevel||"error"](e),e.statusCode)return typeof e.http_resp_msg!="object"?r.code(e.statusCode).send({error:e.http_resp_msg||e.message}):r.code(e.statusCode).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:cf.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(z9,"serverErrorHandler");function J9(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=KT(new Error,"Invalid JSON.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(G9.isEmpty(e.body.operation)){let s=KT(new Error,"Request body must include an 'operation' property.",cf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(J9,"reqBodyValidationHandler");function X9(e,t,r){let s;e.body.operation!==YT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==YT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==YT.OPERATIONS_ENUM.LOGOUT?Y9(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{pu.warn(n),pu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(KT(n,i,cf.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(X9,"authHandler");async function j9(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=jP.chooseOperation(e.body);let n=await jP.processLocalTransaction(e,s);if(n instanceof k9&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(K9({level:W9.Z_BEST_SPEED})))}return n}catch(n){throw pu.error(n),n}}a(j9,"handlePostRequest");ZP.exports={authHandler:X9,handlePostRequest:j9,handleServerUncaughtException:Q9,serverErrorHandler:z9,reqBodyValidationHandler:J9}});var sv=T((Ede,rv)=>{"use strict";var Z9=require("fastify-plugin"),{handlePostRequest:ev,authHandler:e7,reqBodyValidationHandler:t7}=uf();async function r7(e){e.decorate("hdbCore",{preValidation:[t7,e7],request:t=>tv(ev(t,response)),requestWithoutAuthentication:(t,r)=>tv(ev(t,r,!0))})}a(r7,"hdbCore");async function tv(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(tv,"convertAsyncIterators");rv.exports=Z9(r7)});var iv=T((mde,nv)=>{"use strict";var WT=require("fs"),na=X();na.initSync();var{CONFIG_PARAMS:Su}=b(),s7=1024*1024*1024;function n7(e){let t=na.get(Su.HTTP_TIMEOUT),r=na.get(Su.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:s7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=na.get(Su.TLS_PRIVATEKEY),i=na.get(Su.TLS_CERTIFICATE),o=na.get(Su.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:WT.readFileSync(`${n}`),cert:WT.readFileSync(i)+(o?`
|
|
25
25
|
|
|
26
|
-
`+WT.readFileSync(o):"")},s.http2=!0}return s}a(s7,"getServerOptions");nv.exports=s7});var cv=T((Sde,av)=>{"use strict";var QT=X();QT.initSync();var{CONFIG_PARAMS:ov}=b();function n7(){let e=QT.get(ov.HTTP_CORSACCESSLIST),t=QT.get(ov.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(n7,"getCORSOptions");av.exports=n7});var _v=T((Rde,lv)=>{"use strict";var uv=X();uv.initSync();var i7=b();function o7(){return uv.get(i7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(o7,"getHeaderTimeoutConfig");lv.exports=o7});var XT={};Qe(XT,{customFunctionsServer:()=>u7,handleFile:()=>c7,ready:()=>d7});async function c7(e,t,r,s){if(!pn){let c=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);pn=Nv(c),ut.http((await pn).server)}let n=await pn,i=(0,fv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!dv.has(i)){dv.add(i);try{n.register(_7(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function u7(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await l7();let e=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=pn=await Nv(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function l7(){try{De.info("Custom Functions starting configuration."),await Tv.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,Ev.existsSync)(e)&&r.register(Sv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Nv(e){De.info("Custom Functions starting buildServer.");let t=(0,Rv.default)(e),r=(0,hv.default)(t);r.server.headersTimeout=(0,Av.default)(),r.setErrorHandler(Ov.serverErrorHandler);let s=(0,gv.default)();return s&&r.register(mv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(pv.default),await r.register(a7),await r.after(),hT(r),De.info("Custom Functions completed buildServer."),r}function d7(){if(pn)return pn.then?pn.then(e=>e.ready()):pn.ready()}var fv,Ev,hv,mv,pv,Sv,zT,JT,De,a7,Tv,Rv,gv,Av,Ov,pn,dv,bv=Te(()=>{fv=require("path"),Ev=require("fs"),hv=D(require("fastify")),mv=D(require("@fastify/cors")),pv=D(ST()),Sv=D(require("@fastify/autoload")),zT=D(X()),JT=D(b()),De=D(G()),a7=D(sv()),Tv=D(Gr()),Rv=D(iv()),gv=D(cv()),Av=D(_v()),Ov=D(uf());Yo();Ur();dv=new Set;a(c7,"handleFile");a(u7,"customFunctionsServer");a(l7,"setUp");a(_7,"buildRouteFolder");a(Nv,"buildServer");a(d7,"ready")});var jT={};Qe(jT,{start:()=>f7});function f7(e){return{handleFile(t,r,s){Iv||(Iv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=yv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,wv.default)(n,(0,Cv.realpathSync)(o))}}return i(n)},{runFirst:!0})),yv.set(r,s)}}}var wv,Cv,yv,Iv,Lv=Te(()=>{wv=D(require("send")),Cv=require("fs"),yv=new Map;a(f7,"start")});function m7(e,t=1,r){if(ZT++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:df.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===df.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});h7.push(n),await n,ia.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=_f.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ia.indexOf(s);o>-1&&ia.splice(o,1)}if(a(i,"removeWorker"),oa){let o=oa;oa=[];for(let c of o)Pv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{eR?eR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),ZT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function vv(e=0,t){if(typeof e=="string")try{(0,ff.existsSync)(e)&&(0,ff.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=p7:r=S7(t):r=tR;let s=(0,aa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Pv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eR=!0,r(o,(c,u)=>{if(!c){if(Dv){let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});Dv.deliverSocket(l,e,u),l.resume()}else ZT>0?(oa.length===0&&setTimeout(()=>{oa.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,oa.push(o)):(console.log("start up a dynamic thread to handle request"),m7(0));Or(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});A7(l,c,e)}Or(!0,"socket-routed")})};let n=Tc();Mv.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function tR(e,t){let r,s=0;for(let n of ia){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=lf)return lf=i,t(r);s=i}lf=0,t(r)}function p7(e,t){let r={};e.getpeername(r);let s=r.address,n=ca.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);tR(e,o=>{ca.set(s,{worker:o,lastUsed:i}),t(o)})}function S7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new aa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ca.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);tR(s,d=>{ca.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function R7(){lf=0;for(let e of ia)e.expectedIdle=e.recentELU.idle+T7,e.requests=1;ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function A7(e,t,r){let s=g7++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),_f.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),_f.delete(s)),n.event=="destroy"&&(e.destroy(),_f.delete(s))})}var Ki,aa,df,Mv,ff,E7,ia,oa,Pv,Dv,ZT,h7,eR,lf,Uv,ca,T7,_f,g7,Bv=Te(()=>{Ki=D(Ze()),aa=require("net"),df=D(b()),Mv=D(G()),ff=require("fs");xn();({isMainThread:E7}=require("worker_threads")),ia=[],oa=[],Pv=[],ZT=0,h7=[];E7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(m7,"startHTTPWorker");a(vv,"startSocketServer");lf=0;a(tR,"findMostIdleWorker");Uv=36e5,ca=new Map;a(p7,"findByRemoteAddressAffinity");a(S7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ca)r.lastUsed+Uv<e&&ca.delete(t)},Uv).unref();T7=1e3;a(R7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(R7);_f=new Map,g7=1;a(A7,"proxySocket")});var Gv=T((Ude,qv)=>{"use strict";var O7=require("cluster"),gs=X();gs.initSync();var Fv=b(),Cde=require("util"),Sn=G(),rR=require("fs"),N7=require("fastify"),Lde=Tc(),b7=require("@fastify/cors"),y7=require("@fastify/compress"),I7=require("@fastify/static"),w7=ST(),C7=require("path"),{PACKAGE_ROOT:L7}=b(),D7=Pn(),U7=$(),M7=Gr(),P7=tc(),{server:v7}=(Ur(),Z(eo)),{authHandler:B7,handlePostRequest:H7,serverErrorHandler:F7,reqBodyValidationHandler:q7}=uf(),Dde=require("net"),{registerContentHandlers:G7}=(Yo(),Z(FM)),x7=6e4,k7=1024*1024*1024,V7="TRUE",{CONFIG_PARAMS:Tn}=Fv,Wi;qv.exports={hdbServer:Hv,start:Hv};async function Hv(e){try{Sn.info("In Fastify server"+process.cwd()),Sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=O7.isMaster,await $7();let t=gs.get(Tn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=Y7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{v7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),Sn.error(r),Sn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Sn.fatal(t),process.exit(1)}}a(Hv,"operationsServer");async function $7(){Sn.trace("Configuring HarperDB process."),D7.setSchemaDataToGlobal(),await M7.setUsersToGlobal(),await P7.getLicense()}a($7,"setUp");function Y7(e){Sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=K7(e),r=N7(t);r.server.headersTimeout=Q7(),r.setErrorHandler(F7);let s=W7();s&&r.register(b7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(w7),r.register(y7),r.register(I7,{root:C7.join(L7,"studio")}),G7(r);let n=gs.get(Fv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!U7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[q7,B7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),H7(i,o)}),r.get("/health",()=>"HarperDB is running."),Sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Y7,"buildServer");function K7(e){let t=gs.get(Tn.OPERATIONSAPI_NETWORK_TIMEOUT),r=gs.get(Tn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:k7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=gs.get(Tn.OPERATIONSAPI_TLS_PRIVATEKEY),i=gs.get(Tn.OPERATIONSAPI_TLS_CERTIFICATE),o=gs.get(Tn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:rR.readFileSync(n),cert:rR.readFileSync(i)+(o?`
|
|
26
|
+
`+WT.readFileSync(o):"")},s.http2=!0}return s}a(n7,"getServerOptions");nv.exports=n7});var cv=T((Sde,av)=>{"use strict";var QT=X();QT.initSync();var{CONFIG_PARAMS:ov}=b();function i7(){let e=QT.get(ov.HTTP_CORSACCESSLIST),t=QT.get(ov.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(i7,"getCORSOptions");av.exports=i7});var _v=T((Rde,lv)=>{"use strict";var uv=X();uv.initSync();var o7=b();function a7(){return uv.get(o7.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(a7,"getHeaderTimeoutConfig");lv.exports=a7});var XT={};Qe(XT,{customFunctionsServer:()=>l7,handleFile:()=>u7,ready:()=>f7});async function u7(e,t,r,s){if(!pn){let c=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);pn=Nv(c),ut.http((await pn).server)}let n=await pn,i=(0,fv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!dv.has(i)){dv.add(i);try{n.register(d7(i,o))}catch(c){if(c.message==="Root plugin has already booted")De.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function l7(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await _7();let e=zT.get(JT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=pn=await Nv(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function _7(){try{De.info("Custom Functions starting configuration."),await Tv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function d7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Ev.existsSync)(e)&&r.register(Sv.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Nv(e){De.info("Custom Functions starting buildServer.");let t=(0,Rv.default)(e),r=(0,hv.default)(t);r.server.headersTimeout=(0,Av.default)(),r.setErrorHandler(Ov.serverErrorHandler);let s=(0,gv.default)();return s&&r.register(mv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(pv.default),await r.register(c7),await r.after(),hT(r),De.info("Custom Functions completed buildServer."),r}function f7(){if(pn)return pn.then?pn.then(e=>e.ready()):pn.ready()}var fv,Ev,hv,mv,pv,Sv,zT,JT,De,c7,Tv,Rv,gv,Av,Ov,pn,dv,bv=Te(()=>{fv=require("path"),Ev=require("fs"),hv=D(require("fastify")),mv=D(require("@fastify/cors")),pv=D(ST()),Sv=D(require("@fastify/autoload")),zT=D(X()),JT=D(b()),De=D(G()),c7=D(sv()),Tv=D(xr()),Rv=D(iv()),gv=D(cv()),Av=D(_v()),Ov=D(uf());Yo();Mr();dv=new Set;a(u7,"handleFile");a(l7,"customFunctionsServer");a(_7,"setUp");a(d7,"buildRouteFolder");a(Nv,"buildServer");a(f7,"ready")});var jT={};Qe(jT,{start:()=>E7});function E7(e){return{handleFile(t,r,s){Iv||(Iv=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=yv.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,wv.default)(n,(0,Cv.realpathSync)(o))}}return i(n)},{runFirst:!0})),yv.set(r,s)}}}var wv,Cv,yv,Iv,Lv=Te(()=>{wv=D(require("send")),Cv=require("fs"),yv=new Map;a(E7,"start")});function p7(e,t=1,r){if(ZT++,(0,Ki.startWorker)("server/threads/threadServer.js",{name:df.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===df.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});m7.push(n),await n,ia.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=_f.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=ia.indexOf(s);o>-1&&ia.splice(o,1)}if(a(i,"removeWorker"),oa){let o=oa;oa=[];for(let c of o)Pv[c.localPort](null,c)}}}),r){let s=setInterval(()=>{eR?eR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ki.shutdownWorkers)(),ZT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function vv(e=0,t){if(typeof e=="string")try{(0,ff.existsSync)(e)&&(0,ff.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=S7:r=T7(t):r=tR;let s=(0,aa.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=Pv[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),eR=!0,r(o,(c,u)=>{if(!c){if(Dv){let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});Dv.deliverSocket(l,e,u),l.resume()}else ZT>0?(oa.length===0&&setTimeout(()=>{oa.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),o.localPort=e,oa.push(o)):(console.log("start up a dynamic thread to handle request"),p7(0));Nr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new aa.Socket({handle:o,writable:!0,readable:!0});O7(l,c,e)}Nr(!0,"socket-routed")})};let n=Tc();Mv.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function tR(e,t){let r,s=0;for(let n of ia){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=lf)return lf=i,t(r);s=i}lf=0,t(r)}function S7(e,t){let r={};e.getpeername(r);let s=r.address,n=ca.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);tR(e,o=>{ca.set(s,{worker:o,lastUsed:i}),t(o)})}function T7(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new aa.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=ca.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);tR(s,d=>{ca.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function g7(){lf=0;for(let e of ia)e.expectedIdle=e.recentELU.idle+R7,e.requests=1;ia.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function O7(e,t,r){let s=A7++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),_f.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),_f.delete(s)),n.event=="destroy"&&(e.destroy(),_f.delete(s))})}var Ki,aa,df,Mv,ff,h7,ia,oa,Pv,Dv,ZT,m7,eR,lf,Uv,ca,R7,_f,A7,Bv=Te(()=>{Ki=D(Ze()),aa=require("net"),df=D(b()),Mv=D(G()),ff=require("fs");xn();({isMainThread:h7}=require("worker_threads")),ia=[],oa=[],Pv=[],ZT=0,m7=[];h7&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(p7,"startHTTPWorker");a(vv,"startSocketServer");lf=0;a(tR,"findMostIdleWorker");Uv=36e5,ca=new Map;a(S7,"findByRemoteAddressAffinity");a(T7,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of ca)r.lastUsed+Uv<e&&ca.delete(t)},Uv).unref();R7=1e3;a(g7,"updateWorkerIdleness");(0,Ki.setMonitorListener)(g7);_f=new Map,A7=1;a(O7,"proxySocket")});var Gv=T((Ude,qv)=>{"use strict";var N7=require("cluster"),As=X();As.initSync();var Fv=b(),Cde=require("util"),Sn=G(),rR=require("fs"),b7=require("fastify"),Lde=Tc(),y7=require("@fastify/cors"),I7=require("@fastify/compress"),w7=require("@fastify/static"),C7=ST(),L7=require("path"),{PACKAGE_ROOT:D7}=b(),U7=Pn(),M7=$(),P7=xr(),v7=tc(),{server:B7}=(Mr(),Z(eo)),{authHandler:H7,handlePostRequest:F7,serverErrorHandler:q7,reqBodyValidationHandler:G7}=uf(),Dde=require("net"),{registerContentHandlers:x7}=(Yo(),Z(FM)),k7=6e4,V7=1024*1024*1024,$7="TRUE",{CONFIG_PARAMS:Tn}=Fv,Wi;qv.exports={hdbServer:Hv,start:Hv};async function Hv(e){try{Sn.info("In Fastify server"+process.cwd()),Sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=N7.isMaster,await Y7();let t=As.get(Tn.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;Wi=K7(t),await Wi.ready(),e||(e={}),e.isOperationsServer=!0,Wi.server.cantCleanupProperly=!0;try{B7.http(Wi.server,e),Wi.server.closeIdleConnections||await Wi.listen({port:0,host:"::"})}catch(r){throw Wi.close(),Sn.error(r),Sn.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Sn.fatal(t),process.exit(1)}}a(Hv,"operationsServer");async function Y7(){Sn.trace("Configuring HarperDB process."),U7.setSchemaDataToGlobal(),await P7.setUsersToGlobal(),await v7.getLicense()}a(Y7,"setUp");function K7(e){Sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=W7(e),r=b7(t);r.server.headersTimeout=z7(),r.setErrorHandler(q7);let s=Q7();s&&r.register(y7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(C7),r.register(I7),r.register(w7,{root:L7.join(D7,"studio")}),x7(r);let n=As.get(Fv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!M7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[G7,H7],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),F7(i,o)}),r.get("/health",()=>"HarperDB is running."),Sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(K7,"buildServer");function W7(e){let t=As.get(Tn.OPERATIONSAPI_NETWORK_TIMEOUT),r=As.get(Tn.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:V7,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=As.get(Tn.OPERATIONSAPI_TLS_PRIVATEKEY),i=As.get(Tn.OPERATIONSAPI_TLS_CERTIFICATE),o=As.get(Tn.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:rR.readFileSync(n),cert:rR.readFileSync(i)+(o?`
|
|
27
27
|
|
|
28
|
-
`+rR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(K7,"getServerOptions");function W7(){let e=gs.get(Tn.OPERATIONSAPI_NETWORK_CORS),t=gs.get(Tn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===V7)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(W7,"getCORSOpts");function Q7(){return gs.get(Tn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??x7}a(Q7,"getHeaderTimeoutConfig")});var jv=T((Hde,Xv)=>{"use strict";var{decode:z7}=require("msgpackr"),{isMainThread:Pde,parentPort:J7,threadId:vde}=require("worker_threads"),Vv=_t(),Rn=ke(),X7=b(),Tu=G(),xv=X(),$v=b();Ze();var j7=nn(),{recordAction:Z7,recordActionBinary:eee}=(xn(),Z(A_)),{publishToStream:tee}=Vv,Bde={durable:Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Rn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ree,see,nee,Yv,Kv;Xv.exports={initialize:Wv,workQueueListener:Jv,setSubscription:iee,setIgnoreOrigin:aee,getDatabaseSubscriptions:oee};async function Wv(){Kv=!0,Tu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Vv.getNATSReferences();ree=e,see=e.info.server_name,nee=t,Yv=r}a(Wv,"initialize");var hf=new Map;function iee(e,t,r){let s=hf.get(e);s||hf.set(e,s=new Map),s.set(t,r),Kv||Wv().then(Jv)}a(iee,"setSubscription");function oee(){return hf}a(oee,"getDatabaseSubscriptions");var Qv;function aee(e){Qv=e}a(aee,"setIgnoreOrigin");var zv=100,kv=new Array(zv),Ef=0;async function Jv(){let t=await(await Yv.consumers.get(Rn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();J7?.on("message",async r=>{let{type:s}=r;s===$v.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await kv[Ef],kv[Ef]=cee(r).catch(s=>{Tu.error(s)}),++Ef>=zv&&(Ef=0)}a(Jv,"workQueueListener");async function cee(e){let t=z7(e.data);Z7(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=xv.get(X7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Rn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!Qv),eee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Rn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Tu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Tu.trace(`messageProcessor nats msg id: ${e.headers.get(Rn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=hf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:sR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:sR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:sR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}xv.get($v.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&tee(e.subject.split(".").slice(0,-1).join("."),j7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Tu.error(o)}e.ack()}a(cee,"messageProcessor");function sR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sR,"convertOperation")});var uR={};Qe(uR,{disableNATS:()=>lee,publishToStream:()=>Rf,setNATSReplicator:()=>nR,setPublishToStream:()=>_ee,setSubscription:()=>cR,start:()=>uee});function uee(){pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&fee()}function lee(e=!0){s0=e}function _ee(e,t){Rf=e,cR=t}function fee(){if(s0||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];nR(n,r,i)}}lR((r,s)=>{nR(r.tableName,r.databaseName,r),s&&i0(r)}),!Zv&&(Zv=!0)}function nR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){i0(i)}static subscribe(){let i=new ns;return cR(t,e,i),i}static subscribeOnThisThread(i){return i<dee}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new mf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=n0;return i}a(s,"getNATSTransaction")}function i0(e){let t=pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Rf(`${oR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var e0,oR,aR,t0,r0,pf,Sf,Tf,s0,Rf,cR,dee,n0,Zv,mf,iR,o0=Te(()=>{fe();os();e0=D(_t()),oR=D(ke()),aR=D(nn());Pa();t0=D(jv()),r0=D(hr()),pf=D(X()),Sf=D(b()),Tf=D(G());a(uee,"start");a(lee,"disableNATS");Rf=e0.publishToStream,cR=t0.setSubscription;a(_ee,"setPublishToStream");dee=2;a(fee,"assignReplicationSource");a(nR,"setNATSReplicator");a(i0,"publishSchema");mf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Tf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Rf(`${oR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,aR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Tf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},iR=class extends mf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,r0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};n0=new iR});async function c0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await _R.getResource(e,{});n=new fR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await _R.get(e);i&&i.delete()}n=new Af(e,t)}return n}function dR(){return gf++,gf>65500&&(gf=1),gf}var a0,ua,_R,gf,Af,fR,u0=Te(()=>{fe();Qc();a0=D(hr()),ua=D(G());di();_R=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(c0,"getSession");gf=1;a(dR,"getNextMessageId");Af=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ua.trace)("Resuming subscription from",n,"from",o);let h=Qn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=dR());let Q=N.id;Array.isArray(Q)&&(Q=$o(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,ua.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=dR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Qn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},fR=class extends Af{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=dR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ua.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,a0.getNextMonotonicTime)()),(0,ua.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),_R.put(this.sessionRecord)),t.qos}}});var hR={};Qe(hR,{start:()=>hee});async function hee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=d0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Jr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Eee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,f0.getSuperUser)());let{onMessage:u,onClose:_}=d0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Jr.info)("Socket error",l)})},{port:t,securePort:s})}function d0(e,t,r,s,n){_0||(_0=!0,Ac(d=>{Of>0&&d.push({metric:"mqtt-connections",connections:Of,byThread:!0})}));let i;Of++;let o,c={protocolVersion:4},u=(0,Nf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Of--,i||(i=!0,o?.disconnect(),xr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&l0.notify({username:s.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&l0.error({username:s.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return 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,q)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:q.qos},K)}catch(w){(0,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=jo(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,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,Nf.generate)(h,c);t(S),Or(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Nf,f0,ER,gn,Jr,l0,Eee,_0,Of,E0=Te(()=>{Nf=require("mqtt-packet");u0();f0=D(Gr());Yo();xn();Ur();ER=D(X()),gn=D(b()),Jr=D(G()),l0=(0,Jr.loggerWithTag)("auth-event"),Eee=!0;a(hee,"start");Of=0;a(d0,"onSocket")});var m0,h0,mR,p0=Te(()=>{m0=require("os"),h0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,m0.platform)()!="win32"&&(mR=require("node-unix-socket").createReuseportFd)});var bd={};Qe(bd,{component_errors:()=>la,loadComponent:()=>bf,loadComponentDirectories:()=>y0,setErrorReporter:()=>Tee});function y0(e,t){t&&(SR=t),e&&(TR=e);let r=[];if((0,As.existsSync)(pR)){let n=(0,As.readdirSync)(pR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Rt.join)(pR,o);r.push(bf(c,SR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(bf(s,SR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{b0=!0})}function Tee(e){Au=e}async function bf(e,t,r,s,n,i){if(!T0.has(e)){T0.set(e,!0),n&&(TR=n);try{let o;s&&(la=new Map);let c=(0,Rt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(c)?o=s?(0,N0.getConfigObj)():(0,R0.parseDocument)((0,As.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=RR;let u=[],_=s;for(let l in o){let d=o[l];if(la.set(s?l:(0,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,O0.getHdbBasePath)().length){N=null;break}if(N)f=await bf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=See[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Ru.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!S0.includes(I)){let N=gR.get(AR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&gu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!mR)&&(S0.push(I),vv(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),TR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,A0.handleHDBError)("Can not reference parent directories");let I=(0,Rt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==RR[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,g0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:q}=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(q.isFile()){let x=await pee(Q);Ru.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Ru.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${q.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Au?.(x),((0,_a.getWorkerIndex)()===0?console:gu.default).error(x),t.set(d.path||"/",new Ou(x)),la.set(s?l:(0,Rt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Rt.basename)(e)}' due to: ${h.message}`,Au?.(h),((0,_a.getWorkerIndex)()===0?console:gu.default).error(h),t.set(d.path||"/",new Ou(h),null,!0),la.set(s?l:(0,Rt.basename)(e),h.message)}}if(Ru.isMainThread&&!b0&&i&&(0,_a.watchDir)(e,async()=>y0()),o.extensionModule)return await Tl((0,Rt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Au?.(new Error(l)),((0,_a.getWorkerIndex)()===0?console:gu.default).error(l),la.set((0,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}`,Au?.(o),t.set("",new Ou(o))}}}var As,Rt,Ru,R0,gR,AR,g0,_a,gu,A0,O0,mee,N0,pee,pR,TR,b0,SR,la,See,RR,S0,T0,Au,Ou,yd=Te(()=>{As=require("fs"),Rt=require("path"),Ru=require("worker_threads"),R0=require("yaml"),gR=D(X()),AR=D(b());qA();VA();$A();xM();bv();Lv();g0=D(require("fast-glob")),_a=D(Ze()),gu=D(G());UE();Ur();A0=D(j());os();fe();Bv();O0=D(X()),mee=D(Gv());pd();o0();E0();N0=D(Er());p0();({readFile:pee}=As.promises),pR=gR.get(AR.CONFIG_PARAMS.COMPONENTSROOT),TR=new Map,la=new Map;a(y0,"loadComponentDirectories");See={REST:Gd,rest:Gd,graphqlSchema:DE,jsResource:PE,fastifyRoutes:XT,login:BE,static:jT,operationsApi:mee,customFunctions:{},http:{},clustering:uR,authentication:zc,mqtt:hR},RR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(RR,"static",{value:{files:"web/**"}});S0=[],T0=new Map;a(Tee,"setErrorReporter");a(bf,"loadComponent");Ou=class extends Nt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var C0=T((Efe,w0)=>{var{isMainThread:I0}=require("worker_threads"),{getTables:Ree}=(fe(),Z(Ce)),{loadComponentDirectories:gee,loadComponent:Aee}=(yd(),Z(bd)),{resetResources:Oee}=(Qc(),Z(aU)),Nee=KS(),bee=Er(),{dirname:yee}=require("path"),{getConnection:Iee}=_t(),wee=X(),Cee=b(),OR=new Map;async function Lee(e=!1){!I0&&wee.get(Cee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Iee();try{I0&&await Nee()}catch(s){console.error(s)}let t=Oee();Ree(),t.isWorker=e,await Aee(yee(bee.getConfigFilePath()),t,"hdb",!0,OR),await gee(OR,t);let r=[];for(let[s]of OR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Lee,"loadRootComponents");w0.exports.loadRootComponents=Lee});var Ze=T((mfe,Zn)=>{"use strict";var{Worker:Dee,MessageChannel:Uee,parentPort:$s,isMainThread:wR,threadId:Mee,workerData:An}=require("worker_threads"),{PACKAGE_ROOT:Pee}=b(),{join:U0,isAbsolute:vee,extname:Bee}=require("path"),{server:M0}=(Ur(),Z(eo)),{watch:Hee,readdir:Fee}=require("fs/promises"),{totalmem:L0}=require("os"),wf=b(),qee=X(),On=G(),{randomBytes:Gee}=require("crypto"),{_assignPackageExport:xee}=require("../../index"),kee=b(),Vee=1024*1024,jn=[],Xr=[],$ee=50,CR=1e4,Yee="restart",P0="request_thread_info",v0="resource_report",B0="thread_info",H0="added-port",Kee="ack",NR;xee("threads",Xr);Zn.exports={startWorker:bR,restartWorkers:DR,shutdownWorkers:Xee,workers:jn,setMonitorListener:ite,onMessageFromWorkers:jee,onMessageByType:V0,broadcast:ete,broadcastWithAcknowledgement:rte,setChildListenerByType:Jee,getWorkerIndex:F0,getWorkerCount:q0,getTicketKeys:G0,setMainIsWorker:Qee,setTerminateTimeout:Wee,restartNumber:An?.restartNumber||1};Xr.onMessageByType=V0;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 LR;function Wee(e){CR=e}a(Wee,"setTerminateTimeout");function F0(){return An?An.workerIndex:LR?0:void 0}a(F0,"getWorkerIndex");function q0(){return An?An.workerCount:LR?1:void 0}a(q0,"getWorkerCount");function Qee(e){LR=e}a(Qee,"setMainIsWorker");var yf;function G0(){return yf||(yf=wR?Gee(48):An.ticketKeys,yf)}a(G0,"getTicketKeys");Object.defineProperty(M0,"workerIndex",{get(){return F0()}});Object.defineProperty(M0,"workerCount",{get(){return q0()}});var x0={[P0](e,t){ste(t)},[v0](e,t){nte(t,e)}};function bR(e,t={}){let r=process.constrainedMemory?.()||L0();r=Math.min(r,L0());let s=Math.max(Math.floor(r/Vee/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Xr){let _=new Uee;_.existingPort=u,i.push(_),o.push(_.port2)}Bee(e)||(e+=".js");let c=new Dee(vee(e)?e:U0(Pee,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:Zn.exports.restartNumber,ticketKeys:G0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:H0,port:u,threadId:c.threadId},[u]);return Cf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>bR(e,t),c.on("error",u=>{console.error("Worker error:",u),On.error("Worker error:",u)}),c.on("exit",u=>{jn.splice(jn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<$ee?(t.unexpectedRestarts=c.unexpectedRestarts+1,bR(e,t)):On.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{x0[u.type]?.(u,c)}),jn.push(c),ate(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(bR,"startWorker");var zee=[wf.THREAD_TYPES.HTTP];async function DR(e=null,t=2,r=!0){if(wR){if(r){let{loadRootComponents:o}=C0();await o()}Zn.exports.restartNumber++,t<1&&(t=t*jn.length);let s=[],n=[];for(let o of jn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;On.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Zn.exports.restartNumber,type:wf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=zee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),CR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===kee.ITC_EVENT_TYPES.CHILD_STARTED&&(On.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");On.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=dd();r&&(e==="http"||!e)&&qee.get(wf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else $s.postMessage({type:Yee,workerType:e})}a(DR,"restartWorkers");function Jee(e,t){x0[e]=t}a(Jee,"setChildListenerByType");function Xee(e){return DR(e,1/0,!1)}a(Xee,"shutdownWorkers");var k0=[];function jee(e){k0.push(e)}a(jee,"onMessageFromWorkers");var yR=new Map;function V0(e,t){let r=yR.get(e);r||yR.set(e,r=[]),r.push(t)}a(V0,"onMessageByType");var Zee=10;async function ete(e){let t=0;for(let r of Xr)try{r.postMessage(e),t++>Zee&&(t=0,await new Promise(setImmediate))}catch(s){On.error("Unable to send message to worker",s)}}a(ete,"broadcast");var If=new Map,tte=1;function rte(e){return new Promise(t=>{let r=0;for(let s of Xr)try{let n=tte++,i=a(()=>{If.delete(n),--r===0&&t(),s!==$s&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,If.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of If)o.port===s&&o()})),s.postMessage(e),r++}catch(n){On.error("Unable to send message to worker",n)}r===0&&t()})}a(rte,"broadcastWithAcknowledgement");function ste(e){e.postMessage({type:B0,workers:$0()})}a(ste,"sendThreadInfo");function $0(){let e=Date.now();return jn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a($0,"getChildWorkerInfo");function nte(e,t){e.resources=t,e.resources.updated=Date.now()}a(nte,"recordResourceReport");var IR;function ite(e){IR=e}a(ite,"setMonitorListener");var ote=1e3,D0=!1;function ate(){D0||(D0=!0,setInterval(()=>{for(let e of jn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}IR&&IR()},ote).unref())}a(ate,"startMonitoring");var cte=1e3;if($s){Cf($s);for(let e=0,t=An.addPorts.length;e<t;e++){let r=An.addPorts[e];r.threadId=An.addThreadIds[e],Cf(r)}setInterval(()=>{let e=process.memoryUsage();$s.postMessage({type:v0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},cte).unref(),NR=a(()=>new Promise((e,t)=>{$s.on("message",r),$s.postMessage({type:P0});function r(s){s.type===B0&&($s.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else NR=$0;Zn.exports.getThreadInfo=NR;function Cf(e,t){Xr.push(e),e.on("message",r=>{if(r.type===H0)r.port.threadId=r.threadId,Cf(r.port);else if(r.type===Kee){let s=If.get(r.id);s&&s()}else{for(let n of k0)n(r,e);let s=yR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){On.error(i)}}}).on("close",()=>{Xr.splice(Xr.indexOf(e),1)}).on("exit",()=>{Xr.splice(Xr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Cf,"addPort");if(wR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Fee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(U0(s,i.name));try{for await(let{filename:i}of Hee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await DR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Zn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else $s.on("message",async e=>{let{type:t}=e;t===wf.ITC_EVENT_TYPES.SHUTDOWN&&(Zn.exports.restartNumber=e.restartNumber,$s.unref(),setTimeout(()=>{On.warn("Thread did not voluntarily terminate",Mee),process.exit(0)},CR).unref())})});function K0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;da||((0,bu.onMessageByType)(Y0,d=>{W0(d.path)}),(0,bu.onMessageByType)(ute,d=>{(0,Nu.trace)("confirming to proceed with txn",d.txnId)}),da=Object.create(null));let c=da[i]||(da[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=$o(t);let _=new MR(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function W0(e,t){if(!da)return;let r=da[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:UR,exclusiveStart:!0})){UR=n;let o=pr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=$o(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Nu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Nu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},UR,!0)}function Q0(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,bu.broadcast)({type:Y0,path:n}),W0(n,!0)})}}var Nu,bu,Y0,ute,da,Afe,MR,UR,z0=Te(()=>{Nu=D(G()),bu=D(Ze());Pa();Qc();io();Y0="transaction",ute="transaction-await",Afe=Buffer.alloc(4096);a(K0,"addSubscription");MR=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"}}},UR=Date.now();a(W0,"notifyFromTransactionData");a(Q0,"listenToCommits")});var MT={};Qe(MT,{coerceType:()=>Pf,makeTable:()=>Hf,setServerUtilities:()=>Ste,updateResource:()=>Cu});function Hf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),Q0(i,u);let S=nh(i,s,u),A=0,I,N,Y,Q={},q=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,Pe={},gt={},Zr=864e5,zR,qu,kB=10,VB=6;E&&jR();class at extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},gt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Os.SYSTEM_SCHEMA_NAME&&(M.table===Os.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Os.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,yu);switch(M.type){case"put":return k._writeUpdate(z,yu);case"delete":return k._writeDelete(yu);case"publish":return k._writePublish(z,yu);case"invalidate":return k.invalidate(yu);default:Ke.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let 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"}),Du.signalSchemaChange(new Uu.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,Du.signalUserChange(new Uu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){pa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=In(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return JR(m,g,{transaction:U},L,M=>{if(M?Cu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Ks.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[vR]=!0,HR(V,z=>(Cu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=Jf(this[we],this[Ys],this[me]);if(m)return this[vR]=!0,HR(m,g=>{this[Ys]=g,this[Re]=g.value,this[Mf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,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,Xf()}static enableAuditing(m=!0){E=m,m&&jR(),at.audit=m}static coerceId(m){return m===""?null:Pf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Du.signalSchemaChange(new Uu.SchemaEventMsg(process.pid,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=xu(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=BR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=xu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=BR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[as]){let C=xu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=BR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return xu(m)?.delete}update(m,g){if(!In(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[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];pa(C),In(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ys],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[Ys],L,Lf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,Df,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Gu(m,g,null)}),E)S(m,null,L,C,Df,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,rB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=In(C),L=this[we];pa(L);let y=this[Ys];this[PR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[X0]||ul(m)){if(this.validate(m),C?.source?m=va(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=va(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:gt.put&&(()=>gt.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Cu(this,V));let oe=V?.value;this[PR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Gu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[as]){for await(let g of this.search(m))(await at.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=In(this[me]),C=this[we];pa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate: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),Cu(this,y)),!(y?.version>L)&&(Gu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ys],L,0,E,this[me],0,"delete"),E||Xf()):i.remove(this[we]))}}),!0}search(m){let g=In(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Ks.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Pf(Ne,Ee)):Pf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,tB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===wu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===wu.SEARCH_TYPES.CONTAINS||Ee===wu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===wu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=dte:k.estimated_count=_te}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Uf.SKIP);else{let k=bE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(yE);V=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=bE(ne,y,C,at,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&Jf(He,ii,z,this);if(lr)return lr.then(KB=>Vt(KB))}let Ns=ii?.value;if(!Ns)return Uf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](Ns))return Uf.SKIP;return Ns}return a(Vt,"processEntry"),k.map(ii=>JR(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=K0(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[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 Ks.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||eB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=pr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||eB(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,vf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ys]?.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[Mf],timestamp:this[Ys]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[PR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=In(this[me]),R=this[we]||null;pa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ys],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&&Xf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],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 Ks.ClientError(g.join(". "))}getUpdatedTime(){return this[Mf]}wasLoadedFromSource(){return N?!!this[vR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Ks.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Ks.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value:vt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))vt!=null&&y++;let M=L*2,V=(y+U)/M,z=Math.pow((y-U+1)/L/2,2)+V*(1-V)/M,oe=Math.max(Math.sqrt(z)*g,1),k=Math.round(V*g),Ee=Math.max(k-1.96*oe,0),Ne=Math.min(k+1.96*oe,g),ne=Math.pow(10,Math.round(Math.log10(oe)));return ne>k&&(ne=ne/10),y=Math.round(k/ne)*ne,{recordCount:y,estimatedRange:[Math.round(Ee),Math.round(Ne)]}}return{recordCount:y}}static updatedAttributes(){_l(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Iu(),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 Iu();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 Iu();let y=u.get(R);if(y){let U=pr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let $B=at.prototype;return $B[X0]=!0,d&&at.setTTLExpiration(d/1e3),B&&YB(),at;function Gu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Lu.getIndexedValues)(M);if(V){J0&&L.prefetch(V.map(z=>({key:z,value:W})),Z0);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Lu.getIndexedValues)(U),V){J0&&L.prefetch(V.map(z=>({key:z,value:W})),Z0);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Gu,"updateIndices");function pa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>j0)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,vf.writeKey)(W,mte,0)>j0)throw new Error("Primary key size is too large: "+W.length);return!0}a(pa,"checkValidId");function JR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>VB&&(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(JR,"loadLocalRecord");function xu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return pte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(xu,"getTablePermissions");function Jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Lf|Df)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,xr(!R,"cache-hit",n)),R){let L=XR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new Ks.ServerError("Entry is not cached",504);return}else return L}}}a(Jf,"ensureLoadedFromSource");function In(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new _i,m.lmdbDb=i,m;m=g}while(!0)}else return new El}a(In,"txnForContext");async function XR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(Lf|Df)?L(XR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},hte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,oe)=>{let k;HR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&Lf;let He=M.lastModified||Vt&&R;vt=Vt||He>R||!U,He||(He=(0,Lu.getNextMonotonicTime)());let Ns=performance.now()-Ne;if(Or(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}In(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,Ns)=>{if(Ns?.version!==R)return;let lr=Gu(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(XR,"getFromSource");function Xf(){if(Zr!==zR&&(zR=Zr,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!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`),qu=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(C+Zr,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+Ete<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Iu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(Xf,"scheduleCleanup");function jR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(jR,"addDeleteRemoval");function YB(){(0,Qi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Iu()}}catch(W){Ke.error("Error in evicting old records",W)}},fte).unref()}a(YB,"runRecordExpirationEviction")}function BR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function Z0(){}function Ste(e){rB=e}function Pf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Tte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Bf.autoCast)(e)}function eB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function HR(e,t,r){return e?.then?e.then(t,r):t(e)}function Cu(e,t){e[Ys]=t,e[Re]=t?.value??null,e[Mf]=t?.version}var Os,Uf,Lu,tB,wu,Mu,Ks,Du,Uu,Ke,vf,Qi,Bf,lte,rB,_te,dte,fte,Ete,J0,hte,Mf,X0,Ys,PR,vR,yu,Lf,Df,mte,j0,pte,qfe,Tte,Iu,Zd=Te(()=>{Os=D(b()),Uf=require("lmdb"),Lu=D(hr()),tB=require("lodash");os();OE();wu=D(ze()),Mu=D(X());z0();Ks=D(j()),Du=D(on()),Uu=D(_s());fe();ml();Ke=D(G());fl();di();vf=require("ordered-binary"),Qi=D(Ze());io();Bf=D($());Ga();xn();lte=new Uint8Array(9);lte[8]=192;_te=1e8,dte=1e7,fte=6e4,Ete=864e5;Mu.initSync();J0=Mu.get(Os.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hte=1e4,Mf=Symbol.for("version"),X0=Symbol.for("incremental-update"),Ys=Symbol("entry"),PR=Symbol("is-saving"),vR=Symbol("loaded-from-source"),yu={isNotification:!0,ensureLoaded:!1},Lf=1,Df=8,mte=Buffer.allocUnsafeSlow(8192),j0=1978,pte={read:!0,insert:!0,update:!0,delete:!0},qfe=(0,Bf.convertToMS)(Mu.get(Os.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Hf,"makeTable");a(BR,"attributesAsObject");a(Z0,"noop");a(Ste,"setServerUtilities");Tte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Pf,"coerceType");a(eB,"isDescendantId");Iu=a(()=>new Promise(setImmediate),"rest");a(HR,"when");a(Cu,"updateResource")});var Ce={};Qe(Ce,{database:()=>hc,databases:()=>xe,dropDatabase:()=>Wm,dropTableMeta:()=>bte,getDatabases:()=>Es,getTables:()=>Rte,onUpdatedTable:()=>lR,readMetaDb:()=>Pu,resetDatabases:()=>gte,table:()=>et,tables:()=>mr});function Rte(){return kf||Es(),mr||{}}function Es(){if(kf)return xe;kf=!0,ha=new Map;let e=(0,kt.getHdbBasePath)()&&(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),t=(0,kt.get)(wr.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)(wr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ir.existsSync)(e)?e:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ir.existsSync)(e))for(let r of(0,Ir.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Pu((0,Fe.join)(e,r.name),null,s)}if((0,Ir.existsSync)((0,Ea.getBaseSchemaPath)())){for(let r of(0,Ir.readdirSync)((0,Ea.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Ea.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Ea.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ir.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Pu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Ir.existsSync)(n))for(let o of(0,Ir.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Pu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Ir.existsSync)(u)&&Pu(u,o,r,null,!0)}}for(let r in xe){let s=ha.get(r);if(s){let n=xe[r];r.includes("delete")&&jr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(jr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in mr)delete mr[n];delete mr[Vf]}}return ha=null,xe}}function gte(){kf=!1;for(let[,e]of ei)e.needsDeletion=!0;Es();for(let[e,t]of ei)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ei.delete(e));return xe}function Pu(e,t,r=GR,s,n){let i=new FR.default(e,!1);try{let o=ei.get(e);o?o.needsDeletion=!1:(o=(0,qf.open)(i),ei.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Ff.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,Ir.existsSync)(s)&&(i.path=s,_=(0,qf.open)(i),_.isLegacy=!0):_=Al(o));let l=oB(r),d=l[Vf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){jr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,q=typeof S.audit=="boolean"?S.audit:(0,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(fa)||0)&&u.putSync(fa,Y+1):(S.tableId=Y=u.get(fa),Y||(Y=1),u.putSync(fa,Y+1),u.putSync(S.key,S));let x=new zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Il(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){jr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=aB(l,E,Hf({primaryStore:Q,auditStore:_,audit:q,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of xR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function oB(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)),ha&&!ha.has(e)){let r=new Set;t[Vf]=r,ha.set(e,r)}return t}function aB(e,t,r){return e[t]=r,r}function hc({database:e,table:t}){e||(e=GR),Es();let r=oB(e),s=(0,Fe.join)((0,kt.getHdbBasePath)(),wr.DATABASES_DIR_NAME),n=(0,kt.get)(wr.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)(wr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ir.existsSync)(s)?s:(0,Fe.join)((0,kt.getHdbBasePath)(),wr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ei.get(o);if(!c){let u=new FR.default(o,!1);c=(0,qf.open)(u),ei.set(o,c)}return c}async function Wm(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ei.delete(n.path),n.status==="open"&&(await n.close(),await sB.remove(n.path))}if(e==="data"){for(let r in mr)delete mr[r];delete mr[Vf]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=GR);let l=hc({database:t,table:e}),d=xe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Al(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,kt.get)(wr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),jr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=Il(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Ff.INTERNAL_DBIS_NAME,A),x.tableId=S.get(fa),x.tableId||(x.tableId=1),S.putSync(fa,x.tableId+1),h.tableId=x.tableId,f=aB(d,e,Hf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,q(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Ff.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){q(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,q(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!0,q(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,q(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),jr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Nte(f,Q,Y):I&&Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of xR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),jr.trace(`${e} table loaded`),f;function q(){N||l.transactionSync(()=>({then(w){N=w}}))}a(q,"startTxn")}async function Nte(e,t,r){try{let s=e.schemaVersion;await Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,nB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,jr.error(f)}),vu.workerData&&vu.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>Ate?await n:u>Ote&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){jr.error("Error in indexing",s)}}function bte({table:e,database:t}){let r=hc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function lR(e){xR.push(e)}var kt,Ff,qf,Fe,Ir,Ea,zi,FR,wr,sB,qR,nB,Gf,xf,vu,jr,iB,GR,Vf,mr,xe,fa,xR,kf,ei,ha,Ate,Ote,fe=Te(()=>{kt=D(X()),Ff=D(ze()),qf=require("lmdb"),Fe=require("path"),Ir=require("fs"),Ea=D(ve());Zd();zi=D(wl()),FR=D(Ll()),wr=D(b()),sB=D(require("fs-extra")),qR=require("../../index"),nB=D(hr()),Gf=D(on()),xf=D(_s()),vu=require("worker_threads"),jr=D(G()),iB=D(Ze());io();Ga();GR="data",Vf=Symbol("defined-tables");(0,kt.initSync)();mr=Object.create(null),xe=Object.create(null);(0,qR._assignPackageExport)("databases",xe);(0,qR._assignPackageExport)("tables",mr);fa=Symbol.for("next-table-id"),xR=[],ei=new Map;a(Rte,"getTables");a(Es,"getDatabases");a(gte,"resetDatabases");a(Pu,"readMetaDb");a(oB,"ensureDB");a(aB,"setTable");a(hc,"database");a(Wm,"dropDatabase");a(et,"table");Ate=1e3,Ote=10;a(Nte,"runIndexing");a(bte,"dropTableMeta");a(lR,"onUpdatedTable")});var $=T((Qfe,gB)=>{"use strict";var ti=require("path"),dB=require("fs-extra"),cr=G(),cB=require("fs-extra"),$f=require("os"),yte=require("net"),Ite=require("recursive-iterator"),We=b(),wte=Dg(),uB=require("papaparse"),Yf=require("moment"),{inspect:Cte}=require("util"),lB=require("is-number"),Wfe=require("lodash"),Lte=require("minimist"),Dte=require("https"),Ute=require("http"),{hdb_errors:Kf}=j(),Mte=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,fB=require("util").promisify(setTimeout),Pte=100,vte=5,Bte="",Hte=4,_B={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};gB.exports={isEmpty:Cr,isEmptyOrZeroLength:Ws,arrayHasEmptyValues:Gte,arrayHasEmptyOrZeroLengthValues:xte,buildFolderPath:kte,isBoolean:EB,errorizeMessage:Fte,stripFileExtension:$te,autoCast:Yte,autoCastJSON:hB,autoCastJSONDeep:VR,removeDir:Kte,compareVersions:Wte,isCompatibleDataVersion:Qte,escapeRawValue:zte,unescapeValue:Jte,stringifyProps:Xte,timeoutPromise:Zte,isClusterOperation:tre,getClusterUser:sre,checkGlobalSchemaTable:rre,getHomeDir:pB,getPropsFilePath:jte,promisifyPapaParse:nre,removeBOM:SB,createEventPromise:ire,checkProcessRunning:ore,checkSchemaTableExist:are,checkSchemaExists:TB,checkTableExists:RB,getStartOfTomorrowInSeconds:cre,getLimitKey:ure,isObject:Vte,isNotEmptyAndHasValue:qte,autoCasterIsNumberCheck:mB,backtickASTSchemaItems:lre,isPortTaken:ere,createForkArgs:_re,autoCastBoolean:dre,async_set_timeout:fB,getTableHashAttribute:fre,doesSchemaExist:Ere,doesTableExist:hre,stringifyObj:mre,ms_to_time:pre,changeExtension:Sre,getEnvCliRootPath:$R,noBootFile:Tre,httpRequest:Rre,transformReq:gre,convertToMS:Are,PACKAGE_ROOT:We.PACKAGE_ROOT};function Fte(e){return e instanceof Error?e:new Error(e)}a(Fte,"errorizeMessage");function Cr(e){return e==null}a(Cr,"isEmpty");function qte(e){return!Cr(e)&&(e||e===0||e===""||EB(e))}a(qte,"isNotEmptyAndHasValue");function Ws(e){return Cr(e)||e.length===0||e.size===0}a(Ws,"isEmptyOrZeroLength");function Gte(e){if(Cr(e))return!0;for(let t=0;t<e.length;t++)if(Cr(e[t]))return!0;return!1}a(Gte,"arrayHasEmptyValues");function xte(e){if(Ws(e))return!0;for(let t=0;t<e.length;t++)if(Ws(e[t]))return!0;return!1}a(xte,"arrayHasEmptyOrZeroLengthValues");function kte(...e){try{return e.join(ti.sep)}catch{console.error(e)}}a(kte,"buildFolderPath");function EB(e){return Cr(e)?!1:e===!0||e===!1}a(EB,"isBoolean");function Vte(e){return Cr(e)?!1:typeof e=="object"}a(Vte,"isObject");function $te(e){return Ws(e)?Bte:e.slice(0,-Hte)}a($te,"stripFileExtension");function Yte(e){return Cr(e)||e===""||typeof e!="string"?e:_B[e]!==void 0?_B[e]:mB(e)===!0?Number(e):Mte.test(e)?new Date(e):e}a(Yte,"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 VR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=VR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=VR(r);s!==r&&(e[t]=s)}return e}else return hB(e)}a(VR,"autoCastJSONDeep");function mB(e){if(e.startsWith("0.")&&lB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&lB(e))}a(mB,"autoCasterIsNumberCheck");async function Kte(e){if(Ws(e))throw new Error(`Directory path: ${e} does not exist`);try{await cB.emptyDir(e),await cB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(Kte,"removeDir");function Wte(e,t){if(Ws(e)){cr.info("Invalid current version sent as parameter.");return}if(Ws(t)){cr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Wte,"compareVersions");function Qte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Qte,"isCompatibleDataVersion");function zte(e){if(Cr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(zte,"escapeRawValue");function Jte(e){if(Cr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Jte,"unescapeValue");function Xte(e,t){if(Cr(e))return cr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$f.EOL}!Ws(s)&&s[0]===";"?r+=" "+s+n+$f.EOL:Ws(s)||(r+=s+"="+n+$f.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Xte,"stringifyProps");function pB(){let e;try{e=$f.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(pB,"getHomeDir");function jte(){let e=ti.join(pB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return dB.existsSync(e)||(e=ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(jte,"getPropsFilePath");function Zte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Zte,"timeoutPromise");async function ere(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=yte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(ere,"isPortTaken");function tre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(tre,"isClusterOperation");function rre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rre,"checkGlobalSchemaTable");function sre(e,t){if(Cr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Cr(e)||Ws(e)){cr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(sre,"getClusterUser");function nre(){uB.parsePromise=function(e,t,r){return new Promise(function(s,n){uB.parse(e,{header:!0,transformHeader:SB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(nre,"promisifyPapaParse");function SB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(SB,"removeBOM");function ire(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${Cte(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(ire,"createEventPromise");async function ore(e){let t=!0,r=0;do await fB(Pte*r++),(await wte.findPs(e)).length>0&&(t=!1);while(t&&r<vte);if(t)throw new Error(`process ${e} was not started`)}a(ore,"checkProcessRunning");function are(e,t){let r=TB(e);if(r)return r;let s=RB(e,t);if(s)return s}a(are,"checkSchemaTableExist");function TB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(TB,"checkSchemaExists");function RB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(RB,"checkTableExists");function cre(){let e=Yf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Yf().utc().unix();return e-t}a(cre,"getStartOfTomorrowInSeconds");function ure(){return Yf().utc().format("DD-MM-YYYY")}a(ure,"getLimitKey");function lre(e){try{let t=new Ite(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){cr.error("Got an error back ticking items."),cr.error(t)}}a(lre,"backtickASTSchemaItems");function _re(e){return[e]}a(_re,"createForkArgs");function dre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dre,"autoCastBoolean");function fre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(fre,"getTableHashAttribute");function Ere(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Ere,"doesSchemaExist");function hre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(hre,"doesTableExist");function mre(e){try{return JSON.stringify(e)}catch{return e}}a(mre,"stringifyObj");function pre(e){let t=Yf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(pre,"ms_to_time");function Sre(e,t){let r=ti.basename(e,ti.extname(e));return ti.join(ti.dirname(e),r+t)}a(Sre,"changeExtension");function $R(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a($R,"getEnvCliRootPath");var kR;function Tre(){if(kR)return kR;let e=$R();$R()&&dB.pathExistsSync(ti.join(e,We.HDB_CONFIG_FILE))&&(kR=!0)}a(Tre,"noBootFile");function Rre(e,t){let r;return e.protocol==="http:"?r=Ute:r=Dte,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Rre,"httpRequest");function gre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(gre,"transformReq");function Are(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Are,"convertToMS")});var IB=T((Jfe,yB)=>{"use strict";var Lr=X(),Ore=tc(),ce=b(),Bu=ke(),Nn=require("path"),{PACKAGE_ROOT:Qf}=b(),AB=X(),Wf=$(),ma="/dev/null",Nre=Nn.join(Qf,"launchServiceScripts"),OB=Nn.join(Qf,"utility/scripts"),bre=Nn.join(OB,ce.HDB_RESTART_SCRIPT),NB=Nn.resolve(Qf,"dependencies",`${process.platform}-${process.arch}`,Bu.NATS_BINARY_NAME);function bB(){let t=Ore.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 Wf.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Qf}}a(bB,"generateMainServerConfig");var yre=9930;function Ire(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.HUB_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=AB.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==yre?"-"+s:""),script:NB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Ire,"generateNatsHubServerConfig");var wre=9940;function Cre(){Lr.initSync(!0);let e=Lr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.LEAF_SERVER),r=Nn.join(Lr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=AB.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Lr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==wre?"-"+s:""),script:NB,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 Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Cre,"generateNatsLeafServerConfig");function Lre(){Lr.initSync();let e=Nn.join(Lr.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:Nre,autorestart:!1};return Lr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ma,t.error_file=ma),t}a(Lre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return Wf.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:OB},script:bre}}a(Dre,"generateRestart");function Ure(){return{apps:[bB()]}}a(Ure,"generateAllServiceConfigs");yB.exports={generateAllServiceConfigs:Ure,generateMainServerConfig:bB,generateRestart:Dre,generateNatsHubServerConfig:Ire,generateNatsLeafServerConfig:Cre,generateClusteringUpgradeV4ServiceConfig:Lre}});var FS=T((Zfe,GB)=>{"use strict";var Ae=b(),Mre=$(),bn=US(),Hu=_t(),Qs=ke(),ri=IB(),zf=X(),si=G(),Pre=un(),{startWorker:wB,onMessageFromWorkers:vre}=Ze(),Bre=Fo(),jfe=require("util"),Hre=require("child_process"),Fre=require("fs"),{execFile:qre}=Hre,Se;GB.exports={enterPM2Mode:Gre,start:ni,stop:YR,reload:LB,restart:DB,list:KR,describe:MB,connect:yn,kill:Yre,startAllServices:Kre,startService:WR,getUniqueServicesList:PB,restartAllServices:Wre,isServiceRegistered:vB,reloadStopStart:BB,restartHdb:UB,deleteProcess:Vre,startClusteringProcesses:FB,startClusteringThreads:qB,isHdbRestartRunning:$re,isClusteringRunning:zre,stopClustering:Qre,reloadClustering:Jre};var Fu=!1;vre(e=>{e.type==="restart"&&zf.initSync(!0)});function Gre(){Fu=!0}a(Gre,"enterPM2Mode");function yn(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(yn,"connect");var ur,xre=10,CB;function ni(e,t=!1){if(Fu)return kre(e);let r=qre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!CB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<xre&&(Fre.existsSync(bn.getHubConfigPath())?ni(e):(await bn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=zf.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Qs.LOG_LEVEL_HIERARCHY[o]>=Qs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Qs.LOG_LEVELS.ERR||l===Qs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=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?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{CB=!0,ur&&(ur.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ur.push(r)}a(ni,"start");function kre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(kre,"startWithPM2");function YR(e){if(!Fu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(YR,"stop");function LB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(LB,"reload");function DB(e){if(!Fu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(DB,"restart");function Vre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Vre,"deleteProcess");async function UB(){await ni(ri.generateRestart())}a(UB,"restartHdb");async function $re(){let e=await KR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($re,"isHdbRestartRunning");function KR(){return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(KR,"list");function MB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(MB,"describe");function Yre(){if(!Fu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(Yre,"kill");async function Kre(){try{await FB(),await qB(),await ni(ri.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Kre,"startAllServices");async function WR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw Se?.disconnect(),r}}a(WR,"startService");async function PB(){try{let e=await KR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Se?.disconnect(),e}}a(PB,"getUniqueServicesList");async function Wre(e=[]){try{let t=!1,r=await PB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await DB(o))}t&&await BB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Wre,"restartAllServices");async function vB(e){if(ur?.find(r=>r.name===e))return!0;let t=await Bre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vB,"isServiceRegistered");async function BB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?zf.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):zf.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await MB(e),s=Mre.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await YR(e),await WR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await UB():await LB(e)}a(BB,"reloadStopStart");var HB;async function FB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await WR(r,e)}}a(FB,"startClusteringProcesses");async function qB(){HB=wB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Hu.createWorkQueueStream(Qs.WORK_QUEUE_CONSUMER_NAMES),await Hu.updateIngestStreamConsumer(),await Hu.updateLocalStreams();let e=await Pre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),wB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(qB,"startClusteringThreads");async function Qre(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await HB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await YR(t)}}a(Qre,"stopClustering");async function zre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await vB(t)===!1)return!1}return!0}a(zre,"isClusteringRunning");async function Jre(){await bn.generateNatsConfig(!0),await Hu.reloadNATSHub(),await Hu.reloadNATSLeaf(),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Jre,"reloadClustering")});var QR=FS(),xB=b();a(async function(){try{let t=await QR.describe(xB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await QR.reload(r.pm_id);await QR.deleteProcess(xB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|
|
28
|
+
`+rR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(W7,"getServerOptions");function Q7(){let e=As.get(Tn.OPERATIONSAPI_NETWORK_CORS),t=As.get(Tn.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===$7)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Q7,"getCORSOpts");function z7(){return As.get(Tn.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??k7}a(z7,"getHeaderTimeoutConfig")});var jv=T((Hde,Xv)=>{"use strict";var{decode:J7}=require("msgpackr"),{isMainThread:Pde,parentPort:X7,threadId:vde}=require("worker_threads"),Vv=dt(),Rn=ke(),j7=b(),Tu=G(),xv=X(),$v=b();Ze();var Z7=nn(),{recordAction:eee,recordActionBinary:tee}=(xn(),Z(A_)),{publishToStream:ree}=Vv,Bde={durable:Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Rn.WORK_QUEUE_CONSUMER_NAMES.deliver_group},see,nee,iee,Yv,Kv;Xv.exports={initialize:Wv,workQueueListener:Jv,setSubscription:oee,setIgnoreOrigin:cee,getDatabaseSubscriptions:aee};async function Wv(){Kv=!0,Tu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Vv.getNATSReferences();see=e,nee=e.info.server_name,iee=t,Yv=r}a(Wv,"initialize");var hf=new Map;function oee(e,t,r){let s=hf.get(e);s||hf.set(e,s=new Map),s.set(t,r),Kv||Wv().then(Jv)}a(oee,"setSubscription");function aee(){return hf}a(aee,"getDatabaseSubscriptions");var Qv;function cee(e){Qv=e}a(cee,"setIgnoreOrigin");var zv=100,kv=new Array(zv),Ef=0;async function Jv(){let t=await(await Yv.consumers.get(Rn.WORK_QUEUE_CONSUMER_NAMES.stream_name,Rn.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();X7?.on("message",async r=>{let{type:s}=r;s===$v.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await kv[Ef],kv[Ef]=uee(r).catch(s=>{Tu.error(s)}),++Ef>=zv&&(Ef=0)}a(Jv,"workQueueListener");async function uee(e){let t=J7(e.data);eee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=xv.get(j7.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(Rn.MSG_HEADERS.TRANSACTED_NODES)&&r.values(Rn.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(Rn.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!Qv),tee(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(Rn.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;Tu.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),Tu.trace(`messageProcessor nats msg id: ${e.headers.get(Rn.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:S,node_name:A}=f||{},I=hf.get(c)?.get(_);if(!I)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,I.send(t);else if(l.length===1&&!u)I.send({type:sR(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((Y,Q)=>({type:sR(o),value:Y,expiresAt:E,id:d?.[Q],table:_}));for(;u;)N.push({type:sR(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;I.send({type:"transaction",writes:N,table:_,timestamp:p,onCommit:h,user:S,nodeName:A})}xv.get($v.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ree(e.subject.split(".").slice(0,-1).join("."),Z7.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){Tu.error(o)}e.ack()}a(uee,"messageProcessor");function sR(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(sR,"convertOperation")});var uR={};Qe(uR,{disableNATS:()=>_ee,publishToStream:()=>Rf,setNATSReplicator:()=>nR,setPublishToStream:()=>dee,setSubscription:()=>cR,start:()=>lee});function lee(){pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Eee()}function _ee(e=!0){s0=e}function dee(e,t){Rf=e,cR=t}function Eee(){if(s0||process.env._DISABLE_NATS)return;let e=hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];nR(n,r,i)}}lR((r,s)=>{nR(r.tableName,r.databaseName,r),s&&i0(r)}),!Zv&&(Zv=!0)}function nR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Nt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[we],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[we]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[we],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[we]})}static defineSchema(i){i0(i)}static subscribe(){let i=new is;return cR(t,e,i),i}static subscribeOnThisThread(i){return i<fee}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new mf(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=n0;return i}a(s,"getNATSTransaction")}function i0(e){let t=pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Rf(`${oR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aR.createNatsTableStreamName)(e.databaseName,e.tableName),void 0,{operation:"define_schema",schema:e.databaseName,table:e.tableName,attributes:e.attributes,__origin:{timestamp:Date.now(),node_name:t}})}var e0,oR,aR,t0,r0,pf,Sf,Tf,s0,Rf,cR,fee,n0,Zv,mf,iR,o0=Te(()=>{fe();as();e0=D(dt()),oR=D(ke()),aR=D(nn());Pa();t0=D(jv()),r0=D(mr()),pf=D(X()),Sf=D(b()),Tf=D(G());a(lee,"start");a(_ee,"disableNATS");Rf=e0.publishToStream,cR=t0.setSubscription;a(dee,"setPublishToStream");fee=2;a(Eee,"assignReplicationSource");a(nR,"setNATSReplicator");a(i0,"publishSchema");mf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=pf.default.get(Sf.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Tf.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Rf(`${oR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,aR.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Tf.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},iR=class extends mf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,r0.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};n0=new iR});async function c0({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await _R.getResource(e,{});n=new fR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await _R.get(e);i&&i.delete()}n=new Af(e,t)}return n}function dR(){return gf++,gf>65500&&(gf=1),gf}var a0,ua,_R,gf,Af,fR,u0=Te(()=>{fe();Qc();a0=D(mr()),ua=D(G());di();_R=et({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(c0,"getSession");gf=1;a(dR,"getNextMessageId");Af=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(I=>I.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,ua.trace)("Resuming subscription from",n,"from",o);let h=Qn.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let p=h.path,S=h.Resource,A=await Ge(E,async()=>{let I=await S.subscribe(E);if(!I)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!I[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of I)try{let Y;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,Y=this.needsAcknowledge(N)):(N.acknowledge?.(),Y=dR());let Q=N.id;Array.isArray(Q)&&(Q=$o(Q)),Q==null&&(Q=""),this.listener(p+"/"+Q,N.value,Y,t)}catch(Y){(0,ua.warn)(Y)}})(),I});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=dR();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Qn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ge(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},fR=class extends Af{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=dR(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,ua.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,a0.getNextMonotonicTime)()),(0,ua.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),_R.put(this.sessionRecord)),t.qos}}});var hR={};Qe(hR,{start:()=>mee});async function mee({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=d0(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,Xr.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;hee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,f0.getSuperUser)());let{onMessage:u,onClose:_}=d0(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Xr.info)("Socket error",l)})},{port:t,securePort:s})}function d0(e,t,r,s,n){_0||(_0=!0,Ac(d=>{Of>0&&d.push({metric:"mqtt-connections",connections:Of,byThread:!0})}));let i;Of++;let o,c={protocolVersion:4},u=(0,Nf.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Of--,i||(i=!0,o?.disconnect(),kr(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await ut.getUser(d.username,d.password.toString()),(0,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&l0.notify({username:s.username,status:gn.AUTH_AUDIT_STATUS.SUCCESS,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ER.get)(gn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&l0.error({username:s.username,status:gn.AUTH_AUDIT_STATUS.FAILURE,type:gn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=c0({user:s,...d}),o=await o}catch(N){return(0,Xr.error)(N),kr(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}kr(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,Y,Q,q)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(Y),messageId:Q||Math.floor(Math.random()*1e8),qos:q.qos},K)}catch(w){(0,Xr.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let Y;try{Y=(await o.addSubscription(N,N.qos>=1)).qos||0}catch(Q){(0,Xr.error)(Q),Y=128}h.push(Y)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=jo(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,I;try{I=await o.publish(d,A)}catch(N){(0,Xr.warn)(N),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:I===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),kr(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Xr.error)(h),f({cmd:"disconnect"})}function f(h,p){let S=(0,Nf.generate)(h,c);t(S),Nr(S.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return zn(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var Nf,f0,ER,gn,Xr,l0,hee,_0,Of,E0=Te(()=>{Nf=require("mqtt-packet");u0();f0=D(xr());Yo();xn();Mr();ER=D(X()),gn=D(b()),Xr=D(G()),l0=(0,Xr.loggerWithTag)("auth-event"),hee=!0;a(mee,"start");Of=0;a(d0,"onSocket")});var m0,h0,mR,p0=Te(()=>{m0=require("os"),h0=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,s]of this)t(s,r,this)}};(0,m0.platform)()!="win32"&&(mR=require("node-unix-socket").createReuseportFd)});var bd={};Qe(bd,{component_errors:()=>la,loadComponent:()=>bf,loadComponentDirectories:()=>y0,setErrorReporter:()=>Ree});function y0(e,t){t&&(SR=t),e&&(TR=e);let r=[];if((0,Os.existsSync)(pR)){let n=(0,Os.readdirSync)(pR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,gt.join)(pR,o);r.push(bf(c,SR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(bf(s,SR,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{b0=!0})}function Ree(e){Au=e}async function bf(e,t,r,s,n,i){if(!T0.has(e)){T0.set(e,!0),n&&(TR=n);try{let o;s&&(la=new Map);let c=(0,gt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Os.existsSync)(c)?o=s?(0,N0.getConfigObj)():(0,R0.parseDocument)((0,Os.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=RR;let u=[],_=s;for(let l in o){let d=o[l];if(la.set(s?l:(0,gt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let I=e,N;for(;!(0,Os.existsSync)(N=(0,gt.join)(I,"node_modules",l));)if(I=(0,gt.dirname)(I),I.length<(0,O0.getHdbBasePath)().length){N=null;break}if(N)f=await bf(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Tee[l];if(!f)continue;u.push(f);let h=a(I=>(I.origin=r,et(I)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,S=p?.securePort||p?.https&&p.port,A=!p?.https&&p?.port;if(Ru.isMainThread&&(f=await f.startOnMainThread?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&p))for(let I of[A,S])try{if(+I&&!S0.includes(I)){let N=gR.get(AR.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&gu.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!mR)&&(S0.push(I),vv(I,N))}}catch(N){console.error("Error listening on socket",I,N,l)}if(t.isWorker&&(f=await f.start?.({server:ut,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),TR.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,A0.handleHDBError)("Can not reference parent directories");let I=(0,gt.join)(e,d.files).replace(/\\/g,"/"),N=I.indexOf("/*");if(N>-1&&d.files!==RR[l]?.files&&!(0,Os.existsSync)(I.slice(0,N)))throw new Error(`The path '${I.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let Y of await(0,g0.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:Q,dirent:q}=Y;_=!0;let w=(0,gt.relative)(e,Q).replace(/\\/g,"/");if(d.root){let x=d.root;if(x.startsWith("/")&&(x=x.slice(1)),x.endsWith("/")&&(x=x.slice(0,-1)),x+="/",w.startsWith(x))w=w.slice(x.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,gt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(q.isFile()){let x=await See(Q);Ru.isMainThread&&await f.setupFile?.(x,B,Q,t),t.isWorker&&await f.handleFile?.(x,B,Q,t)}else Ru.isMainThread&&await f.setupDirectory?.(B,Q,t),t.isWorker&&await f.handleDirectory?.(B,Q,t)}catch(x){x.message=`Could not load ${q.isFile()?"file":"directory"} '${Q}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${x.message}`,Au?.(x),((0,_a.getWorkerIndex)()===0?console:gu.default).error(x),t.set(d.path||"/",new Ou(x)),la.set(s?l:(0,gt.basename)(e),x.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,gt.basename)(e)}' due to: ${h.message}`,Au?.(h),((0,_a.getWorkerIndex)()===0?console:gu.default).error(h),t.set(d.path||"/",new Ou(h),null,!0),la.set(s?l:(0,gt.basename)(e),h.message)}}if(Ru.isMainThread&&!b0&&i&&(0,_a.watchDir)(e,async()=>y0()),o.extensionModule)return await Tl((0,gt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;Au?.(new Error(l)),((0,_a.getWorkerIndex)()===0?console:gu.default).error(l),la.set((0,gt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,Au?.(o),t.set("",new Ou(o))}}}var Os,gt,Ru,R0,gR,AR,g0,_a,gu,A0,O0,pee,N0,See,pR,TR,b0,SR,la,Tee,RR,S0,T0,Au,Ou,yd=Te(()=>{Os=require("fs"),gt=require("path"),Ru=require("worker_threads"),R0=require("yaml"),gR=D(X()),AR=D(b());qA();VA();$A();xM();bv();Lv();g0=D(require("fast-glob")),_a=D(Ze()),gu=D(G());UE();Mr();A0=D(j());as();fe();Bv();O0=D(X()),pee=D(Gv());pd();o0();E0();N0=D(hr());p0();({readFile:See}=Os.promises),pR=gR.get(AR.CONFIG_PARAMS.COMPONENTSROOT),TR=new Map,la=new Map;a(y0,"loadComponentDirectories");Tee={REST:Gd,rest:Gd,graphqlSchema:DE,jsResource:PE,fastifyRoutes:XT,login:BE,static:jT,operationsApi:pee,customFunctions:{},http:{},clustering:uR,authentication:zc,mqtt:hR},RR={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(RR,"static",{value:{files:"web/**"}});S0=[],T0=new Map;a(Ree,"setErrorReporter");a(bf,"loadComponent");Ou=class extends Nt{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var C0=T((Efe,w0)=>{var{isMainThread:I0}=require("worker_threads"),{getTables:gee}=(fe(),Z(Ce)),{loadComponentDirectories:Aee,loadComponent:Oee}=(yd(),Z(bd)),{resetResources:Nee}=(Qc(),Z(aU)),bee=KS(),yee=hr(),{dirname:Iee}=require("path"),{getConnection:wee}=dt(),Cee=X(),Lee=b(),OR=new Map;async function Dee(e=!1){!I0&&Cee.get(Lee.CONFIG_PARAMS.CLUSTERING_ENABLED)&&wee();try{I0&&await bee()}catch(s){console.error(s)}let t=Nee();gee(),t.isWorker=e,await Oee(Iee(yee.getConfigFilePath()),t,"hdb",!0,OR),await Aee(OR,t);let r=[];for(let[s]of OR)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Dee,"loadRootComponents");w0.exports.loadRootComponents=Dee});var Ze=T((mfe,Zn)=>{"use strict";var{Worker:Uee,MessageChannel:Mee,parentPort:Ys,isMainThread:wR,threadId:Pee,workerData:An}=require("worker_threads"),{PACKAGE_ROOT:vee}=b(),{join:M0,isAbsolute:Bee,extname:Hee}=require("path"),{server:P0}=(Mr(),Z(eo)),{watch:Fee,readdir:qee}=require("fs/promises"),{totalmem:L0}=require("os"),wf=b(),Gee=X(),On=G(),{randomBytes:xee}=require("crypto"),{_assignPackageExport:kee}=require("../../index"),Vee=b(),D0=1024*1024,jn=[],jr=[],$ee=50,CR=1e4,Yee="restart",v0="request_thread_info",B0="resource_report",H0="thread_info",F0="added-port",Kee="ack",NR;kee("threads",jr);Zn.exports={startWorker:bR,restartWorkers:DR,shutdownWorkers:Xee,workers:jn,setMonitorListener:ite,onMessageFromWorkers:jee,onMessageByType:$0,broadcast:ete,broadcastWithAcknowledgement:rte,setChildListenerByType:Jee,getWorkerIndex:q0,getWorkerCount:G0,getTicketKeys:x0,setMainIsWorker:Qee,setTerminateTimeout:Wee,restartNumber:An?.restartNumber||1};jr.onMessageByType=$0;jr.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=jr.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var LR;function Wee(e){CR=e}a(Wee,"setTerminateTimeout");function q0(){return An?An.workerIndex:LR?0:void 0}a(q0,"getWorkerIndex");function G0(){return An?An.workerCount:LR?1:void 0}a(G0,"getWorkerCount");function Qee(e){LR=e}a(Qee,"setMainIsWorker");var yf;function x0(){return yf||(yf=wR?xee(48):An.ticketKeys,yf)}a(x0,"getTicketKeys");Object.defineProperty(P0,"workerIndex",{get(){return q0()}});Object.defineProperty(P0,"workerCount",{get(){return G0()}});var k0={[v0](e,t){ste(t)},[B0](e,t){nte(t,e)}};function bR(e,t={}){let r=process.constrainedMemory?.()||L0();r=Math.min(r,L0(),2e4*D0);let s=Math.max(Math.floor(r/D0/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of jr){let _=new Mee;_.existingPort=u,i.push(_),o.push(_.port2)}Hee(e)||(e+=".js");let c=new Uee(Bee(e)?e:M0(vee,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:Zn.exports.restartNumber,ticketKeys:x0()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:F0,port:u,threadId:c.threadId},[u]);return Cf(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>bR(e,t),c.on("error",u=>{console.error("Worker error:",u),On.error("Worker error:",u)}),c.on("exit",u=>{jn.splice(jn.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<$ee?(t.unexpectedRestarts=c.unexpectedRestarts+1,bR(e,t)):On.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{k0[u.type]?.(u,c)}),jn.push(c),ate(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(bR,"startWorker");var zee=[wf.THREAD_TYPES.HTTP];async function DR(e=null,t=2,r=!0){if(wR){if(r){let{loadRootComponents:o}=C0();await o()}Zn.exports.restartNumber++,t<1&&(t=t*jn.length);let s=[],n=[];for(let o of jn.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;On.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:Zn.exports.restartNumber,type:wf.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=zee.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),CR*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Vee.ITC_EVENT_TYPES.CHILD_STARTED&&(On.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");On.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=dd();r&&(e==="http"||!e)&&Gee.get(wf.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else Ys.postMessage({type:Yee,workerType:e})}a(DR,"restartWorkers");function Jee(e,t){k0[e]=t}a(Jee,"setChildListenerByType");function Xee(e){return DR(e,1/0,!1)}a(Xee,"shutdownWorkers");var V0=[];function jee(e){V0.push(e)}a(jee,"onMessageFromWorkers");var yR=new Map;function $0(e,t){let r=yR.get(e);r||yR.set(e,r=[]),r.push(t)}a($0,"onMessageByType");var Zee=10;async function ete(e){let t=0;for(let r of jr)try{r.postMessage(e),t++>Zee&&(t=0,await new Promise(setImmediate))}catch(s){On.error("Unable to send message to worker",s)}}a(ete,"broadcast");var If=new Map,tte=1;function rte(e){return new Promise(t=>{let r=0;for(let s of jr)try{let n=tte++,i=a(()=>{If.delete(n),--r===0&&t(),s!==Ys&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,If.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of If)o.port===s&&o()})),s.postMessage(e),r++}catch(n){On.error("Unable to send message to worker",n)}r===0&&t()})}a(rte,"broadcastWithAcknowledgement");function ste(e){e.postMessage({type:H0,workers:Y0()})}a(ste,"sendThreadInfo");function Y0(){let e=Date.now();return jn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Y0,"getChildWorkerInfo");function nte(e,t){e.resources=t,e.resources.updated=Date.now()}a(nte,"recordResourceReport");var IR;function ite(e){IR=e}a(ite,"setMonitorListener");var ote=1e3,U0=!1;function ate(){U0||(U0=!0,setInterval(()=>{for(let e of jn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}IR&&IR()},ote).unref())}a(ate,"startMonitoring");var cte=1e3;if(Ys){Cf(Ys);for(let e=0,t=An.addPorts.length;e<t;e++){let r=An.addPorts[e];r.threadId=An.addThreadIds[e],Cf(r)}setInterval(()=>{let e=process.memoryUsage();Ys.postMessage({type:B0,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},cte).unref(),NR=a(()=>new Promise((e,t)=>{Ys.on("message",r),Ys.postMessage({type:v0});function r(s){s.type===H0&&(Ys.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else NR=Y0;Zn.exports.getThreadInfo=NR;function Cf(e,t){jr.push(e),e.on("message",r=>{if(r.type===F0)r.port.threadId=r.threadId,Cf(r.port);else if(r.type===Kee){let s=If.get(r.id);s&&s()}else{for(let n of V0)n(r,e);let s=yR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){On.error(i)}}}).on("close",()=>{jr.splice(jr.indexOf(e),1)}).on("exit",()=>{jr.splice(jr.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Cf,"addPort");if(wR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await qee(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(M0(s,i.name));try{for await(let{filename:i}of Fee(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await DR(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Zn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ys.on("message",async e=>{let{type:t}=e;t===wf.ITC_EVENT_TYPES.SHUTDOWN&&(Zn.exports.restartNumber=e.restartNumber,Ys.unref(),setTimeout(()=>{On.warn("Thread did not voluntarily terminate",Pee),process.exit(0)},CR).unref())})});function W0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;da||((0,bu.onMessageByType)(K0,d=>{Q0(d.path)}),(0,bu.onMessageByType)(ute,d=>{(0,Nu.trace)("confirming to proceed with txn",d.txnId)}),da=Object.create(null));let c=da[i]||(da[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=$o(t);let _=new MR(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function Q0(e,t){if(!da)return;let r=da[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:UR,exclusiveStart:!0})){UR=n;let o=Sr(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=$o(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,Nu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,Nu.info)(p)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},UR,!0)}function z0(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,bu.broadcast)({type:K0,path:n}),Q0(n,!0)})}}var Nu,bu,K0,ute,da,Afe,MR,UR,J0=Te(()=>{Nu=D(G()),bu=D(Ze());Pa();Qc();io();K0="transaction",ute="transaction-await",Afe=Buffer.alloc(4096);a(W0,"addSubscription");MR=class extends is{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},UR=Date.now();a(Q0,"notifyFromTransactionData");a(z0,"listenToCommits")});var MT={};Qe(MT,{coerceType:()=>Pf,makeTable:()=>Hf,setServerUtilities:()=>Ste,updateResource:()=>Cu});function Hf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:p}=e;p||(p=[]),z0(i,u);let S=nh(i,s,u),A=0,I,N,Y,Q={},q=Promise.resolve(),w,K,B;for(let W of p)(W.assignCreatedTime||W.name==="__createdtime__")&&(w=W),(W.assignUpdatedTime||W.name==="__updatedtime__")&&(K=W),W.expiresAt&&(B=W),W.isPrimaryKey&&(Q=W);let x,te=[],be=[],se=1,Pt=2,Pe={},At={},es=864e5,zR,qu,VB=10,$B=6;E&&jR();class at extends Nt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,g){g&&(this.sourceOptions=g,(g.expiration||g.eviction||g.scanInterval)&&this.setTTLExpiration(g)),g?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),N=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let C=a(y=>{let U=this.sources.slice(0,-1);if(U=U.filter(M=>M[y]&&(!M[y].reliesOnPrototype||M.prototype[y])),U.length>0)if(U.length===1){let M=U[0];return(V,z,oe)=>{if(V?.source!==M)return M[y](z,oe,V)}}else return(M,V,z)=>{let oe=[];for(let k of U){if(M?.source===k)break;oe.push(k[y](V,z,M))}return Promise.all(oe)}},"getApplyToIntermediateSource"),R=this.sources[this.sources.length-1],L=a(y=>{if(R[y]&&(!R[y].reliesOnPrototype||R.prototype[y]))return(U,M,V)=>{if(!U?.source)return R[y](M,V,U)}},"getApplyToCanonicalSource");return Pe={put:L("put"),delete:L("delete"),publish:L("publish")},At={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let y=!1,U=a(async(M,V)=>{let z=M.value,oe=M.table?xe[c][M.table]:at;if(c===Ns.SYSTEM_SCHEMA_NAME&&(M.table===Ns.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===Ns.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(y=!0),M.id===void 0&&(M.id=z[oe.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=m;let k=await oe.getResource(M.id,V,yu);switch(M.type){case"put":return k._writeUpdate(z,yu);case"delete":return k._writeDelete(yu);case"publish":return k._writePublish(z,yu);case"invalidate":return k.invalidate(yu);default:Ke.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=m.subscribe;M&&h==null&&(h=!0);let V=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Qi.getWorkerIndex)()):(0,Qi.getWorkerIndex)()===0,z=M&&V&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let 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"}),Du.signalSchemaChange(new Uu.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,Du.signalUserChange(new Uu.UserEventMsg(process.pid))),k.onCommit&&(Ne?.then?Ne.then(k.onCommit):k.onCommit())}catch(Ee){Ke.error("error in subscription handler",Ee)}}}catch(M){Ke.error(M)}})(),this}static getResource(m,g,C){let R=super.getResource(m,g,C);if(m!=null){pa(m);try{if(R.hasOwnProperty(Re))return R;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let L=!C?.async||i.cache?.get(m),y=In(g),U=y.getReadTxn();if(U?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return JR(m,g,{transaction:U},L,M=>{if(M?Cu(R,M):R[Re]=null,g.onlyIfCached&&g.noCacheStore){if(!R.doesExist())throw new Ws.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let V=Jf(m,M,g,R);if(V)return y?.disregardReadTxn(),R[vR]=!0,HR(V,z=>(Cu(R,z),R))}return R})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(m)),L}}return R}ensureLoaded(){let m=Jf(this[we],this[Ks],this[me]);if(m)return this[vR]=!0,HR(m,g=>{this[Ks]=g,this[Re]=g.value,this[Mf]=g.version})}static setTTLExpiration(m){if(typeof m=="number")d=m*1e3,f||(f=0);else if(m&&typeof m=="object")d=m.expiration*1e3,f=(m.eviction||0)*1e3,es=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");es=es||(d+f)/4,Xf()}static enableAuditing(m=!0){E=m,m&&jR(),at.audit=m}static coerceId(m){return m===""?null:Pf(m,Q)}static async dropTable(){if(delete xe[c][n],c===o){for(let m of p)l.remove(at.tableName+"/"+m.name),r[m.name]?.drop();l.remove(at.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Du.signalSchemaChange(new Uu.SchemaEventMsg(process.pid,Ns.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(m,g){if(m&&typeof m=="object"&&!Array.isArray(m)&&m.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(m,g)}get(m){if(typeof m=="string")return this.getProperty(m);if(this[cs])return this.search(m);if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[me]?.returnNonexistent)return this}allowRead(m,g){let C=xu(m);if(C?.read){let R=C.attribute_permissions;if(R){g||(g={});let L=g.select;if(L){let y=BR(R,"read");g.select=L.filter(U=>y[U])}else g.select=R.filter(y=>y.read).map(y=>y.attribute_name);return g}else return!0}}allowUpdate(m,g){let C=xu(m);if(C?.update){let R=C.attribute_permissions;if(R){let L=BR(R,"update");for(let y in g)if(!L[y])return!1;for(let y of R){let U=y.attribute_name;!y.update&&!(U in g)&&(g[U]=this.getProperty(U))}}return!0}}allowCreate(m,g){if(this[cs]){let C=xu(m);if(C?.insert){let R=C.attribute_permissions;if(R){let L=BR(R,"insert");for(let y in g)if(!L[y])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return xu(m)?.delete}update(m,g){if(!In(this[me]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let R;if(typeof m=="object"&&m)if(g){Object.isFrozen(m)&&(m=Object.assign({},m));for(let L in this[Re])m[L]===void 0&&(m[L]=void 0);this[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];pa(C),In(this[me]).addWrite({key:C,store:i,invalidated:!0,entry:this[Ks],nodeName:this[me]?.nodeName,before:Pe.invalidate?.bind(this,g,C),beforeIntermediate:At.invalidate?.bind(this,g,C),commit:(L,y)=>{if(y?.version>L)return;let U=null;for(let M in r)U||(U={}),U[M]=this.getProperty(M);S(C,U,this[Ks],L,Lf,E,this[me],0,"invalidate")}})}static evict(m,g,C){let R=this.Source,L;if(!((N||E)&&(!g||(L=i.getEntry(m),!L||!g)||L.version!==C))){if(N){if(i.hasLock(m,L.version))return;let y;for(let U in r)y||(y={}),y[U]=g[U];if(y){S(m,y,L,C,Df,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{Gu(m,g,null)}),E)S(m,null,L,C,Df,null,null,0,null,!0);else return i.remove(m,C)}}lock(){throw new Error("Not yet implemented")}static operation(m,g){return m.table||=n,m.schema||=c,sB.operation(m,g)}async put(m){this.update(m,!0)}_writeUpdate(m,g){let C=this[me],R=In(C),L=this[we];pa(L);let y=this[Ks];this[PR]=!0;let U={key:L,store:i,entry:y,nodeName:C?.nodeName,validate:M=>{if(!m[j0]||ul(m)){if(this.validate(m),C?.source?m=va(m):(t&&m[t]!==L&&(m[t]=L),K&&(m[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(y?.value?m[w.name]=y?.value[w.name]:m[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),m=va(m)),m[Re])throw new Error("Can not assign a record with a record property");this[Re]=m}else R.removeWrite(U)},before:Pe.put&&(()=>Pe.put(C,L,m)),beforeIntermediate:At.put&&(()=>At.put(C,L,m)),commit:(M,V,z)=>{z&&(C&&V?.version>(C.lastModified||0)&&(C.lastModified=V.version),Cu(this,V));let oe=V?.value;this[PR]=!1,Ke.trace("Checking timestamp for put",L,V?.version>M,V?.version,M),!(V?.version>M)&&(Gu(L,oe,m),S(L,m,V,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};R.addWrite(U)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[cs]){for await(let g of this.search(m))(await at.getResource(g[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Re]?this._writeDelete(m):!1}_writeDelete(m){let g=In(this[me]),C=this[we];pa(C);let R=this[me];return g.addWrite({key:C,store:i,resource:this,nodeName:R?.nodeName,before:Pe.delete?.bind(this,R,C),beforeIntermediate:At.delete?.bind(this,R,C),commit:(L,y,U)=>{let M=y?.value;U&&(R&&y?.version>(R.lastModified||0)&&(R.lastModified=y.version),Cu(this,y)),!(y?.version>L)&&(Gu(this[we],M),Ke.trace("Write delete entry",C,L),E||h?(S(C,null,this[Ks],L,0,E,this[me],0,"delete"),E||Xf()):i.remove(this[we]))}}),!0}search(m){let g=In(this[me]);if(!m)throw new Error("No query provided");let C=m.reverse===!0,R=m.conditions;R?R.length===void 0&&(R=Array.from(R)):R=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[we]&&(R=[{attribute:null,comparator:"prefix",value:this[we]}].concat(R));for(let k of R){let Ee=k[0]??k.attribute,Ne=Ee==null?Q:p.find(ne=>ne.name==Ee);if(Ne)Ne.type&&(k[1]===void 0?k.value=L(k.value,Ne):k[1]=L(k[1],Ne));else if(Ee!=null)throw(0,Ws.handleHDBError)(new Error,`${Ee} is not a defined attribute`,404)}function L(k,Ee){return Array.isArray(k)?k.map(Ne=>Pf(Ne,Ee)):Pf(k,Ee)}a(L,"coerceTypedValues"),R.length>1&&(R=(0,rB.sortBy)(R,k=>{if(k.estimated_count===void 0){let Ee=k.comparator||k.search_type;if(Ee===wu.SEARCH_TYPES.EQUALS){let Ne=k[0]??k.attribute;if(Ne==null||Ne===t)k.estimated_count=1;else{let ne=r[Ne];k.estimated_count=ne?ne.getValuesCount(k[1]??k.value):1/0}}else Ee===wu.SEARCH_TYPES.CONTAINS||Ee===wu.SEARCH_TYPES.ENDS_WITH||Ee==="ne"?k.estimated_count=1/0:Ee===wu.SEARCH_TYPES.STARTS_WITH||Ee==="prefix"?k.estimated_count=dte:k.estimated_count=_te}return k.estimated_count}));let y=g.getReadTxn();y.use();let U=m.select,M=R[0],V;if(!M)V=i.getRange(C?{end:!1,reverse:!0,transaction:y,lazy:U?.length<4}:{start:!1,transaction:y,lazy:U?.length<4}).map(({value:k})=>k?new Promise(Ee=>setImmediate(()=>Ee(k))):Uf.SKIP);else{let k=bE(M,y,C,at,m.allowFullScan);if(!m.operator||m.operator.toLowerCase()==="and"){let Ee=R.slice(1).map(yE);V=oe(k,Ee)}else{for(let Ne=1;Ne<R.length;Ne++){let ne=R[Ne],vt=bE(ne,y,C,at,m.allowFullScan);k=k.concat(vt)}let Ee=new Set;k=k.filter(Ne=>Ee.has(Ne)?!1:(Ee.add(Ne),!0)),V=oe(k)}}(m.offset||m.limit!==void 0)&&(V=V.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0)),V.onDone=()=>{V.onDone=null,y.done()};let z=this[me];function oe(k,Ee){let Ne=Ee?.length,ne={transaction:y,lazy:Ne>0||U?.length<4,alwaysPrefetch:!0},vt=m.ensureLoaded!==!1;function Vt(ii,He){if(vt&&He!==void 0){let lr=!z.onlyIfCached&&Jf(He,ii,z,this);if(lr)return lr.then(WB=>Vt(WB))}let bs=ii?.value;if(!bs)return Uf.SKIP;for(let lr=0;lr<Ne;lr++)if(!Ee[lr](bs))return Uf.SKIP;return bs}return a(Vt,"processEntry"),k.map(ii=>JR(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=W0(at,this[we]??null,function(y,U,M,V){try{let z=U.getValue?.(i);this.send({id:y,timestamp:M,value:z,version:U.version,type:U.type,beginTxn:V})}catch(z){Ke.error(z)}},m.startTime,this[cs]);m.crossThreads===!1&&(g.crossThreads=!1),m.supportsTransactions&&(g.supportsTransactions=!0);let C=this[we],R=m.previousCount;R>1e3&&(R=1e3);let L=m.startTime;if(this[cs]){if(L){if(R)throw new Ws.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:y,value:U}of u.getRange({start:L,exclusiveStart:!0})){let M=Sr(U,i);if(M.tableId!==s)continue;let V=M.recordId;(C==null||tB(C,V))&&g.send({id:V,timestamp:y,...M}),g.startTime=y}}else if(R){let y=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let V=Sr(M);if(V.tableId!==s)continue;let z=V.recordId;if(C==null||tB(C,z)){let 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,vf.MAXIMUM_KEY],versions:!0}))U&&g.send({id:y,version:M,timestamp:V,value:U})}else{R&&!L&&(L=0);let y=this[Ks]?.localTime;if(Ke.trace("Subscription from",L,"from",C),L<y){let U=[],M=y;do{let V=u.get(M);if(V){m.omitCurrent=!0;let z=Sr(V),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[Mf],timestamp:this[Ks]?.localTime,value:this})}return m.listener&&g.on("data",m.listener),g}doesExist(){return!!(this[Re]||this[PR])}async publish(m,g){this._writePublish(m,g)}_writePublish(m,g){let C=In(this[me]),R=this[we]||null;pa(R);let L=this[me];C.addWrite({key:R,store:i,entry:this[Ks],nodeName:L?.nodeName,validate:()=>{this.validate(m)},before:Pe.publish?.bind(this,L,R,m),beforeIntermediate:At.publish?.bind(this,L,R,m),commit:(y,U,M)=>{U===void 0&&h&&!E&&Xf(),S(R,U?.value??null,U,U?.version||y,0,!0,L,U?.expiresAt,"message",!1,m)}})}validate(m){let g,C=a((R,L,y)=>{if(L.type&&R!=null)if(L.properties){typeof R!="object"&&(g||(g=[])).push(`Property ${y} must be an object${L.type?" ("+L.type+")":""}`);let U=L.properties;for(let M=0,V=U.length;M<V;M++){let z=U[M],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[Mf]}wasLoadedFromSource(){return N?!!this[vR]:void 0}static async addAttributes(m){let g=p.slice(0);for(let C of m){if(!C.name)throw new Ws.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new Ws.ClientError("Attribute names cannot include backticks or forward slashes");g.push(C)}return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static async removeAttributes(m){let g=p.filter(C=>!m.includes(C.name));return et({table:n,database:c,schemaDefined:_,attributes:g}),at.indexingOperation}static getRecordCount(m){let g=i.getStats().entryCount,C=5e3,R=1e3,L;g>C&&!m?.exactCount&&(L=R);let y=0;for(let{value:U}of i.getRange({start:!0,lazy:!0,limit:L}))U!=null&&y++;if(L){let U=y;y=0;for(let{value: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(){_l(this,this)}static async deleteHistory(m=0){let g;for(let{key:C,value:R}of u.getRange({start:0,end:m}))await Iu(),Sr(R).tableId===s&&(g=u.remove(C));await g}static async*getHistory(m=0,g=1/0){for(let{key:C,value:R}of u.getRange({start:m,end:g})){await Iu();let L=Sr(R);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(m){let g=[],C=i.getEntry(m);if(!C)return g;let R=C.localTime,L=0;do{await Iu();let y=u.get(R);if(y){let U=Sr(y);g.push({id:U.recordId,localTime:R,version:U.version,type:U.type,value:U.getValue(i),user:U.user}),R=U.previousLocalTime}else break}while(L<1e3&&R);return g.reverse()}static cleanup(){x?.remove()}}at.updatedAttributes();let YB=at.prototype;return YB[j0]=!0,d&&at.setTTLExpiration(d/1e3),B&&KB(),at;function Gu(W,m,g){let C;for(let R in r){let L=r[R],y=L.isIndexing,U=g?.[R],M=m?.[R];if(U===M&&!y)continue;C=!0;let V=(0,Lu.getIndexedValues)(M);if(V){X0&&L.prefetch(V.map(z=>({key:z,value:W})),eB);for(let z=0,oe=V.length;z<oe;z++)L.remove(V[z],W)}if(V=(0,Lu.getIndexedValues)(U),V){X0&&L.prefetch(V.map(z=>({key:z,value:W})),eB);for(let z=0,oe=V.length;z<oe;z++)L.put(V[z],W)}}return C}a(Gu,"updateIndices");function pa(W){switch(typeof W){case"number":return!0;case"string":if(W.length<659)return!0;if(W.length>Z0)throw new Error("Primary key size is too large: "+W.length);break;case"object":if(W===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof W)}if((0,vf.writeKey)(W,mte,0)>Z0)throw new Error("Primary key size is too large: "+W.length);return!0}a(pa,"checkValidId");function JR(W,m,g,C,R){let L=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),g.transaction?.isDone)return R(null,W);let y=i.getEntry(W,g);return y&&m&&(y?.version>(m.lastModified||0)&&(m.lastModified=y.version),y?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=y.localTime)),R(y,W)},"whenPrefetched");return C?L():se>0?(se--,L()):new Promise((y,U)=>{se===0?(se--,i.prefetch([W],()=>{M(),V()})):(te.push(W),be.push(V),te.length>$B&&(se--,M()));function M(){if(te.length>0){let z=be;i.prefetch(te,()=>{se===-1?M():se++;for(let oe of z)oe()}),te=[],be=[],Pt>2&&Pt--}else se=Pt,Pt<VB&&Pt++}a(M,"prefetch");function V(){try{y(L())}catch(z){U(z)}}a(V,"load")})}a(JR,"loadLocalRecord");function xu(W){if(!W)return;let m=W.role.permission;if(m.super_user)return pte;let g=m[c],C,R=g?.tables;if(R)return R[n];if(c==="data"&&(C=m[n])&&!C.tables)return C}a(xu,"getTablePermissions");function Jf(W,m,g,C){if(N){let R;if(g.noCache?R=!0:(m?(!m.value||m.metadataFlags&(Lf|Df)||m.expiresAt&&m.expiresAt<Date.now())&&(R=!0):R=!0,kr(!R,"cache-hit",n)),R){let L=XR(W,m,g).then(y=>(y?.value?.[Re]&&Ke.error("Can not assign a record with a record property"),g&&(y?.version>(g.lastModified||0)&&(g.lastModified=y.version),g.lastRefreshed=Date.now()),y));if(g?.onlyIfCached||m?.value&&C?.allowStaleWhileRevalidate?.(m,W)){if(L.catch(y=>Ke.warn(y)),g?.onlyIfCached&&!C.doesExist())throw new Ws.ServerError("Entry is not cached",504);return}else return L}}}a(Jf,"ensureLoadedFromSource");function In(W){let m=W?.transaction;if(m){if(!m.open)throw new Error("Can not use a transaction that is not open");if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let g=m.next;if(!g)return m=m.next=new _i,m.lmdbDb=i,m;m=g}while(!0)}else return new El}a(In,"txnForContext");async function XR(W,m,g){let C=m?.metadataFlags,R=m?.version,L,y;if(!i.attemptLock(W,R,()=>{clearTimeout(y);let z=i.getEntry(W);!z||!z.value||z.metadataFlags&(Lf|Df)?L(XR(W,i.getEntry(W),g)):L(z)}))return new Promise(z=>{L=z,y=setTimeout(()=>{i.unlock(W,R)},hte)});let U=m?.value,M={requestContext:g,replacingRecord:U,replacingVersion:R,source:null,resourceCache:g?.resourceCache},V=g?.responseHeaders;return new Promise((z,oe)=>{let k;HR(Ge(M,async Ee=>{let Ne=performance.now(),ne,vt,Vt;try{for(let lr of at.sources)if(lr.get&&(!lr.get.reliesOnPrototype||lr.prototype.get)&&(M.source=lr,ne=await lr.get(W,M),ne))break;Vt=C&Lf;let He=M.lastModified||Vt&&R;vt=Vt||He>R||!U,He||(He=(0,Lu.getNextMonotonicTime)());let bs=performance.now()-Ne;if(Nr(bs,"cache-resolution",n),V&&V.append("Server-Timing",`cache-resolve;dur=${bs.toFixed(2)}`),Ee.timestamp=He,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==W&&(ne[t]=W)}k=!0,z({version:He,value:ne})}catch(He){He.message+=` while resolving record ${W} for ${n}`,U&&((He.code==="ECONNRESET"||He.code==="ECONNREFUSED"||He.code==="EAI_AGAIN")&&!g?.mustRevalidate||g?.staleIfError&&(He.statusCode===500||He.statusCode===502||He.statusCode===503||He.statusCode===504))?(z({version:R,value:U}),Ke.trace(He.message,"(returned stale record)")):oe(He),M.transaction.abort();return}if(g?.noCacheStore){M.transaction.abort();return}In(M).addWrite({key:W,store:i,entry:m,nodeName:"source",commit:(He,bs)=>{if(bs?.version!==R)return;let lr=Gu(W,U,ne);ne?(At.put?.(M,W,ne),S(W,ne,bs,He,0,E&&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(XR,"getFromSource");function Xf(){if(es!==zR&&(zR=es,(0,Qi.getWorkerIndex)()===(0,Qi.getWorkerCount)()-1)){if(qu&&clearTimeout(qu),!es)return;let W=new Date;W.setMonth(0),W.setDate(1),W.setHours(0),W.setMinutes(0),W.setSeconds(0);let m=Math.ceil((Date.now()-W.getTime())/es)*es+W.getTime(),g=a(C=>{Ke.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),qu=setTimeout(()=>q=q.then(async()=>{if(g(Math.max(C+es,Date.now())),i.rootStore.status!=="open"){clearTimeout(qu);return}Ke.trace(`Starting cleanup scan for ${n}`);try{let R=0;for(let{key:L,value:y,version:U,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))y===null&&!E&&U+Ete<Date.now()?i.remove(L,U):M&&M+f<Date.now()&&(at.evict(L,y,U),R++),await Iu();Ke.trace(`Finished cleanup scan for ${n}, evicted ${R} entries`)}catch(R){Ke.trace(`Error in cleanup scan for ${n}:`,R)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");g(m)}}a(Xf,"scheduleCleanup");function jR(){x=u?.addDeleteRemovalCallback(s,W=>{let m=i.getEntry(W);m?.value===null&&i.remove(W,m.version)})}a(jR,"addDeleteRemoval");function KB(){(0,Qi.getWorkerIndex)()===0&&setInterval(async()=>{try{let W=B.name,m=r[W];if(!m)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:g}of m.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(g);C?.value?.[W]<Date.now()&&at.evict(g,C.value,C.version),await Iu()}}catch(W){Ke.error("Error in evicting old records",W)}},fte).unref()}a(KB,"runRecordExpirationEviction")}function BR(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function eB(){}function Ste(e){sB=e}function Pf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Tte.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Bf.autoCast)(e)}function tB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function HR(e,t,r){return e?.then?e.then(t,r):t(e)}function Cu(e,t){e[Ks]=t,e[Re]=t?.value??null,e[Mf]=t?.version}var Ns,Uf,Lu,rB,wu,Mu,Ws,Du,Uu,Ke,vf,Qi,Bf,lte,sB,_te,dte,fte,Ete,X0,hte,Mf,j0,Ks,PR,vR,yu,Lf,Df,mte,Z0,pte,qfe,Tte,Iu,Zd=Te(()=>{Ns=D(b()),Uf=require("lmdb"),Lu=D(mr()),rB=require("lodash");as();OE();wu=D(ze()),Mu=D(X());J0();Ws=D(j()),Du=D(on()),Uu=D(ds());fe();ml();Ke=D(G());fl();di();vf=require("ordered-binary"),Qi=D(Ze());io();Bf=D($());Ga();xn();lte=new Uint8Array(9);lte[8]=192;_te=1e8,dte=1e7,fte=6e4,Ete=864e5;Mu.initSync();X0=Mu.get(Ns.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hte=1e4,Mf=Symbol.for("version"),j0=Symbol.for("incremental-update"),Ks=Symbol("entry"),PR=Symbol("is-saving"),vR=Symbol("loaded-from-source"),yu={isNotification:!0,ensureLoaded:!1},Lf=1,Df=8,mte=Buffer.allocUnsafeSlow(8192),Z0=1978,pte={read:!0,insert:!0,update:!0,delete:!0},qfe=(0,Bf.convertToMS)(Mu.get(Ns.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Hf,"makeTable");a(BR,"attributesAsObject");a(eB,"noop");a(Ste,"setServerUtilities");Tte=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Pf,"coerceType");a(tB,"isDescendantId");Iu=a(()=>new Promise(setImmediate),"rest");a(HR,"when");a(Cu,"updateResource")});var Ce={};Qe(Ce,{database:()=>hc,databases:()=>xe,dropDatabase:()=>Wm,dropTableMeta:()=>bte,getDatabases:()=>hs,getTables:()=>Rte,onUpdatedTable:()=>lR,readMetaDb:()=>Pu,resetDatabases:()=>gte,table:()=>et,tables:()=>pr});function Rte(){return kf||hs(),pr||{}}function hs(){if(kf)return xe;kf=!0,ha=new Map;let e=(0,kt.getHdbBasePath)()&&(0,Fe.join)((0,kt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),t=(0,kt.get)(Cr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,kt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,wr.existsSync)(e)?e:(0,Fe.join)((0,kt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,wr.existsSync)(e))for(let r of(0,wr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Pu((0,Fe.join)(e,r.name),null,s)}if((0,wr.existsSync)((0,Ea.getBaseSchemaPath)())){for(let r of(0,wr.readdirSync)((0,Ea.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Ea.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Ea.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,wr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Pu((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,wr.existsSync)(n))for(let o of(0,wr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Pu((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,wr.existsSync)(u)&&Pu(u,o,r,null,!0)}}for(let r in xe){let s=ha.get(r);if(s){let n=xe[r];r.includes("delete")&&Zr.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Zr.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in pr)delete pr[n];delete pr[Vf]}}return ha=null,xe}}function gte(){kf=!1;for(let[,e]of ei)e.needsDeletion=!0;hs();for(let[e,t]of ei)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),ei.delete(e));return xe}function Pu(e,t,r=GR,s,n){let i=new FR.default(e,!1);try{let o=ei.get(e);o?o.needsDeletion=!1:(o=(0,qf.open)(i),ei.set(e,o));let c=new zi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Ff.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,wr.existsSync)(s)&&(i.path=s,_=(0,qf.open)(i),_.isLegacy=!0):_=Al(o));let l=aB(r),d=l[Vf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,S]=E.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=f.get(p);A||f.set(p,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:S}=h;if(!S){for(let x of p)if(x.is_hash_attribute||x.isPrimaryKey){S=x;break}if(!S){Zr.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let A=l[E],I={},N=[],Y,Q,q=typeof S.audit=="boolean"?S.audit:(0,kt.get)(Cr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)I=A.indices,N=A.attributes,A.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(fa)||0)&&u.putSync(fa,Y+1):(S.tableId=Y=u.get(fa),Y||(Y=1),u.putSync(fa,Y+1),u.putSync(S.key,S));let x=new zi.default(!S.is_hash_attribute,S.is_hash_attribute);Q=Il(o.openDB(S.key,x)),Q.rootStore=o,Q.tableId=Y}for(let x of p){x.attribute=x.name;try{if(!x.is_hash_attribute&&(x.indexed||x.attribute&&!x.name)){if(!I[x.name]){let be=new zi.default(!x.is_hash_attribute,x.is_hash_attribute);I[x.name]=o.openDB(x.key,be)}let te=N.find(be=>be.name===x.name);te?N.splice(N.indexOf(te),1,x):N.push(x)}}catch(te){Zr.error("Error trying to update attribute",x,N,I,te)}}if(!A){A=cB(l,E,Hf({primaryStore:Q,auditStore:_,audit:q,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:I,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let x of xR)x(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function aB(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=pr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),ha&&!ha.has(e)){let r=new Set;t[Vf]=r,ha.set(e,r)}return t}function cB(e,t,r){return e[t]=r,r}function hc({database:e,table:t}){e||(e=GR),hs();let r=aB(e),s=(0,Fe.join)((0,kt.getHdbBasePath)(),Cr.DATABASES_DIR_NAME),n=(0,kt.get)(Cr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,kt.get)(Cr.CONFIG_PARAMS.STORAGE_PATH)||((0,wr.existsSync)(s)?s:(0,Fe.join)((0,kt.getHdbBasePath)(),Cr.LEGACY_DATABASES_DIR_NAME));let o=(0,Fe.join)(s,(i?t:e)+".mdb"),c=ei.get(o);if(!c){let u=new FR.default(o,!1);c=(0,qf.open)(u),ei.set(o,c)}return c}async function Wm(e){if(!xe[e])throw new Error("Schema does not exist");let t=xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;ei.delete(n.path),n.status==="open"&&(await n.close(),await nB.remove(n.path))}if(e==="data"){for(let r in pr)delete pr[r];delete pr[Vf]}delete xe[e]}function et({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=GR);let l=hc({database:t,table:e}),d=xe[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,S;u==null&&(u=!0);let A=new zi.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let I,N;if(f){if(E=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let w=l.auditStore;w||(w=Al(l)),h=i.find(te=>te.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,kt.get)(Cr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),Zr.trace(`${e} table loading, opening primary store`);let K=new zi.default(!1,!0),B=e+"/",x=Il(l.openDB(B,K));x.rootStore=l,S=l.dbisDb=l.openDB(Ff.INTERNAL_DBIS_NAME,A),x.tableId=S.get(fa),x.tableId||(x.tableId=1),S.putSync(fa,x.tableId+1),h.tableId=x.tableId,f=cB(d,e,Hf({primaryStore:x,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:x.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,I=!0,q(),S.put(B,h)}p=f.indices,S=S||(l.dbisDb=l.openDB(Ff.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let Y=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,x]=w.toString().split("/");if(x===""&&(x=K.name),x){if(B!==e)continue}else x=B;if(!i.find(be=>be.name===x)?.indexed&&K.indexed&&!K.isPrimaryKey){q(),I=!0,S.remove(w);let be=f.indices[B];be&&Y.push(be)}}let Q=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let te=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),te.audit=o),r&&(te.expiration=+r),s&&(te.eviction=+s),I=!0,q(),S.put(K,te)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let x=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let te=new zi.default(!0,!1),be=l.openDB(K,te);(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!0,q(),B=S.get(K),(x||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<vu.workerData?.restartNumber)&&(I=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,be.isIndexing=!0,Object.defineProperty(w,"dbi",{value:be}),Q.push(w)),S.put(K,w)),p[w.name]=be}else x&&(I=!0,q(),S.put(K,w))}}finally{N&&N()}if(I&&(f.schemaVersion++,f.updatedAttributes()),Zr.trace(`${e} table loading, running index`),Q.length>0||Y.length>0?f.indexingOperation=Nte(f,Q,Y):I&&Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,I)for(let w of xR)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),Zr.trace(`${e} table loaded`),f;function q(){N||l.transactionSync(()=>({then(w){N=w}}))}a(q,"startTxn")}async function Nte(e,t,r){try{let s=e.schemaVersion;await Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,p=(0,iB.getIndexedValues)(l[h]);if(p)for(let S=0,A=p.length;S<A;S++)E.dbi.put(p[S],_)}}),n.then(()=>u--,f=>{u--,Zr.error(f)}),vu.workerData&&vu.workerData.restartNumber!==oB.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>Ate?await n:u>Ote&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Gf.signalSchemaChange(new xf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Zr.error("Error in indexing",s)}}function bte({table:e,database:t}){let r=hc({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function lR(e){xR.push(e)}var kt,Ff,qf,Fe,wr,Ea,zi,FR,Cr,nB,qR,iB,Gf,xf,vu,Zr,oB,GR,Vf,pr,xe,fa,xR,kf,ei,ha,Ate,Ote,fe=Te(()=>{kt=D(X()),Ff=D(ze()),qf=require("lmdb"),Fe=require("path"),wr=require("fs"),Ea=D(ve());Zd();zi=D(wl()),FR=D(Ll()),Cr=D(b()),nB=D(require("fs-extra")),qR=require("../../index"),iB=D(mr()),Gf=D(on()),xf=D(ds()),vu=require("worker_threads"),Zr=D(G()),oB=D(Ze());io();Ga();GR="data",Vf=Symbol("defined-tables");(0,kt.initSync)();pr=Object.create(null),xe=Object.create(null);(0,qR._assignPackageExport)("databases",xe);(0,qR._assignPackageExport)("tables",pr);fa=Symbol.for("next-table-id"),xR=[],ei=new Map;a(Rte,"getTables");a(hs,"getDatabases");a(gte,"resetDatabases");a(Pu,"readMetaDb");a(aB,"ensureDB");a(cB,"setTable");a(hc,"database");a(Wm,"dropDatabase");a(et,"table");Ate=1e3,Ote=10;a(Nte,"runIndexing");a(bte,"dropTableMeta");a(lR,"onUpdatedTable")});var $=T((Qfe,AB)=>{"use strict";var ti=require("path"),fB=require("fs-extra"),cr=G(),uB=require("fs-extra"),$f=require("os"),yte=require("net"),Ite=require("recursive-iterator"),We=b(),wte=Dg(),lB=require("papaparse"),Yf=require("moment"),{inspect:Cte}=require("util"),_B=require("is-number"),Wfe=require("lodash"),Lte=require("minimist"),Dte=require("https"),Ute=require("http"),{hdb_errors:Kf}=j(),Mte=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,EB=require("util").promisify(setTimeout),Pte=100,vte=5,Bte="",Hte=4,dB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};AB.exports={isEmpty:Lr,isEmptyOrZeroLength:Qs,arrayHasEmptyValues:Gte,arrayHasEmptyOrZeroLengthValues:xte,buildFolderPath:kte,isBoolean:hB,errorizeMessage:Fte,stripFileExtension:$te,autoCast:Yte,autoCastJSON:mB,autoCastJSONDeep:VR,removeDir:Kte,compareVersions:Wte,isCompatibleDataVersion:Qte,escapeRawValue:zte,unescapeValue:Jte,stringifyProps:Xte,timeoutPromise:Zte,isClusterOperation:tre,getClusterUser:sre,checkGlobalSchemaTable:rre,getHomeDir:SB,getPropsFilePath:jte,promisifyPapaParse:nre,removeBOM:TB,createEventPromise:ire,checkProcessRunning:ore,checkSchemaTableExist:are,checkSchemaExists:RB,checkTableExists:gB,getStartOfTomorrowInSeconds:cre,getLimitKey:ure,isObject:Vte,isNotEmptyAndHasValue:qte,autoCasterIsNumberCheck:pB,backtickASTSchemaItems:lre,isPortTaken:ere,createForkArgs:_re,autoCastBoolean:dre,async_set_timeout:EB,getTableHashAttribute:fre,doesSchemaExist:Ere,doesTableExist:hre,stringifyObj:mre,ms_to_time:pre,changeExtension:Sre,getEnvCliRootPath:$R,noBootFile:Tre,httpRequest:Rre,transformReq:gre,convertToMS:Are,PACKAGE_ROOT:We.PACKAGE_ROOT};function Fte(e){return e instanceof Error?e:new Error(e)}a(Fte,"errorizeMessage");function Lr(e){return e==null}a(Lr,"isEmpty");function qte(e){return!Lr(e)&&(e||e===0||e===""||hB(e))}a(qte,"isNotEmptyAndHasValue");function Qs(e){return Lr(e)||e.length===0||e.size===0}a(Qs,"isEmptyOrZeroLength");function Gte(e){if(Lr(e))return!0;for(let t=0;t<e.length;t++)if(Lr(e[t]))return!0;return!1}a(Gte,"arrayHasEmptyValues");function xte(e){if(Qs(e))return!0;for(let t=0;t<e.length;t++)if(Qs(e[t]))return!0;return!1}a(xte,"arrayHasEmptyOrZeroLengthValues");function kte(...e){try{return e.join(ti.sep)}catch{console.error(e)}}a(kte,"buildFolderPath");function hB(e){return Lr(e)?!1:e===!0||e===!1}a(hB,"isBoolean");function Vte(e){return Lr(e)?!1:typeof e=="object"}a(Vte,"isObject");function $te(e){return Qs(e)?Bte:e.slice(0,-Hte)}a($te,"stripFileExtension");function Yte(e){return Lr(e)||e===""||typeof e!="string"?e:dB[e]!==void 0?dB[e]:pB(e)===!0?Number(e):Mte.test(e)?new Date(e):e}a(Yte,"autoCast");function mB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(mB,"autoCastJSON");function VR(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=VR(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=VR(r);s!==r&&(e[t]=s)}return e}else return mB(e)}a(VR,"autoCastJSONDeep");function pB(e){if(e.startsWith("0.")&&_B(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&_B(e))}a(pB,"autoCasterIsNumberCheck");async function Kte(e){if(Qs(e))throw new Error(`Directory path: ${e} does not exist`);try{await uB.emptyDir(e),await uB.remove(e)}catch(t){throw cr.error(`Error removing files in ${e} -- ${t}`),t}}a(Kte,"removeDir");function Wte(e,t){if(Qs(e)){cr.info("Invalid current version sent as parameter.");return}if(Qs(t)){cr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(Wte,"compareVersions");function Qte(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Qte,"isCompatibleDataVersion");function zte(e){if(Lr(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a(zte,"escapeRawValue");function Jte(e){if(Lr(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Jte,"unescapeValue");function Xte(e,t){if(Lr(e))return cr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+$f.EOL}!Qs(s)&&s[0]===";"?r+=" "+s+n+$f.EOL:Qs(s)||(r+=s+"="+n+$f.EOL)}catch{cr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Xte,"stringifyProps");function SB(){let e;try{e=$f.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(SB,"getHomeDir");function jte(){let e=ti.join(SB(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return fB.existsSync(e)||(e=ti.join(__dirname,"../","hdb_boot_properties.file")),e}a(jte,"getPropsFilePath");function Zte(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Zte,"timeoutPromise");async function ere(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=yte.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(ere,"isPortTaken");function tre(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){cr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(tre,"isClusterOperation");function rre(e,t){let r=(fe(),Z(Ce)).getDatabases();if(!r[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(rre,"checkGlobalSchemaTable");function sre(e,t){if(Lr(t)){cr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Lr(e)||Qs(e)){cr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){cr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){cr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(sre,"getClusterUser");function nre(){lB.parsePromise=function(e,t,r){return new Promise(function(s,n){lB.parse(e,{header:!0,transformHeader:TB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(nre,"promisifyPapaParse");function TB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(TB,"removeBOM");function ire(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;cr.info(`Got cluster status event response: ${Cte(n)}`);try{i.cancel()}catch{cr.error("Error trying to cancel timeout.")}s(n)})})}a(ire,"createEventPromise");async function ore(e){let t=!0,r=0;do await EB(Pte*r++),(await wte.findPs(e)).length>0&&(t=!1);while(t&&r<vte);if(t)throw new Error(`process ${e} was not started`)}a(ore,"checkProcessRunning");function are(e,t){let r=RB(e);if(r)return r;let s=gB(e,t);if(s)return s}a(are,"checkSchemaTableExist");function RB(e){let{getDatabases:t}=(fe(),Z(Ce));if(!t()[e])return Kf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(RB,"checkSchemaExists");function gB(e,t){let{getDatabases:r}=(fe(),Z(Ce));if(!r()[e][t])return Kf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(gB,"checkTableExists");function cre(){let e=Yf().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=Yf().utc().unix();return e-t}a(cre,"getStartOfTomorrowInSeconds");function ure(){return Yf().utc().format("DD-MM-YYYY")}a(ure,"getLimitKey");function lre(e){try{let t=new Ite(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){cr.error("Got an error back ticking items."),cr.error(t)}}a(lre,"backtickASTSchemaItems");function _re(e){return[e]}a(_re,"createForkArgs");function dre(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(dre,"autoCastBoolean");function fre(e,t){let{getDatabases:r}=(fe(),Z(Ce)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(fre,"getTableHashAttribute");function Ere(e){let{getDatabases:t}=(fe(),Z(Ce));return t()[e]!==void 0}a(Ere,"doesSchemaExist");function hre(e,t){let{getDatabases:r}=(fe(),Z(Ce));return r()[e]?.[t]!==void 0}a(hre,"doesTableExist");function mre(e){try{return JSON.stringify(e)}catch{return e}}a(mre,"stringifyObj");function pre(e){let t=Yf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(pre,"ms_to_time");function Sre(e,t){let r=ti.basename(e,ti.extname(e));return ti.join(ti.dirname(e),r+t)}a(Sre,"changeExtension");function $R(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Lte(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a($R,"getEnvCliRootPath");var kR;function Tre(){if(kR)return kR;let e=$R();$R()&&fB.pathExistsSync(ti.join(e,We.HDB_CONFIG_FILE))&&(kR=!0)}a(Tre,"noBootFile");function Rre(e,t){let r;return e.protocol==="http:"?r=Ute:r=Dte,new Promise((s,n)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(Rre,"httpRequest");function gre(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(gre,"transformReq");function Are(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(Are,"convertToMS")});var wB=T((Jfe,IB)=>{"use strict";var Dr=X(),Ore=tc(),ce=b(),Bu=ke(),Nn=require("path"),{PACKAGE_ROOT:Qf}=b(),OB=X(),Wf=$(),ma="/dev/null",Nre=Nn.join(Qf,"launchServiceScripts"),NB=Nn.join(Qf,"utility/scripts"),bre=Nn.join(NB,ce.HDB_RESTART_SCRIPT),bB=Nn.resolve(Qf,"dependencies",`${process.platform}-${process.arch}`,Bu.NATS_BINARY_NAME);function yB(){let t=Ore.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 Wf.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Qf}}a(yB,"generateMainServerConfig");var yre=9930;function Ire(){Dr.initSync(!0);let e=Dr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.HUB_SERVER),r=Nn.join(Dr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=OB.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Dr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==yre?"-"+s:""),script:bB,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 Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Ire,"generateNatsHubServerConfig");var wre=9940;function Cre(){Dr.initSync(!0);let e=Dr.get(ce.CONFIG_PARAMS.ROOTPATH),t=Nn.join(e,"clustering",Bu.NATS_CONFIG_FILES.LEAF_SERVER),r=Nn.join(Dr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=OB.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Bu.LOG_LEVEL_FLAGS[Dr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==wre?"-"+s:""),script:bB,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 Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ma,i.error_file=ma),i}a(Cre,"generateNatsLeafServerConfig");function Lre(){Dr.initSync();let e=Nn.join(Dr.get(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:Nre,autorestart:!1};return Dr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ma,t.error_file=ma),t}a(Lre,"generateClusteringUpgradeV4ServiceConfig");function Dre(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return Wf.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Wf.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NB},script:bre}}a(Dre,"generateRestart");function Ure(){return{apps:[yB()]}}a(Ure,"generateAllServiceConfigs");IB.exports={generateAllServiceConfigs:Ure,generateMainServerConfig:yB,generateRestart:Dre,generateNatsHubServerConfig:Ire,generateNatsLeafServerConfig:Cre,generateClusteringUpgradeV4ServiceConfig:Lre}});var FS=T((Zfe,xB)=>{"use strict";var Ae=b(),Mre=$(),bn=US(),Hu=dt(),zs=ke(),ri=wB(),zf=X(),si=G(),Pre=un(),{startWorker:CB,onMessageFromWorkers:vre}=Ze(),Bre=Fo(),jfe=require("util"),Hre=require("child_process"),Fre=require("fs"),{execFile:qre}=Hre,Se;xB.exports={enterPM2Mode:Gre,start:ni,stop:YR,reload:DB,restart:UB,list:KR,describe:PB,connect:yn,kill:Yre,startAllServices:Kre,startService:WR,getUniqueServicesList:vB,restartAllServices:Wre,isServiceRegistered:BB,reloadStopStart:HB,restartHdb:MB,deleteProcess:Vre,startClusteringProcesses:qB,startClusteringThreads:GB,isHdbRestartRunning:$re,isClusteringRunning:zre,stopClustering:Qre,reloadClustering:Jre};var Fu=!1;vre(e=>{e.type==="restart"&&zf.initSync(!0)});function Gre(){Fu=!0}a(Gre,"enterPM2Mode");function yn(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{si.setupConsoleLogging(),r&&t(r),e(s)})})}a(yn,"connect");var ur,xre=10,LB;function ni(e,t=!1){if(Fu)return kre(e);let r=qre(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=ur.indexOf(r);o>-1&&ur.splice(o,1),!LB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<xre&&(Fre.existsSync(bn.getHubConfigPath())?ni(e):(await bn.generateNatsConfig(!0),ni(e),await new Promise(c=>setTimeout(c,3e3)),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=zf.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=zs.LOG_LEVELS[f]}if(zs.LOG_LEVEL_HIERARCHY[o]>=zs.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===zs.LOG_LEVELS.ERR||l===zs.LOG_LEVELS.WRN?si.OUTPUTS.STDERR:si.OUTPUTS.STDOUT;si.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),ur=[],!ur&&!t){let i=a(()=>{LB=!0,ur&&(ur.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}ur.push(r)}a(ni,"start");function kre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(kre,"startWithPM2");function YR(e){if(!Fu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(YR,"stop");function DB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(DB,"reload");function UB(e){if(!Fu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(UB,"restart");function Vre(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Vre,"deleteProcess");async function MB(){await ni(ri.generateRestart())}a(MB,"restartHdb");async function $re(){let e=await KR();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a($re,"isHdbRestartRunning");function KR(){return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(KR,"list");function PB(e){return new Promise(async(t,r)=>{try{await yn()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(PB,"describe");function Yre(){if(!Fu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await yn()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(Yre,"kill");async function Kre(){try{await qB(),await GB(),await ni(ri.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Kre,"startAllServices");async function WR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=ri.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=ri.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=ri.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=ri.generateNatsHubServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=ri.generateNatsLeafServerConfig(),await ni(r,t),await bn.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ni(r)}catch(r){throw Se?.disconnect(),r}}a(WR,"startService");async function vB(){try{let e=await KR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Se?.disconnect(),e}}a(vB,"getUniqueServicesList");async function Wre(e=[]){try{let t=!1,r=await vB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await UB(o))}t&&await HB(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Wre,"restartAllServices");async function BB(e){if(ur?.find(r=>r.name===e))return!0;let t=await Bre.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(BB,"isServiceRegistered");async function HB(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?zf.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):zf.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await PB(e),s=Mre.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await YR(e),await WR(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await MB():await DB(e)}a(HB,"reloadStopStart");var FB;async function qB(e=!1){for(let t in Ae.CLUSTERING_PROCESSES){let r=Ae.CLUSTERING_PROCESSES[t];await WR(r,e)}}a(qB,"startClusteringProcesses");async function GB(){FB=CB(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Hu.createWorkQueueStream(zs.WORK_QUEUE_CONSUMER_NAMES),await Hu.updateIngestStreamConsumer(),await Hu.updateLocalStreams();let e=await Pre.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){si.info("Starting clustering upgrade 4.0.0 process"),CB(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(GB,"startClusteringThreads");async function Qre(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await FB.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await YR(t)}}a(Qre,"stopClustering");async function zre(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await BB(t)===!1)return!1}return!0}a(zre,"isClusteringRunning");async function Jre(){await bn.generateNatsConfig(!0),await Hu.reloadNATSHub(),await Hu.reloadNATSLeaf(),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await bn.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Jre,"reloadClustering")});var QR=FS(),kB=b();a(async function(){try{let t=await QR.describe(kB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await QR.reload(r.pm_id);await QR.deleteProcess(kB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
|